与 WSE 互操作

本示例演示如何实现 Web Service Enhancements (WSE) 3.0 服务与 Windows Communication Foundation (WCF) 客户端或服务之间的互操作性。

示例实现一个名为 WseHttpBinding 的自定义绑定。通过此绑定可以使用 WSE 3.0 策略文件来配置 WCF 客户端或服务,并实现与 WSE 3.0 的互操作性。WseHttpBinding 通过提供从策略文件中的 WSE 3.0 属性到 WCF 绑定中的属性的映射实现此目的。您可以将 WseHttpBinding 视为类似于标准绑定,因为此绑定对堆栈中其他绑定的属性提供约束视图,最明显的是 SecurityBindingElement

示例分为两部分。第一部分演示使用 WseHttpBinding 从 WCF 客户端到 WCF 自承载的服务进行调用。第二部分需要安装 WSE 3.0 SDK。

在 WCF 客户端和服务之间使用 WseHttpBinding

在客户端上,CallWcfService 方法创建 WseHttpBinding 的实例并设置客户端的安全要求的属性:

static void Main(string[] args)
{
    CallWcfService();
    ...
}

这些要求必须匹配在服务的 Main 函数内设置的值,如下面的代码所示:

//Create a ServiceHost for the CalculatorService type.
using (ServiceHost serviceHost =        new ServiceHost(typeof(CalculatorService)))
{
    //Create and configure the WseHttpBinding.
    WseHttpBinding binding = new WseHttpBinding();
    binding.SecurityAssertion =        WseSecurityAssertion.AnonymousForCertificate;
    binding.EstablishSecurityContext = true;
    binding.RequireDerivedKeys = true;
    binding.MessageProtectionOrder =        MessageProtectionOrder.SignBeforeEncrypt;

    serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, "");
    ServiceCredentials creds = new ServiceCredentials();
    creds.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine,
                                            StoreName.My,                                            X509FindType.FindBySubjectName,                                             "localhost");
    serviceHost.Description.Behaviors.Add(creds);
    serviceHost.Open();
    ...
}

设置、生成和运行示例

  1. 确保已经执行了 Windows Communication Foundation 示例的一次性安装过程

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

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

  4. 本示例中的服务是自承载服务。因此,在运行客户端之前,请确保已运行 /service/bin 目录中的 Service.exe 文件。

使用 WseHttpBinding 与 WSE 3.0 服务通信

本项目中的客户端也可用于与 WSE 3.0 SDK 中的快速入门示例通信。

一旦安装了 WSE 3.0 SDK,便可以在生成 WSE 3.0 服务后使用 Svcutil.exe 工具生成可用于与该服务通信的客户端。下面的示例演示如何对本地计算机上运行的 WSE 3.0 服务实现此目的。

svcutil.exe /out:wseproxy.cs /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" https://localhost/WSSecurityAnonymousPolicy/WSSecurityAnonymousService.asmx

Wseproxy.cs 文件包含在此项目中。生成的代理类名称为 WSSecurityAnonymousServiceSoapProxy 并随 WseHttpBinding(已在代码中使用属性进行配置或使用从 Wse3PolicyCache.config 配置文件中加载的 WSE 3.0 策略文件进行配置)一起提供。Wse3PolicyCache.config 配置文件也包含在此项目中。

成功生成 WSE 3.0 WSSecurityAnonymous 示例后,在运行客户端时,会从 WSE 3.0 服务中安全地返回股票行情。

本主题的最后详细介绍了 WSE 3.0 的安装说明。

在客户端上,注释掉对 CallWcfService 的调用并取消对 CallWseService 的代码的注释。传入 truefalse 可确定是否通过调用 LoadPolicy(String filename, String policyName) 方法来使用策略文件对 WseHttpBinding 进行配置,该方法使用 XmlReader 来分析 WSE 3.0 策略文件。

提示

如果已在客户端上安装了 WSE 3.0 而不使用 XmlReader 来加载策略文件,则可以修改代码以使用 WSE 3.0 Microsoft.Web.Services3.Design.Policies 类来加载策略。这样做的好处是 Microsoft.Web.Services3.Design.Policies 类可以分析所有有效格式的 WSE 3.0 策略文件,然后将这些文件提供给 WseHttpBinding。通过使用 XmlReader 类型的代码,只能分析一组有限的策略文件。

