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
- 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.
- Il existe deux exemples de classes de plug-in différents :
- WebClientPlugin utilise la classe WebClient
- HttpClientPlugin utilise la classe HttpClient
- 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).
- 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.
- 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.
- Si aucune valeur n’est fournie, la valeur par défaut
- À 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).
- 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.
- 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
- 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.
- 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. - 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
Emploie une classe
CustomWebClient
dérivée pour définir la Propriété WebRequest.Timeout qui n’est pas disponible dans la classeWebClient
./// <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; } }
Utilise la méthode WebClient.DownloadData pour télécharger les données à partir de la ressource.
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
- Utilise la classe HttpClient et définit la propriété d’expiration pour limiter le temps imparti pour effectuer l’opération.
- 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é).