WCF サービス付き ASMX クライアント

Download sample

このサンプルでは、Windows Communication Foundation (WCF) を使用してサービスを作成し、ASMX クライアントなどの WCF 以外のクライアントからこのサービスにアクセスする方法を示します。

Noteメモ :

このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。

このサンプルは、クライアント コンソール プログラム (.exe) と、インターネット インフォメーション サービス (IIS) によってホストされるサービス ライブラリ (.dll) で構成されています。サービスは、要求/応答通信パターンを定義するコントラクトを実装します。このコントラクトは ICalculator インターフェイスによって定義されており、算術演算 (加算、減算、乗算、および 除算) を公開しています。ASMX クライアントは算術演算を同期要求し、サービスは結果を添えて応答します。

サービスは、次のように定義された ICalculator コントラクトを実装します。

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples"), XmlSerializerFormat]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
}

DataContractSerializerXmlSerializer は、CLR 型を XML 表現にマップします。DataContractSerializer は一部の XML 表現を、XmlSerializer とは異なる方法で解釈します。XmlSerializer を使用する場合、Wsdl.exe などの WCF 以外のプロキシ ジェネレータでは、より使いやすいインターフェイスが生成されます。XmlSerializerFormatAttributeICalculator インターフェイスに適用され、CLR 型を XML へマップする際に確実に XmlSerializer を使用します。このサービス実装は、計算を行い、結果を返します。

サービスは、そのサービスとの通信に使用する単一エンドポイントを公開します。エンドポイントは構成ファイル (Web.config) で定義します。エンドポイントは、アドレス、バインディング、およびコントラクトがそれぞれ 1 つずつで構成されます。サービスは、インターネット インフォメーション サービス (IIS) ホストから提供されるベース アドレスで、エンドポイントを公開します。binding 属性は basicHttpBinding に設定されます。これにより、WS-I Basic Profile 1.1 に準拠した SOAP 1.1 を使用する HTTP 通信を実現します。次のサンプル構成を参照してください。

<services>
   <service 
       type="Microsoft.ServiceModel.Samples.CalculatorService"
       behaviorConfiguration="CalculatorServiceBehavior">
       <!-- This endpoint is exposed at the base address provided by the host: https://localhost/servicemodelsamples/service.svc.  -->      <endpoint address=""
               binding="basicHttpBinding" 
               contract="Microsoft.ServiceModel.Samples.ICalculator" />
   </service>
</services> 

ASMX クライアントは WCF サービスとの通信に、Web サービス記述言語 (WSDL) ユーティリティ (Wsdl.exe) によって生成された、型指定のあるプロキシを使用します。型指定のあるプロキシは、ファイル generatedClient.cs に含まれています。WSDL ユーティリティは、指定されたサービスが使用するメタデータを取得し、クライアントが通信に使用する型指定のあるプロキシを生成します。既定では、フレームワークはメタデータを公開しません。プロキシの生成に必要なメタデータを公開するには、<serviceMetadata> Elementを追加し、その httpGetEnabled 属性を True に設定する必要があります。次の構成を参照してください。

<behaviors>
  <serviceBehaviors>
    <behavior name="CalculatorServiceBehavior">
      <!-- Setting httpGetEnabled to True on the serviceMetadata           behavior exposes the service's wsdl at <base address>?wsdl :
           https://localhost/servicemodelsamples/service.svc?wsdl -->
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>

次のコマンドをクライアント ディレクトリでコマンド プロンプトから実行して、型指定のあるプロキシを生成します。

wsdl /n:Microsoft.ServiceModel.Samples /o:generatedClient.cs /urlkey:CalculatorServiceAddress https://localhost/servicemodelsamples/service.svc?wsdl 

生成された型指定のあるプロキシを使用することにより、クライアントは適切なアドレスを構成して、指定のサービス エンドポイントにアクセスできます。クライアントは構成ファイル (App.config) を使用して、通信するエンドポイントを指定します。

<appSettings>
      <add key="CalculatorServiceAddress" 
      value="https://localhost/ServiceModelSamples/service.svc"/>
</appSettings>

クライアント実装は型指定のあるプロキシのインスタンスを構築し、サービスとの通信を開始します。

// Create a client to the CalculatorService.
using (CalculatorService client = new CalculatorService())
{
    // Call the Add service operation.
    double value1 = 100.00D;
    double value2 = 15.99D;
    double result = client.Add(value1, value2);
    Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

    // Call the Subtract service operation.
    value1 = 145.00D;
    value2 = 76.54D;
    result = client.Subtract(value1, value2);
    Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

    // Call the Multiply service operation.
    value1 = 9.00D;
    value2 = 81.25D;
    result = client.Multiply(value1, value2);
    Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

    // Call the Divide service operation.
    value1 = 22.00D;
    value2 = 7.00D;
    result = client.Divide(value1, value2);
    Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);

}

Console.WriteLine();
Console.WriteLine("Press <ENTER> to terminate client.");
Console.ReadLine();

このサンプルを実行する場合は、操作要求および応答はクライアントのコンソール ウィンドウに表示されます。クライアントをシャットダウンするには、クライアント ウィンドウで Enter キーを押します。

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

サンプルを設定、ビルド、および実行するには

  1. Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。

  2. ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。

  3. 単一コンピュータ構成か複数コンピュータ構成かに応じて、「Windows Communication Foundation サンプルの実行」の手順に従います。

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.