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.
- Ihr Server muss über die aktuellen TLS und verschlüsselten Suiten verfügen.
- Nur die HTTP- und HTTPS-Protokolle sind erlaubt.
- Der Zugriff auf localhost (Loopback) ist nicht erlaubt.
- IP-Adressen können nicht verwendet werden. Sie müssen eine benannte Internetadresse verwenden, die die DNS-Namensauflösung erfordert.
- Anonyme Authentifizierung wird unterstützt und empfohlen. Es gibt keine Vorgabe für die Aufforderung des angemeldeten Benutzenden zur Eingabe oder zum Speichern von Anmeldeinformationen.
- Ihr Server muss Verbindungen von IP-Adresswerten von Power Platform- und Dynamics 365-Diensten, die unter dem AzureCloud-Diensttag angegeben sind, zulassen.
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:
- KeepAlive auf falsch setzen, wenn Sie mit externen Hosts in einem Plug-in interagieren
- Timeout bei externen Anrufen in einem Plug-In einstellen
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