Wskazówki: uzyskiwanie dostępu do usługi sieci Web za pomocą dostawców typów (F#)

W tym przewodniku pokazano, w jaki sposób używać dostawcy typu Web Services Description Language (WSDL), za pomocą którego można uzyskać dostęp do usługi WSDL w języku F# 3.0.W innych językach .NET, aby uzyskać dostęp do usługi sieci Web, generowany jest kod przez wywołanie svcutil.exe lub dodanie odwołania do sieci Web za pomocą opcji Dodaj odwołanie sieci Web, na przykład w projekcie języka C#, aby środowisko Visual Studio wywołało svcutil.exe za ciebie.W F# istnieje dodatkowa opcja — użycie dostawcy typów WSDL, dzięki której, zaraz po napisaniu kodu, tworzy on typ WsdlService, typy są generowane i stają się dostępne.Proces ten jest oparty o usługę, która staje się dostępna podczas pisania kodu.

W przewodniku przedstawiono następujące zagadnienia.Zadania te muszą zostać wykonane w podanej kolejności, aby ukończenie przewodnika powiodło się:

  • Tworzenie projektu

  • Konfigurowanie dostawcy typów

  • Wywoływanie usługi sieci Web i przetwarzanie wyników

Tworzenie projektu

W tym kroku utworzysz projekt i dodasz odpowiednie odwołania, aby używać dostawcy typu WSDL.

Aby utworzyć i skonfigurować projekt F#

  1. Otwórz nowy projekt aplikacji konsoli F#.

  2. W oknie Eksplorator rozwiązań otwórz menu skrótów węzła Odwołanie projektu, a następnie wybierz polecenie Dodaj odwołanie.

  3. W obszarze Zestawy wybierz Framework, a następnie, na liście dostępnych zestawów, wybierz System.Runtime.Serialization i System.ServiceModel.

  4. W obszarze Zestawy wybierz Rozszerzenia.

  5. Na liście dostępnych zestawów wybierz FSharp.Data.TypeProviders, a następnie kliknij przycisk Ok, aby dodać odwołanie do tych zestawów.

Konfigurowanie dostawcy typów

W tym kroku użyjesz dostawcy typu WSDL, aby wygenerować typy dla usługi sieci Web TerraServer.

Aby skonfigurować typ dostawcy i wygenerować typy

  1. Dodaj poniższą linię kodu, aby otworzyć przestrzeń nazw dostawcy typu.

    open System
    open System.ServiceModel
    open Microsoft.FSharp.Linq
    open Microsoft.FSharp.Data.TypeProviders
    
  2. Dodaj poniższą linię kodu, aby wywołać dostawcę typu za pomocą usługi sieci Web.W tym przykładzie użyj usługi sieci Web TerraServer.

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

    Czerwona fala pojawi się w tej linii kodu, jeśli adres URI usługi jest błędny, usługa jest wyłączona lub nie działa.Po wskazaniu kodu pojawi się komunikat o błędzie opisujący problem.Te same informacje możesz znaleźć po skompilowaniu projektu w oknie Lista błędów lub w Oknie wyników.

    Istnieją dwa sposoby, aby określić ustawienia konfiguracji dla połączenia WSDL: za pomocą pliku app.config projektu lub wykorzystując statyczne parametry typu w deklaracji dostawcy typu.Możesz użyć programu svcutil.exe, aby wygenerować odpowiednie elementy pliku konfiguracji.Aby uzyskać więcej informacji o używaniu programu svcutil.exe do generowania informacji o konfiguracji dla usługi sieci Web, zobacz Narzędzie do obsługi metadanych elementu ServiceModel (Svcutil.exe). Aby uzyskać pełny opis statycznych parametrów typu dostawcy typu WSDL, zobacz WsdlService — Typ dostawcy (F#).

Wywoływanie usługi sieci Web i przetwarzanie wyników

Każda usługa sieci Web ma swój własny zestaw typów, które są używane jako parametry wywołań jej metody.W tym kroku przygotujesz te parametry, wywołasz metodę sieci Web i przetworzysz informacje, które zwraca.

Aby wywołać usługę sieci Web i przetworzyć wyniki

  • Limit czasu usługi sieci Web może upłynąć lub może ona przestać działać, dlatego należy dołączyć wywołanie usługi sieci Web do bloku obsługi wyjątków.Zapisz poniższy kod i spróbuj pobrać dane z usługi sieci Web.

    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
    

    Zauważ, że utworzono typy danych, które są wymagane przez usługę sieci Web, takie jak Place i Location, jako typy zagnieżdżone w typie WsdlService TerraService.

Zobacz też

Informacje

WsdlService — Typ dostawcy (F#)

Inne zasoby

Dostawcy typów