Acceso a servicios web externos
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 Dynamics 365 especificados en la etiqueta de servicio de AzureCloud.
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