共用方式為


逐步解說:使用類型提供者存取 Web 服務 (F#)

屬性逐步解說示範如何使用 Web 服務描述語言 (WSDL) 類型提供者,此提供者可在 F# 3.0 中用於存取 WSDL 服務。 在其他 .NET 語言中,您可以產生程式碼來透過呼叫 svcutil.exe 存取 Web 服務,只在 C# 專案中加入 Web 參考,讓 Visual Studio 呼叫svcutil.exe。 在 F# 中,您可以另外選擇使用 WSDL 類型提供者,因此,當您撰寫建立 WsdlService 類型的程式碼時,就會立即產生類型並可使用。 此流程的完成有賴於撰寫程式碼時,服務可供使用。

本逐步解說將說明下列工作。 您必須按照逐步解說的這個順序完成才會成功:

  • 建立專案

  • 設定類型提供者

  • 呼叫 Web 服務和處理結果

建立專案

在此步驟中,您會建立專案並加入適當的參考以使用 WSDL 類型提供者。

若要建立和設定 F# 專案

  1. 開啟新的 F# 主控台應用程式專案。

  2. 在 [方案總管] 中,開啟專案之 [參考] 節點的捷徑功能表,然後選擇 [加入參考]。

  3. Assemblies區域中,選擇Framework,然後,在可用組件的清單中選擇 System.Runtime.SerializationSystem.ServiceModel

  4. Assemblies區塊中選擇 Extensions

  5. 從可用組件的清單中,選取 FSharp.Data.TypeProviders,然後選擇 [確定] 按鈕,在組件中加入參考資料。

設定類型提供者

在這個步驟中,您使用 WSDL 類型提供者產生 TerraServer Web 服務的類型。

若要設定類型提供者和產生類型

  1. 加入下列程式碼行,以開啟類型提供者命名空間。

    open System
    open System.ServiceModel
    open Microsoft.FSharp.Linq
    open Microsoft.FSharp.Data.TypeProviders
    
  2. 加入下列程式碼行,以 Web 服務叫用類型提供者。 在此範例中,請使用 TerraServer Web 服務。

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

    如果服務 URI 拼錯,或者服務本身已關閉或不在執行中,則此程式碼行底下會出現紅色波浪線。 如果您指向程式碼,錯誤訊息會描述此問題。 您可以在建置後,於 [錯誤清單] 視窗或 [輸出視窗] 中找到相同的資訊。

    有兩種方式可指定 WSDL 連接的組態設定,一種是使用專案的 app.config 檔,另一種是在類型提供者宣告中使用靜態類型參數。 您可以使用 svcutil.exe 產生適當的組態檔項目。 如需有關使用 svcutil.exe 產生 Web 服務的組態資訊的詳細資訊,請參閱 ServiceModel 中繼資料公用程式工具 (Svcutil.exe)。如需 WSDL 類型提供者靜態類型參數的完整描述,請參閱 WsdlService 類型提供者 (F#)

呼叫 Web 服務和處理結果

每個 Web 服務本身都有一組做為其方法呼叫參數的類型。 在這個步驟中,您需準備這些參數,呼叫 Web 方法,並處理傳回的資訊。

若要呼叫 Web 服務和處理結果

  • Web 服務可能會逾時或停止運作,因此,在例外狀況處理區塊中應該包含 Web 服務呼叫。 撰寫下列程式碼以嘗試從 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
    

    請注意,您要在 WsdlService 類型 TerraService 下方建立 Web 服務需要的巢狀類型資料類型,例如 Place 和 Location。

請參閱

參考

WsdlService 類型提供者 (F#)

其他資源

類型提供者