Accès aux services web externes
Les plug-ins et activités de workflow personnalisées peuvent accéder au réseau via les protocoles HTTP et HTTPS. Cette fonctionnalité permet l’accès aux services web populaires comme les sites sociaux, les fils d’actualités, les services Web, etc. Les restrictions d’accès web suivantes s’appliquent à cette fonctionnalité de bac à sable.
- Votre serveur doit utiliser les suites de chiffrement et TLS actuelles.
- Seuls les protocoles HTTP et HTTPS sont autorisés.
- L’accès à localhost (bouclage) n’est pas autorisé.
- Les adresses IP ne peuvent pas être utilisées. Vous devez utiliser une adresse Web nommée qui requiert la résolution de noms DNS.
- L’authentification anonyme est prise en charge et recommandée. Il n’existe aucune disposition pour inviter l’utilisateur connecté à indiquer ses informations d’identification ou les enregistrer.
- Votre serveur doit autoriser les connexions depuis Power Platform et les valeurs d’adresse IP des services Dynamics 365 spécifiées sous la balise de service AzureCloud.
D’autres méthodes d’accès aux services web comprennent l’utilisation de webhooks et d’Azure Service Bus. Reportez-vous aux liens fournis dans les sections suivantes pour plus d’informations sur ces rubriques.
Comment accéder aux services web externes
De nos jours, la plupart des utilisateurs connaissent la classe System.Net.Http.HttpClient.
HttpClient
a été introduit avec .NET Framework 4.5 et offre des fonctions significatives sur la classe System.Net.WebClient, qui est maintenant obsolète.
HttpClient
est conçu pour être réutilisé et est asynchrone par défaut. Comme HttpClient
est asynchrone par défaut, vous devez arrêter d’utiliser des modèles classiques et ajouter du code pour forcer les opérations à s’effectuer de manière synchrone, généralement en supprimant le mot clé await
et en ajoutant .GetAwaiter().GetResult()
à tous les appels asynchrone.
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;
}
}
Pour plus d’informations, voir Exemple : Accès web à partir d’un plug-in
Pratiques recommandées
Comme indiqué dans les articles suivants sur les meilleures pratiques :
- Définissez KeepAlive sur false lorsque vous interagissez avec des hôtes externes dans un plug-in
- Définir le délai d’expiration lors d’appels externes dans un plug-in
Vous devez définir une période de Timeout
appropriée pour vos appels externes et désactiver KeepAlive
. Consultez les liens précédents pour en savoir plus.
Voir aussi
Plug-ins
Extensions de workflow
Intégration Azure
Utiliser des webhooks