Partager via


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.

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 :

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