Freigeben über


Exemplarische Vorgehensweise: Zugreifen auf einen Webdienst mithilfe von Typanbietern (F#)

In dieser exemplarischen Vorgehensweise wird erläutert, wie der in F# 3.0 verfügbare WSDL-Typanbieter (Web Services Description Language) verwendet wird, um auf einen WSDL-Dienst zuzugreifen.In anderen .NET-Sprachen generieren Sie Code, um über einen Aufruf von svcutil.exe auf den Webdienst zuzugreifen, oder Sie verwenden die Option Webverweis hinzufügen, beispielsweise in einem C#-Projekt, bei der von Visual Studio ebenfalls svcutil.exe aufgerufen wird.In F# haben Sie zusätzlich die Option, den WSDL-Typanbieter zu verwenden, sodass in dem Moment, in dem Sie den Code zum Erstellen des WsdlService-Typs schreiben, die benötigten Typen generiert werden und zur Verfügung stehen.Für diesen Prozess muss der Dienst verfügbar sein, während Sie den Code schreiben.

In dieser exemplarischen Vorgehensweise werden die folgenden Aufgaben beschrieben.Sie müssen alle Aufgaben ausführen, um die exemplarische Vorgehensweise erfolgreich abzuschließen:

  • Creating the project

  • Configuring the type provider

  • Calling the web service, and processing the results

Erstellen des Projekts

In dem Schritt erstellen Sie ein Projekt und fügen die entsprechenden Verweise hinzu, um einen WSDL-Typanbieter zu verwenden.

So erstellen und richten Sie ein F#-Projekt ein

  1. Erstellen Sie ein neues F#-Konsolenanwendungsprojekt.

  2. Öffnen Sie im Projektmappen-Explorer das Kontextmenü für den Knoten Verweis des Projekts, und wählen Sie dann Verweis hinzufügen aus.

  3. Wählen Sie im Bereich Assemblys die Option Framework und dann in der Liste der verfügbaren Assemblys System.Runtime.Serialization und System.ServiceModel.

  4. Im Bereich Assemblys wählen Sie Erweiterungen.

  5. In der Liste der verfügbaren Assemblys wählen Sie FSharp.Data.TypeProviders und dann die Schaltfläche OK, um Verweise auf diese Assemblys hinzuzufügen.

Konfigurieren des Typanbieters

In diesem Schritt verwenden Sie den WSDL-Typanbieter, um Typen für den TerraServer-Webdienst zu generieren.

So konfigurieren Sie den Typanbieter und generieren Typen

  1. Fügen Sie die folgende Codezeile hinzu, um den Typanbieternamespace zu öffnen.

    open System
    open System.ServiceModel
    open Microsoft.FSharp.Linq
    open Microsoft.FSharp.Data.TypeProviders
    
  2. Fügen Sie die folgende Codezeile hinzu, um den Typanbieter mit einem Webdienst aufzurufen.In diesem Beispiel wird der TerraServer-Webdienst verwendet.

    type TerraService = WsdlService<"http://msrmaps.com/TerraService2.asmx?WSDL">
    

    Wenn der Dienst-URI falsch geschrieben oder der Dienst deaktiviert bzw. nicht erreichbar ist, wird unter dieser Codezeile eine rote Wellenlinie angezeigt.Wenn Sie auf den Code zeigen, beschreibt eine Fehlermeldung das Problem.Sie finden die gleichen Informationen nach dem Buildvorgang im Fenster Fehlerliste oder Ausgabefenster.

    Es gibt zwei Möglichkeiten, Konfigurationseinstellungen für eine WSDL-Verbindung anzugeben: Entweder durch Verwendung der Datei app.config des Projekts oder durch Verwendung der statischen Typparameter in der Typanbieterdeklaration.Sie können svcutil.exe verwenden, um entsprechende Konfigurationsdateielemente zu generieren.Weitere Informationen über die Verwendung von svcutil.exe zur Erstellung von Konfigurationsinformationen für einen Webdienst finden Sie unter ServiceModel Metadata Utility Tool (Svcutil.exe). Eine vollständige Beschreibung der statischen Typparameter für den WSDL-Typanbieter finden Sie unter WsdlService-Typanbieter (F#).

Den Webdienst aufrufen und die Ergebnisse verarbeiten

Jeder Webdienst verfügt über eine eigene Gruppe von Typen, die als Parameter für die Methodenaufrufe verwendet werden.In diesem Schritt bereiten Sie diese Parameter vor, rufen eine Webmethode auf und verarbeiten die von der Methode zurückgegebenen Informationen.

So rufen Sie den Webdienst auf und verarbeiten die Ergebnisse

  • Da es vorkommen kann, dass beim Webdienst ein Timeout auftritt oder der Dienst ausfällt, sollte der Aufruf des Webdiensts in einen Ausnahmebehandlungsblock eingeschlossen werden.Fügen Sie den folgenden Code ein, mit dem versucht wird, Daten von einem Webdienst abzurufen.

    try
        let terraClient = TerraService.GetTerraServiceSoap ()
        let myPlace = new TerraService.ServiceTypes.msrmaps.com.Place(City = "Redmond", State = "Washington", Country = "United States")
        let myLocation = terraClient.ConvertPlaceToLonLatPt(myPlace)
        printfn "Redmond Latitude: %f Longitude: %f" (myLocation.Lat) (myLocation.Lon)
    with
        | :? ServerTooBusyException as exn ->
            let innerMessage =
                match (exn.InnerException) with
                | null -> ""
                | innerExn -> innerExn.Message
            printfn "An exception occurred:\n %s\n %s" exn.Message innerMessage
        | exn -> printfn "An exception occurred: %s" exn.Message
    

    Beachten Sie, dass die für den Webdienst benötigten Datentypen, z. B. Place oder Location, als geschachtelte Typen unter dem WsdlService-Typ TerraService erstellt werden.

Siehe auch

Referenz

WsdlService-Typanbieter (F#)

Weitere Ressourcen

Typanbieter