地址标头

“地址标头”示例演示客户端如何将引用参数传递给使用 Windows Communication Foundation (WCF) 的服务。

提示

本主题的最后介绍了此示例的设置过程和生成说明。

WS-Addressing 规范将终结点引用的概念定义为对特定 Web 服务终结点寻址的方式。在 WCF 中,使用 EndpointAddress 类对终结点引用建模,EndpointAddressServiceEndpoint 类的“地址”字段的类型。

作为终结点引用模型的一部分,每个引用都可以携带一些可添加额外标识信息的引用参数。在 WCF 中,将这些引用参数建模为 AddressHeader 类的实例。

在本示例中,客户端将向客户端终结点的 EndpointAddress 添加一个引用参数。服务将查找此引用参数并在其“Hello”服务操作的逻辑中使用此参数的值。

客户端

若要使客户端发送引用参数,该客户端必须向 ServiceEndpointEndpointAddress 添加一个 AddressHeader。由于 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() 方法会将生成器(可变)转换回终结点地址(不可变),该地址将分配回给客户端终结点的“地址”字段。

现在,当客户端调用 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 示例的一次性安装过程

  2. 若要生成 C# 或 Visual Basic .NET 版本的解决方案,请按照生成 Windows Communication Foundation 示例中的说明进行操作。

  3. 若要用单机配置或跨计算机配置来运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.