Compartir a través de


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:

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