Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los complementos y las actividades personalizadas de flujo de trabajo pueden obtener acceso a la red con los protocolos HTTP y HTTPS. Esta funcionalidad proporciona soporte para obtener acceso a los servicios web populares como sitios sociales, fuentes de noticias, servicios web, etc. Las siguientes restricciones de acceso web se aplican a esta funcionalidad de espacios aislados.
- El servidor debe tener la versión actual de TLS y conjuntos de cifrado.
- Solo se admiten los protocolos HTTP y HTTPS.
- El acceso a localhost (bucle invertido) no está permitido.
- Las direcciones IP no se pueden usar. Debe usar una dirección web con nombre que requiera resolución de nombres DNS.
- La autenticación anónima es compatible y se recomienda. No hay ninguna disposición que solicite al usuario conectado sus credenciales o que las guarde.
- Su servidor debe permitir las conexiones desde los valores de dirección IP de los servicios de Power Platform y Dynamics 365 especificados en la etiqueta de servicio de
PowerPlatformPlex.
Otros métodos de acceso a los servicios web incluyen el uso de webhooks y el Azure Service Bus. Consulte los vínculos proporcionados en las secciones siguientes para obtener más información sobre estos temas.
Cómo obtener acceso a servicios web externos
La mayoría de los usuarios están famliarizados con la clase System.Net.Http.HttpClient.
HttpClient se introdujo con .NET Framework 4.5 y ofrece funcionalidades significativas sobre la clase System.Net.WebClient que ahora está en desuso.
HttpClient está diseñado para ser reutilizado y es asincrónico de forma predeterminada. Puesto que HttpClient es asincrónico de forma predeterminada, debe olvidarse de los patrones de uso típicos y agregar código para forzar las operaciones que se deben realizar de forma sincrónica, normalmente quitando la palabra clave await y anexando .GetAwaiter().GetResult() a cualquier llamada asincrónica.
public void Execute(IServiceProvider serviceProvider)
{
//Extract the tracing service for use in plug-in debugging.
ITracingService tracingService =
(ITracingService)serviceProvider.GetService(typeof(ITracingService));
try
{
tracingService.Trace("Downloading the target URI: " + webAddress);
try
{
// Download the target URI using a Web client. Any .NET class that uses the
// HTTP or HTTPS protocols and a DNS lookup should work.
using (HttpClient client = new HttpClient())
{
client.Timeout = TimeSpan.FromMilliseconds(15000); //15 seconds
client.DefaultRequestHeaders.ConnectionClose = true; //Set KeepAlive to false
HttpResponseMessage response = client.GetAsync(webAddress).Result; //Make sure it is synchonrous
response.EnsureSuccessStatusCode();
string responseText = response.Content.ReadAsStringAsync().Result; //Make sure it is synchonrous
tracingService.Trace(responseText);
//Log success in the Plugin Trace Log:
tracingService.Trace("HttpClientPlugin completed successfully.");
}
}
catch (AggregateException aex)
{
tracingService.Trace("Inner Exceptions:");
foreach (Exception ex in aex.InnerExceptions) {
tracingService.Trace(" Exception: {0}", ex.ToString());
}
throw new InvalidPluginExecutionException(string.Format(CultureInfo.InvariantCulture,
"An exception occurred while attempting to issue the request.", aex));
}
}
catch (Exception e)
{
tracingService.Trace("Exception: {0}", e.ToString());
throw;
}
}
Más información en Ejemplo: acceso web desde un complemento
Procedimientos recomendados
Como se indica en los siguientes artículos de procedimientos recomendados:
- Establecer KeepAlive en false para interactuar con hosts externos en un complemento
- Establecer tiempo de espera al realizar llamadas externas en un complemento
Debe asegurarse de establecer un período Timeout adecuado para sus llamadas externas y deshabilitar KeepAlive. Para obtener más información, consulte los vínculos anteriores.
Consulte también
Complementos
Extensiones de flujo de trabajo
Integración de Azure
Utilizar webhooks