次の方法で共有


アドレス ヘッダー

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

Aa395213.note(ja-jp,VS.100).gif注 :
このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。

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

エンドポイント参照モデルの一部では、各参照は、追加の識別情報を追加する複数の参照パラメータを伝達できます。WCF では、これらの参照パラメータは AddressHeader クラスのインスタンスとしてモデル化されます。

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

クライアント

クライアントから参照パラメータを送信するには、ServiceEndpointEndpointAddressAddressHeader を追加する必要があります。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" 変数に格納します。

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

  1. Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。

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

  3. 単一コンピューター構成か複数コンピューター構成かに応じて、「Running the Windows Communication Foundation Samples」の手順に従います。

Aa395213.Important(ja-jp,VS.100).gif 注 :
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。

<InstallDrive>:\WF_WCF_Samples

このディレクトリが存在しない場合は、「.NET Framework 4 向けの Windows Communication Foundation (WCF) および Windows Workflow Foundation (WF) のサンプル」にアクセスして、Windows Communication Foundation (WCF) および WF のサンプルをすべてダウンロードしてください。このサンプルは、次のディレクトリに格納されます。

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Client\AddressHeaders