アドレス指定のサンプルでは、エンドポイント アドレスのさまざまな側面と機能を示します。 このサンプルは、Getting Startedに基づいています。 このサンプルでは、サービスはセルフホステッドです。 サービスとクライアントはどちらもコンソール アプリケーションです。 このサービスでは、相対エンドポイント アドレスと絶対エンドポイント アドレスの組み合わせを使用して、複数のエンドポイントを定義します。
注
このサンプルのセットアップ手順とビルド手順は、このトピックの最後にあります。
サービス構成ファイルは、ベース アドレスと 4 つのエンドポイントを指定します。 ベース アドレスは、次のサンプル構成で示すように、service/host/baseAddresses の下で add 要素を使用して指定します。
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/ServiceModelSamples/service" />
</baseAddresses>
</host>
</service>
次のサンプル構成に示す最初のエンドポイント定義では、相対アドレスを指定します。つまり、エンドポイント アドレスは、URI 構成の規則に従ってベース アドレスと相対アドレスの組み合わせになります。
<!-- Empty relative address specified:
use the base address provided by the host. -->
<!-- The endpoint address is
http://localhost:8000/ServiceModelSamples/service. -->
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
この場合、相対アドレスは空 ("") であるため、エンドポイント アドレスはベース アドレスと同じです。 実際のエンドポイント アドレスは http://localhost:8000/servicemodelsamples/service。
2 番目のエンドポイント定義では、次のサンプル構成に示すように、相対アドレスも指定します。
<!-- The relative address specified: use the base address -->
<!-- provided by the host + path. The endpoint address is -->
<!-- http://localhost:8000/servicemodelsamples/service/test. -->
<endpoint address="/test"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
相対アドレス "test" がベース アドレスに追加されます。 実際のエンドポイント アドレスは http://localhost:8000/servicemodelsamples/service/test。
3 番目のエンドポイント定義では、次のサンプル構成に示すように、絶対アドレスを指定します。
<endpoint address="http://localhost:8001/hello/servicemodelsamples"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
ベース アドレスは、アドレスで役割を果たしません。 実際のエンドポイント アドレスは http://localhost:8001/hello/servicemodelsamples。
4 番目のエンドポイント アドレスは、絶対アドレスと別のトランスポート (TCP) を指定します。 ベース アドレスは、アドレスで役割を果たしません。 実際のエンドポイント アドレスは net.tcp://localhost:9000/servicemodelsamples/service。
<!-- The absolute address specified, different transport: -->
<!-- use the specified address, and ignore the base address. -->
<!-- The endpoint address is -->
<!-- net.tcp://localhost:9000/servicemodelsamples/service. -->
<endpoint address=
"net.tcp://localhost:9000/servicemodelsamples/service"
binding="netTcpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
クライアントは、4 つのサービス エンドポイントのうちの 1 つだけにアクセスしますが、4 つすべてが構成ファイルで定義されています。 クライアントは、 CalculatorProxy オブジェクトを作成するときにエンドポイントを選択します。 構成名を CalculatorEndpoint1 から CalculatorEndpoint4 に変更することで、各エンドポイントを実行できます。
サンプルを実行すると、サービスは各エンドポイントのアドレス、バインド名、コントラクト名を列挙します。 メタデータ交換 (MEX) エンドポイントは ServiceHost の観点から見た単なる別のエンドポイントであるため、一覧に表示されます。
Service endpoints:
Endpoint - address: http://localhost:8000/ServiceModelSamples/service
binding: WSHttpBinding
contract: ICalculator
Endpoint - address: http://localhost:8000/ServiceModelSamples/service/test
binding: WSHttpBinding
contract: ICalculator
Endpoint - address: http://localhost:8001/hello/servicemodelsamples
binding: WSHttpBinding
contract: ICalculator
Endpoint - address: net.tcp://localhost:9000/servicemodelsamples/service
binding: NetTcpBinding
contract: ICalculator
Endpoint - address: http://localhost:8000/ServiceModelSamples/service/mex
binding: MetadataExchangeHttpBinding
contract: IMetadataExchange
The service is ready.
Press <ENTER> to terminate service.
クライアントを実行すると、操作の要求と応答がサービスとクライアントの両方のコンソール ウィンドウに表示されます。 どちらかのコンソールで 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.
サンプルを設定、ビルド、実行するには
Windows Communication Foundation サンプル のOne-Time セットアップ手順を実行していることを確認します。
ソリューションの C# または Visual Basic .NET エディションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
単一または複数のコンピューター間の構成でサンプルを実行するには、「Windows Communication Foundation Samplesの実行」の手順に従います。
注
Svcutil.exe を使用してこのサンプルの構成を再生成する場合は、クライアント構成のエンドポイント名をクライアント コードと一致するように変更してください。