使用 WSE 3.0 安装、生成和运行示例

  1. Web Services Enhancements (WSE) 3.0 for Microsoft .NET 安装 WSE 3.0 产品。

  2. 阅读有关如何配置和安装 WSE 示例的 WSE 3.0 快速入门示例指南。这是安装正确的 X.509 证书和创建虚拟目录以在 Internet 信息服务 (IIS) 中承载 Web 服务所必需的。具体来说,在默认安装目录 C:\Program Files\Microsoft WSE\v3.0\Samples 中运行 Setup.bat 文件。

  3. 生成 WSE 3.0 快速入门策略示例 WSSecurityAnonymous,默认情况下,此示例安装在下面的目录中(注意:WSSecurityAnonymous 有一个仅代码版本,如果需要,可以使用此版本。如果想要使用仅代码版本,则必须在客户端上将服务的 URL 更改为 https://localhost/WSSecurityAnonymousCode/WSSecurityAnonymousService.asmx)。

  4. 此 WSE 3.0 项目安装在 C:\Program Files\Microsoft WSE\v3.0\Samples\CS\QuickStart\Security\WSSecurityAnonymous\Policy。

  5. 此互操作示例中的 WCF 客户端已设计成可与此 WSE 3.0 快速入门示例互操作。

  6. 在 Client.cs 文件的 Main 函数中,取消对 CallWseService 方法调用的注释。可能还需要注释掉对 CallWcfService 的调用以防止它调用 WCF 服务。

  7. 若要生成 C# 解决方案,请按照生成 Windows Communication Foundation 示例中的说明进行操作。

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

使用 WSE 3.0 跨计算机安装、生成和运行示例

  1. 首先安装 WSE 3.0 服务。在远程计算机上从 Web Services Enhancements (WSE) 3.0 for Microsoft .NET 安装 WSE 3.0 产品。

  2. 阅读有关如何配置和安装 WSE 示例的 WSE 3.0 快速入门示例指南。这是安装正确的 X.509 证书和创建虚拟目录以在 Internet 信息服务 (IIS) 中承载 Web 服务所必需的。具体来说,在默认安装目录 C:\Program Files\Microsoft WSE\v3.0\Samples 中运行 Setup.bat 文件。

  3. 生成 WSE 3.0 快速入门策略示例 WSSecurityAnonymous,默认情况下,此示例安装在下面的目录中。

    提示

    WSSecurityAnonymous 有一个仅代码版本,如果需要,可以使用此版本。

  4. 此 WSE 3.0 项目安装在 C:\Program Files\Microsoft WSE\v3.0\Samples\CS\QuickStart\Security\WSSecurityAnonymous\Policy

  5. 安装服务器后,接下来并不是在另一台计算机上安装 WCF 客户端。使用 MMC 工具的上下文菜单中的**“所有任务”->“导出”**选项将 WSE2QuickStartServer 证书导出到一个文件,该证书可在安装了 WSE 3.0 的 LocalMachine/个人证书存储区中找到。不需要导出私钥,只需导出公钥以创建 .CER 文件。有关如何使用 MMC 证书管理单元查看证书存储区中的证书的详细信息,请参见 WSE 3.0 C:\Program Files\Microsoft WSE\v3.0\Samples 目录中的 readme.htm 文件。

  6. 将 .CER 文件从服务器计算机复制到客户端计算机并将公共证书导入到 CurrentUser/受信任人证书存储区中。有关如何使用 MMC 证书管理单元的详细信息,请参见 WSE 3.0 C:\Program Files\Microsoft WSE\v3.0\Samples 目录中的 readme.htm 文件。

    提示

    在运行 WSE 3.0 setup.bat 文件时,它会将 WSE2QuickStartServer 服务器证书从一个证书存储区复制到另一个证书存储区中。

  7. 若要用跨计算机配置来运行示例,请按照针对 WCF 客户端的运行 Windows Communication Foundation 示例中的说明进行操作,并将客户端配置成使用 WSE 3.0 服务的地址来代替 localhost。例如,在名为“mymachine”的计算机上,该地址默认如下:http://mymachine/WSSecurityAnonymousPolicy/WSSecurityAnonymousService.asmx

  8. 在 Client.cs 文件的 Main 函数中,取消对 CallWseService 方法调用的注释。可能还需要注释掉对 CallWcfService 的调用以防止它调用 WCF 服务。

  9. 若要生成 C# 解决方案,请按照生成 Windows Communication Foundation 示例中的说明进行操作。

  10. 运行客户端。

运行示例后进行清除

  1. 若要从客户端或服务器中移除证书,请使用 MMC 工具。或者,在服务器上运行 C:\Program Files\Microsoft WSE\v3.0\Samples 目录中的 Cleanup.bat 文件。

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