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 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:

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