如何:使用 WCF 客户端访问 WSE 3.0 服务

当 WCF 客户端配置为使用 2004 年 8 月版的 WS-Addressing 规范时,Windows Communication Foundation (WCF) 客户端在网络级别与 Web Services Enhancements (WSE) 3.0 for Microsoft .NET 服务兼容。但是,由于 WSE 3.0 服务不支持元数据交换 (MEX) 协议,因此,在使用Service Metadata Utility Tool (SvcUtil.exe) 创建 WCF 客户端类时,安全设置不会应用于生成的 WCF 客户端。因此,在生成 WCF 客户端后,必须指定 WSE 3.0 服务要求的安全设置。

您可以在考虑 WSE 3.0 服务的要求以及 WSE 3.0 服务和 WCF 客户端之间的互操作要求的情况下,使用自定义绑定来应用这些安全设置。这些互操作性要求包括前面提到的使用 2004 年 8 月版的 WS-Addressing 规范和 SignBeforeEncrypt 的 WSE 3.0 默认消息保护。WCF 的默认消息保护为 SignBeforeEncryptAndEncryptSignature。本主题详细说明如何创建与 WSE 3.0 服务互操作的 WCF 绑定。WCF 还提供了体现此绑定的示例。有关 此示例的更多信息,请参见Interoperating with WSE

使用 WCF 客户端访问 WSE 3.0 Web 服务

  1. 运行Service Metadata Utility Tool (SvcUtil.exe) 以创建用于 WSE 3.0 Web 服务的 WCF 客户端。

    对于 WSE 3.0 Web 服务,会创建一个 WCF 客户端。因为 WSE 3.0 不支持 MEX 协议,因此不能使用该工具检索 Web 服务的安全要求。应用程序开发人员必须为客户端添加安全设置。

    有关 创建 WCF 客户端的更多信息,请参见如何:创建 Windows Communication Foundation 客户端

  2. 创建一个类,表示可与 WSE 3.0 Web 服务进行通信的绑定。

    下面的类是Interoperating with WSE示例的一部分:

    1. 创建一个从 Binding 类派生的类。
      下面的代码示例创建一个从 Binding 类派生的名为 WseHttpBinding 的类。
    2. 向该类中添加属性,用以指定 WSE 服务使用的 WSE 完整断言、是否需要派生密钥、是否使用安全会话、是否需要签名确认以及消息保护设置。在 WSE 3.0 中,完整断言指定客户端或 Web 服务的安全要求,它类似于 WCF 中绑定的身份验证模式。
      下面的代码示例定义了 SecurityAssertionRequireDerivedKeysEstablishSecurityContextMessageProtectionOrder 属性,这些属性分别指定 WSE 完整断言、是否需要派生密钥、是否使用安全会话、是否需要签名确认以及消息保护设置。
    3. 重写 CreateBindingElements 方法以设置绑定属性。
      下面的代码示例通过获取 SecurityAssertionMessageProtectionOrder 属性的值来指定传输协议、消息编码和消息保护设置。
  3. 在客户端应用程序代码中,添加设置绑定属性的代码。

    下面的代码示例指定 WCF 客户端必须使用 WSE 3.0 AnonymousForCertificate 完整安全断言定义的消息保护和身份验证。此外,还需要安全会话和派生密钥。

示例

下面的代码示例定义了一个自定义绑定,该绑定公开对应于 WSE 3.0 完整安全断言的各个属性的属性。之后,使用该自定义绑定(名为 WseHttpBinding)来指定与 WSSecurityAnonymous WSE 3.0 QuickStart 示例通信的 WCF 客户端的绑定属性。

另请参见

参考

Binding

其他资源

Interoperating with WSE