チュートリアル : 型プロバイダーを使用した Web サービスへのアクセス (F#)

このチュートリアルでは、F# 3.0 で利用可能な Web サービス記述言語 (WSDL) 型プロバイダーを使用して WSDL サービスにアクセスする方法を説明します。他の .NET 言語では、svcutil.exe を呼び出すか、または [Web 参照の追加] オプションを使用して Web サービスにアクセスするためのコードを生成します。たとえば、C# プロジェクトの場合は、Visual Studio で svcutil.exe を呼び出します。F# では、WSDL 型プロバイダーを使用する追加オプションがあるので、WsdlService 型を作成するコードを記述するとすぐに型が生成されて使用できるようになります。このプロセスは、コードを記述するときに利用できるサービスに依存します。

このチュートリアルでは、次の作業について説明します。このチュートリアルを正しく行うには、以下の作業を順に行ってください。

  • Creating the project

  • Configuring the type provider

  • Calling the web service, and processing the results

プロジェクトの作成

この手順では、プロジェクトを作成し、WSDL 型プロバイダーを使用するために適切な参照を追加します。

F# プロジェクトを作成してセットアップするには

  1. 新しい F# コンソール アプリケーション プロジェクトを開きます。

  2. ソリューション エクスプローラーで、プロジェクトの [参照] ノードのショートカット メニューを開き、[参照の追加] をクリックします。

  3. [アセンブリ] 領域で、[フレームワーク] を選択し、使用できるアセンブリの一覧から、System.Runtime.SerializationSystem.ServiceModel を選択します。

  4. [アセンブリ] 領域で、[拡張機能] を選択します。

  5. 使用可能なアセンブリの一覧で、FSharp.Data.TypeProviders を選択し、[OK] をクリックして、これらのアセンブリへの参照を追加します。

型プロバイダーの構成

この手順では、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 ファイルを使用する方法と、型プロバイダーの宣言で静的な型パラメーターを使用する方法の 2 とおりあります。svcutil.exe を使用すると、適切な構成ファイル要素を生成できます。svcutil.exe を使用して Web サービスの構成情報を生成する方法の詳細については、「ServiceModel Metadata Utility Tool (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
    

    Place や Location など、Web サービスに必要なデータ型は、WsdlService 型の TerraService の下に入れ子にされた型として作成します。

参照

関連項目

WsdlService 型プロバイダー (F#)

その他の技術情報

型プロバイダー