サーチ…


前書き

Windows Communication Foundation(WCF)は、サービス指向アプリケーションを構築するためのフレームワークです。 WCFを使用すると、あるエンドポイントから別のエンドポイントに非同期メッセージとしてデータを送信できます。サービスエンドポイントは、IISによってホストされる継続的に利用可能なサービスの一部である場合もあれば、アプリケーションでホストされているサービスである場合もあります。メッセージは、XMLとして送信される単一の文字や単語のように単純なものでも、バイナリデータのストリームのような複雑なものでもかまいません。

始めのサンプル

このサービスは、メタデータとして公開されるサービス契約で実行される操作を記述します。

// Define a service contract.  
[ServiceContract(Namespace="http://StackOverflow.ServiceModel.Samples")]  
public interface ICalculator  
{  
    [OperationContract]  
    double Add(double n1, double n2);
}

サービス実装は、次のコード例に示すように、適切な結果を計算して返します。

// Service class that implements the service contract.  
public class CalculatorService : ICalculator  
{  
    public double Add(double n1, double n2)  
    {  
        return n1 + n2;  
    }
}

このサービスは、次の構成例に示すように、構成ファイル(Web.config)を使用して定義された、サービスと通信するためのエンドポイントを公開します。

<services>  
    <service   
        name="StackOverflow.ServiceModel.Samples.CalculatorService"  
        behaviorConfiguration="CalculatorServiceBehavior">  
        <!-- ICalculator is exposed at the base address provided by  
         host: http://localhost/servicemodelsamples/service.svc.  -->  
       <endpoint address=""  
              binding="wsHttpBinding"  
              contract="StackOverflow.ServiceModel.Samples.ICalculator" />  
       ...  
    </service>  
</services>

フレームワークはデフォルトでメタデータを公開しません。そのため、サービスはServiceMetadataBehaviorをオンにし、 http://localhost/servicemodelsamples/service.svc/mexでメタデータエクスチェンジ(MEX)エンドポイントを公開します。次の構成でこれが実証されています。

<system.serviceModel>  
  <services>  
    <service   
        name="StackOverflow.ServiceModel.Samples.CalculatorService"  
        behaviorConfiguration="CalculatorServiceBehavior">  
      ...  
      <!-- the mex endpoint is explosed at  
       http://localhost/servicemodelsamples/service.svc/mex -->  
      <endpoint address="mex"  
                binding="mexHttpBinding"  
                contract="IMetadataExchange" />  
    </service>  
  </services>  

  <!--For debugging purposes set the includeExceptionDetailInFaults  
   attribute to true-->  
  <behaviors>  
    <serviceBehaviors>  
      <behavior name="CalculatorServiceBehavior">  
        <serviceMetadata httpGetEnabled="True"/>  
        <serviceDebug includeExceptionDetailInFaults="False" />  
      </behavior>  
    </serviceBehaviors>  
  </behaviors>  
</system.serviceModel>  

クライアントは、ServiceModelメタデータユーティリティツール(Svcutil.exe)によって生成されたクライアントクラスを使用して、特定のコントラクトタイプを使用して通信します。

型付きプロキシを生成するには、クライアントディレクトリのSDKコマンドプロンプトから次のコマンドを実行します。

svcutil.exe /n:"http://StackOverflow.ServiceModel.Samples,StackOverflow.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs  

サービスと同様に、クライアントは構成ファイル(App.config)を使用して、通信するエンドポイントを指定します。クライアントのエンドポイント構成は、次の例に示すように、サービスエンドポイントの絶対アドレス、バインド、および契約で構成されています。

<client>  
     <endpoint  
         address="http://localhost/servicemodelsamples/service.svc"   
         binding="wsHttpBinding"   
         contract="StackOverflow.ServiceModel.Samples.ICalculator" />  
</client>  

クライアント実装はクライアントをインスタンス化し、次のコード例に示すように型付きインターフェイスを使用してサービスとの通信を開始します。

// Create a client.  
CalculatorClient client = new CalculatorClient();  

// 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); 

//Closing the client releases all communication resources.  
client.Close();  


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow