Freigeben über


Zugriff auf externe Webservices

Plug-Ins und benutzerdefinierte Workflowaktivitäten können über die Protokolle HTTP und HTTPS auf das Netzwerk zugreifen. Diese Funktion bietet Unterstützung für den Zugriff auf gängige Webdienste wie Social Sites, Newsfeeds, Webservices und mehr. Die folgenden Internet-Zugriffsbeschränkungen gelten für diese Sandboxfunktion.

Andere Methoden für den Zugriff auf Webdienste sind die Verwendung von Webhooks und des Azure Service Bus. Weitere Informationen zu diesen Themen finden Sie unter den Links in den nächsten Abschnitten.

So greifen Sie auf externe Webservices zu

Heute sind die meisten Menschen mit der System.Net.Http.HttpClient-Klasse vertraut. HttpClient wurde mit .NET Framework 4.5 eingeführt und bietet umfassende Funktionen im Vergleich zur System.Net.WebClient-Klasse, die inzwischen veraltet ist.

HttpClient dient zur Wiederverwendung und ist standardmäßig asynchron. Da HttpClient standardmäßig asynchron ist, müssen Sie von typischen Gebrauchsmustern Abstand nehmen und Code hinzufügen, der erzwingt, dass die Vorgänge synchron durchgeführt werden. Dies geschieht in der Regel durch Entfernen des Schlüsselworts await und Anhängen von .GetAwaiter().GetResult() an jeden asynchronen Aufruf.

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;
  }
}

Weitere Informationen: Beispiel: Webzugriff über ein Plug-In

Best Practices

Gemäß den folgenden Artikeln zu bewährten Methoden:

Sie müssen sicherstellen, dass ein angemessener Timeout-Zeitraum für Ihre externen Aufrufe festgelegt und KeepAlive deaktiviert wird. Weitere Informationen erhalten Sie in den vorhergehenden Links.

Siehe auch

Plug-Ins
Workflowerweiterungen
Azure-Integration
Verwenden von Webhooks