次の方法で共有


アドレスヘッダー

アドレス ヘッダーのサンプルでは、クライアントが Windows Communication Foundation (WCF) を使用してサービスに参照パラメーターを渡す方法を示します。

このサンプルのセットアップ手順とビルド手順は、このトピックの最後にあります。

WS-Addressing 仕様では、エンドポイント参照の概念が、特定の Web サービス エンドポイントに対処する方法として定義されています。 WCF では、エンドポイント参照は EndpointAddress クラスを使用してモデル化されます。 EndpointAddress は、 ServiceEndpoint クラスの Address フィールドの型です。

エンドポイント参照モデルの一部として、各参照には、追加の識別情報を追加するいくつかの参照パラメーターを含めることができます。 WCF では、これらの参照パラメーターは、 AddressHeader クラスのインスタンスとしてモデル化されます。

このサンプルでは、クライアントはクライアント エンドポイントの EndpointAddress に参照パラメーターを追加します。 サービスは、この参照パラメーターを検索し、その値を "Hello" サービス操作のロジックで使用します。

顧客

クライアントが参照パラメーターを送信するには、AddressHeaderEndpointAddressServiceEndpointを追加する必要があります。 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();

このコードでは、元のEndpointAddressBuilderを初期値として使用してEndpointAddressを作成します。 次に、新しく作成されたアドレス ヘッダーを追加します。 CreateAddressHeader を呼び出すと、特定の名前、名前空間、および値を持つヘッダーが作成されます。 ここでの値は "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" 変数に格納されます。

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

  1. Windows Communication Foundation サンプル One-Time セットアップ手順を実行していることを確認します。

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

  3. 単一または複数のコンピューター間の構成でサンプルを実行するには、「Windows Communication Foundation Samplesの実行」の手順に従います。