Address Headers 示例演示客户端如何使用 Windows Communication Foundation(WCF)将引用参数传递给服务。
注释
本示例的设置过程和生成说明位于本主题末尾。
WS-Addressing 规范将终结点引用的概念定义为解决特定 Web 服务终结点的方法。 在 WCF 中,终结点引用使用 EndpointAddress 类建模 - EndpointAddress 是类的 ServiceEndpoint Address 字段的类型。
终结点引用模型的一部分是,每个引用可以携带一些引用参数来添加额外的标识信息。 在 WCF 中,这些引用参数建模为类的 AddressHeader 实例。
在此示例中,客户端将一个引用参数添加到客户端终结点的EndpointAddress。 服务查找此引用参数,并在其“Hello”服务作的逻辑中使用其值。
客户
为了使客户端发送引用参数,它必须向AddressHeader的EndpointAddress添加一个ServiceEndpoint。 
              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() (可变)生成器转换回一个(不可变)终结点地址,该地址将分配给客户端终结点的“地址”字段。
现在,当客户端调用 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 示例 执行One-Time 安装过程。 
- 若要生成解决方案的 C# 或 Visual Basic .NET 版本,请按照 生成 Windows Communication Foundation 示例中的说明进行操作。 
- 若要在单台计算机或跨计算机配置中运行示例,请按照 运行 Windows Communication Foundation 示例中的说明进行操作。