Freigeben über


Beispiel: Webzugriff von einem Plug-in aus

Dieses Beispiel zeigt, wie man ein Plug-in schreibt, das auf Web-(Netzwerk-)Ressourcen wie einen Webservice oder Feed zugreifen kann. Es wird auch gezeigt, wie man die für diesen Anruf zulässige Zeitdauer begrenzt.

Wie man dieses Beispiel ausführt

  1. Um eine lokale Kopie zu erhalten, laden Sie den Beispielbericht herunter, oder klonen Sie ihn. Dieses Beispiel befindet sich unter PowerApps-Samples-master\dataverse\orgsvc\C#\WebAccessPlugin.
  2. Es gibt zwei verschiedene Beispiele für Plug-in-Klassen:
  3. Öffnen Sie die Beispiellösung in Visual Studio, navigieren Sie zu den Eigenschaften des Projekts und vergewissern Sie sich, dass die Assembly während des Builds signiert wird. Drücken Sie F6, um die Assembly des Samples zu erstellen (WebAccessPlugin.dll).
  4. Führen Sie das Plug-in-Registrierungstool aus und registrieren Sie die Baugruppe in der Sandbox und Datenbank des Microsoft Dataverse-Servers.
  5. Geben Sie für beide Plug-In-Typen beim Registrieren eines Schritts eine Web-URI-Zeichenfolge an (d. h. https://www.microsoft.com) in der Spalte „Unsichere Konfiguration“.
    • Der Standardwert https://www.bing.com wird verwendet, wenn kein Wert angegeben wird.
  6. Verwenden Sie eine App oder schreiben Sie Code, um die entsprechende Operation auszuführen, um die Anfrage für Nachrichten und Tabellen aufzurufen, auf die Sie das Plug-In registriert haben.
  7. Wenn das Plug-in ausgeführt wird und die Dauer des Aufrufs die 15-Sekunden-Grenze überschreitet, wird ein Fehler ausgelöst. Andernfalls sollte es gelingen.
  8. Wenn Sie mit dem Testen fertig sind, heben Sie die Registrierung der Assembly auf und gehen Sie wie folgt vor.

Funktionsweise:

Wenn das Plug-in ausgeführt wird, lädt es Webseitendaten von der angegebenen Webservice-Adresse (oder der Standardadresse) herunter. Wenn die Anfrage das 15-Sekunden-Limit überschreitet, wird eine InvalidPluginExecutionException geworfen und Details in das Plug-in-Trace-Log geschrieben.

  • Wenn das WebClientPlugin-Plugin fehlschlägt, schreibt es etwas wie das Folgende in das Plug-in-Trace-Protokoll:

    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)
    
  • Wenn das Plug-in HttpClientPlugin fehlschlägt, schreibt es etwas wie das Folgende in das Plug-in-Trace-Log:

    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)
    

    Die TaskCanceledException ist etwas zweideutig bezüglich der Ursache für das Abbrechen der Aufgabe. Eine umfassendere Lösung, die zeigt, wie man Fehler aufgrund von Timeouts explizit erkennt, finden Sie in diesem Blogbeitrag: Bessere Timeout-Verarbeitung mit HttpClient.

Wie dieses Beispiel funktioniert

Um das unter Was macht dieses Beispiel, beschriebene Szenario zu simulieren, geht das Beispiel wie folgt vor:

Einrichtung

  1. Überprüft den unsicheren Konfigurationsparameter des Konstruktors auf einen Webadressenwert; andernfalls wird der Standardwert verwendet.
  2. Je nachdem, welches Plug-in registriert ist, wird entweder die Klasse WebClient Class oder HttpClient Class von der Execute-Methode des Plug-ins verwendet, um Webseiten-Daten herunterzuladen.
  3. Wenn der Aufruf die angegebene Dauer von 15 Sekunden überschreitet, wird eine InvalidPluginExecutionException geworfen und Details über den Fehler werden in das Plug-in-Trace-Protokoll geschrieben.

Demonstrieren

WebClientPlugin Plugin Plugin

  1. Verwendet eine abgeleitete CustomWebClient-Klasse, um die Eigenschaft WebRequest.Timeout einzustellen, die in der Klasse WebClient nicht verfügbar ist.

     /// <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. Verwendet die WebClient.DownloadData Methode, um die Daten von der Ressource herunterzuladen.

  3. Zeigt, wie man die erwartete WebException Class analysiert und die Status-Eigenschaft verwendet, um festzustellen, ob die Ursache des Fehlers auf ein Timeout zurückzuführen ist.

HttpClientPlugin-Plugin-Plugin

  1. Verwendet die HttpClient Class und setzt die Timeout-Eigenschaft, um die zulässige Zeit für die Ausführung der Operation zu begrenzen.
  2. Fängt die erwartete AggregateException Class ab und untersucht die inneren Ausnahmen auf die erwartete TaskCanceledException.

Siehe auch

Zugriff auf externe Web-Ressourcen
Registrieren eines Plug-Ins

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).