アドレス ヘッダー
アドレス ヘッダーのサンプルでは、クライアントが Windows Communication Foundation (WCF) を使用して、サービスに参照パラメータを渡す方法を示します。
メモ : |
---|
このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。 |
WS-Addressing 仕様では、特定の Web サービスのエンドポイントのアドレスを指定するための方法として、エンドポイント参照の概念が定義されています。WCF では、エンドポイント参照は EndpointAddress
クラスを通じてモデル化されます。EndpointAddress
は、ServiceEndpoint
クラスの Address フィールドの型です。
エンドポイント参照モデルの一部では、各参照は、追加の識別情報を追加する複数の参照パラメータを伝達できます。WCF では、これらの参照パラメータは AddressHeader
クラスのインスタンスとしてモデル化されます。
このサンプルでは、クライアントはクライアント エンドポイントの EndpointAddress
に参照パラメータを追加します。サービスはこの参照パラメータを検索し、その値を "Hello" サービス操作のロジックに使用します。
クライアント
クライアントから参照パラメータを送信するには、ServiceEndpoint
の EndpointAddress
に AddressHeader
を追加する必要があります。EndpointAddress
クラスは不変なので、EndpointAddress の変更は EndpointAddressBuilder
クラスを通じて行う必要があります。参照パラメータをメッセージの一部として送信するためにクライアントを初期化するコードを、次に示します。
HelloClient client = new HelloClient();
EndpointAddressBuilder builder =
new EndpointAddressBuilder(client.Endpoint.Address);
AddressHeader header =
AddressHeader.CreateAddressHeader(IDName, IDNamespace, "John");
builder.Headers.Add(header);
client.Endpoint.Address = builder.ToEndpointAddress();
このコードは、元の EndpointAddress
を初期値として使用して EndpointAddressBuilder
を作成します。次に、新しく作成されたアドレス ヘッダーを追加します。つまり CreateAddressHeadercreates
を呼び出して、特定の名前、名前空間、および値を持つヘッダーを作成します。ここでの値は "John" です。ヘッダーがビルダに追加されると、ToEndpointAddress()
メソッドが (不変の) ビルダを (不変の) エンドポイント アドレスに変換し直し、これをクライアント エンドポイントの Address フィールドに再度割り当てます。
ここで、クライアントは Console.WriteLine(client.Hello());
サービスを呼び出します。このサービスは、このアドレス パラメータの値を取得できます。結果として得られるクライアントの出力は次のとおりです。
Hello, John
サーバー
サービス操作 Hello()
の実装では、現在の OperationContext
を使用して、入力メッセージのヘッダーの値を検査します。
string id = null;
// look at headers on incoming message
for (int i = 0;
i < OperationContext.Current.IncomingMessageHeaders.Count; ++i)
{
MessageHeaderInfo h =
OperationContext.Current.IncomingMessageHeaders[i];
// for any reference parameters with the correct name & namespace
if (h.IsReferenceParameter &&
h.Name == IDName &&
h.Namespace == IDNamespace)
{
// read the value of that header
XmlReader xr =
OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(i);
id = xr.ReadElementContentAsString();
}
}
return "Hello, " + id;
このコードでは、入力メッセージのすべてのヘッダーを反復処理して、必要な名前と名前空間の組み合わせを持つ参照パラメータを検索します。このようなパラメータが見つかると、そのパラメータ値を読み取って "id" 変数に格納します。
サンプルを設定、ビルド、および実行するには
「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。
ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
サンプルを単一コンピュータ構成または複数コンピュータ構成で実行するには、「Windows Communication Foundation サンプルの実行」の手順に従います。
Copyright © 2007 by Microsoft Corporation.All rights reserved.