Exemple : Accès Web à partir d’un plug-in

Cet exemple montre comment écrire un plug-in qui peut accéder aux ressources (réseau) web en tant que service web ou flux. Il montre également comment limiter la durée impartie à cet appel.

Comment exécuter cet exemple

  1. Télécharger ou cloner le référentiel Exemples pour en avoir une copie locale. Cet exemple se trouve sous PowerApps-Samples-master\dataverse\orgsvc\C#\WebAccessPlugin.
  2. Il existe deux exemples de classes de plug-in différents :
  3. Ouvrez l’exemple de solution dans Visual Studio, accédez aux propriétés du projet, puis vérifiez que l’assembly sera signé pendant la build. Appuyez sur F6 pour générer l’assemblage d’un exemple (WebAccessPlugin.dll).
  4. Exécutez l’outil Plug-in Registration et enregistrez l’exemple d’assembly dans le sandbox et la base de données du serveur Microsoft Dataverse.
  5. Pour l′un ou l′autre type de plug-in, lors de l′enregistrement d′une étape, spécifiez une chaîne d′URI web (c′est-à-dire, https://www.microsoft.com) dans la colonne de configuration non sécurisée.
    • Si aucune valeur n’est fournie, la valeur par défaut https://www.bing.com est utilisée.
  6. À l’aide d’une application ou d’un code d’écriture pour effectuer l’opération appropriée pour invoquer le message et la requête de table sur lesquels vous avez enregistré le plug-in (créez un compte).
  7. Lorsque le plug-in s’exécute, si la durée de l’appel dépasse les 15 secondes imparties, cela déclenche une erreur. Sinon, l’opération doit réussir.
  8. Lorsque vous avec terminé vos tests, annulez l’enregistrement de l’assembly et de l’étape.

En quoi consiste cet exemple :

Une fois exécuté, le plug-in télécharge les données de la page Web à partir de l’adresse de service Web spécifiée (ou de l’adresse par défaut). Si la demande dépasse la limite de 15 secondes, elle lance une InvalidPluginExecutionException et écrivez les détails dans le journal de suivi du plug-in.

  • Si le plug-in WebClientPlugin échoue, il écrit quelque chose comme ce qui suit dans le journal de suivi du plug-in :

    Downloading the target URI: https://www.bing.com
    Exception: Microsoft.Xrm.Sdk.InvalidPluginExecutionException: The timeout elapsed while attempting to issue the request. ---> System.Net.WebException: The operation has timed out
      at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
      at System.Net.WebClient.DownloadData(Uri address)
      at PowerApps.Samples.WebClientPlugin.Execute(IServiceProvider serviceProvider)
      --- End of inner exception stack trace ---
      at PowerApps.Samples.WebClientPlugin.Execute(IServiceProvider serviceProvider)
    
  • Si le plug-in HttpClientPlugin échoue, il écrit quelque chose comme ce qui suit dans le journal de suivi du plug-in :

    Downloading the target URI: https://www.bing.com
    Inner Exceptions:
      Exception: System.Threading.Tasks.TaskCanceledException: A task was canceled.
    Exception: Microsoft.Xrm.Sdk.InvalidPluginExecutionException: An exception occurred while attempting to issue the request.
       at PowerApps.Samples.HttpClientPlugin.Execute(IServiceProvider serviceProvider)
    

    L’exception TaskCanceledException est quelque peu ambiguë sur la cause de la tâche étant annulée. Pour obtenir une solution plus complète indiquant comment détecter explicitement des erreurs dues à des dépassements du temps, consultez ce billet de blog : Better timeout handling with HttpClient.

Utiliser cet exemple

Afin de simuler le scénario décrit dans En quoi consiste cet exemple, l’exemple procède comme suit :

Configuration

  1. Vérifie le paramètre de configuration non sécurisé du constructeur pour une valeur d’adresse Web ; sinon, la valeur par défaut est utilisée.
  2. Selon le plug-in qui est enregistré, la Classe WebClient ou la Classe HttpClient est utilisée par la méthode Execute plug-in pour télécharger les données de page Web.
  3. Si l’appel dépasse la durée de 15 secondes spécifiée, une InvalidPluginExecutionException est lancée et les détails sur l’erreur sont écrits dans le journal de suivi du plug-in.

Démontrer

Plugin WebClientPlugin

  1. Emploie une classe CustomWebClient dérivée pour définir la Propriété WebRequest.Timeout qui n’est pas disponible dans la classe WebClient.

     /// <summary>
     /// A class derived from WebClient with 15 second timeout and KeepAlive disabled
     /// </summary>
     public class CustomWebClient : WebClient
     {
       protected override WebRequest GetWebRequest(Uri address)
       {
         HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
         if (request != null)
         {
           request.Timeout = 15000; //15 Seconds
           request.KeepAlive = false;
    
         }
         return request;
       }
     }
    
  2. Utilise la méthode WebClient.DownloadData pour télécharger les données à partir de la ressource.

  3. Indique comment analyser la classe WebException attendue et utiliser la propriété de statut pour déterminer si l’origine de l’échec est due à un délai d’expiration.

Plugin HttpClientPlugin

  1. Utilise la classe HttpClient et définit la propriété d’expiration pour limiter le temps imparti pour effectuer l’opération.
  2. Intercepte la classe AggregateException attendue et examine l’exception interne pour la TaskCanceledException prévue.

Voir aussi

Accéder aux ressources web externes
Enregistrer un plug-in

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).