C# Language
Windows Communication Foundation
サーチ…
前書き
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();