本主题演示如何在驻留于 Windows 域中并由同一域中的客户端调用的 Windows Communication Foundation (WCF) 服务上启用传输安全。有关 此方案的更多信息,请参见通过 Windows 身份验证确保的传输安全。有关示例应用程序,请参见 WSHttpBinding 示例。
本主题假定您已定义一个现有的协定接口和实现及其加载项。您还可以修改一个现有的服务和客户端。
您完全可以在代码中使用 Windows 凭据来保护服务。或者,也可以通过使用配置文件省略某些代码。本主题演示了这两种方法。请务必仅使用其中一种方法,而不是同时使用两种方法。
前三个过程演示如何使用代码保护服务。第四个和第五个过程演示如何使用配置文件保护服务。
使用代码
服务和客户端的完整代码位于本主题末尾的“示例”一节中。
第一个过程演练如何在代码中创建和配置 WSHttpBinding 类。该绑定使用 HTTP 传输。在客户端上使用了同一绑定。
创建使用 Windows 凭据和消息安全的 WSHttpBinding
在“示例”一节的服务代码中,将此过程的代码插入到
Test类的Run方法开头。创建 WSHttpBinding 类的一个实例。
将 WsHttpSecurity 类的 Mode 属性设置为 Message。
将 MessageSecurityOverHttp 类的 ClientCredentialType 属性设置为 Windows。
此过程的代码如下:
在服务中使用该绑定
这是第二个过程,演示如何在自承载服务中使用该绑定。有关 承载服务的更多信息,请参见承载服务。
在服务中使用绑定
在上一过程的代码之后插入此过程的代码。
创建一个名为
contractType的 Type 变量,并为其分配接口类型 (ICalculator)。在使用 Visual Basic 时,请使用 GetType 运算符;在使用 C# 时,请使用 typeof 关键字。创建另一个名为
serviceType的 Type 变量,并为其分配所实现的协定的类型 (Calculator)。使用该服务的基址创建 Uri 类的一个实例,该实例名为
baseAddress。基址必须具有与传输匹配的方案。在本示例中,传输方案为 HTTP,且地址包含特殊的统一资源标识符 (URI)“localhost”和端口号 (8036),以及一个终结点基址(“serviceModelSamples/”):https://localhost:8036/serviceModelSamples/。使用
serviceType和baseAddress变量创建 ServiceHost 类的一个实例。使用
contractType、绑定和终结点名称 (secureCalculator) 将一个终结点添加到服务中。在启动对服务的调用时,客户端必须将基址和终结点名称连接起来。调用 Open 方法以启动该服务。此过程的代码如下所示:
在客户端中使用该绑定
此过程演示如何生成与服务进行通信的代理。该代理通过 ServiceModel Metadata Utility Tool (Svcutil.exe) 生成,该工具使用服务元数据创建该代理。
此过程还创建 WSHttpBinding 类的实例以便与服务进行通信,然后调用服务。
本示例仅使用代码来创建客户端。另一种方法是使用配置文件,如此过程之后的一节所示。
通过代码在客户端中使用绑定
使用 SvcUtil.exe 工具根据服务的元数据生成代理代码。有关更多信息,请参见 如何:创建 Windows Communication Foundation 客户端。生成的代理代码继承自 ClientBase 类,这确保了每个客户端都具有与 WCF 服务通信所需的构造函数、方法和属性。在本示例中,生成的代码包括
CalculatorClient类,该类实现了ICalculator接口,以便与服务代码兼容。在客户端程序的
Main方法的开头插入此过程的代码。创建 WSHttpBinding 类的一个实例,并且将其安全模式设置为 Message,将其客户端凭据类型设置为 Windows。本示例将变量命名为
clientBinding。创建 EndpointAddress 类的一个实例,该实例名为
serviceAddress。将基址与终结点名称连接起来以初始化该实例。使用
serviceAddress和clientBinding变量创建所生成的客户端类的一个实例。调用 Open 方法,如下面的代码所示。
调用服务并显示结果。
使用配置文件
如果不用程序代码创建绑定,还可以使用下面所示的配置文件绑定节的代码。
请注意 服务配置文件和客户端配置文件都使用此配置代码。
使用配置在 Windows 域中的服务上启用传输安全
将 <wsHttpBinding> 元素添加到配置文件的 <bindings> 元素节。
将一个 <binding> 元素添加到 <WSHttpBinding> 元素中,并将 configurationName 属性设置为适合于应用程序的值。
添加一个 <security> 元素,并将 mode 属性设置为 Message。
添加一个 <message> 元素,并将 clientCredentialType 属性设置为 Windows。
在服务的配置文件中,使用下面的代码替换 <bindings> 节。如果还没有服务配置文件,请参见使用绑定配置服务和客户端。
<bindings> <wsHttpBinding> <binding name = "wsHttpBinding_Calculator"> <security mode="Message"> <message clientCredentialType="Windows"/> </security> </binding> </wsHttpBinding> </bindings>
在客户端中使用该绑定
此过程演示如何生成两个文件:一个与服务进行通信的代理和一个配置文件。此过程还描述对客户端程序所做的更改,这是在客户端使用的第三个文件。
通过配置在客户端中使用绑定
使用 SvcUtil.exe 工具根据服务的元数据生成代理代码和配置文件。有关更多信息,请参见 如何:创建 Windows Communication Foundation 客户端。
使用上一节中的配置代码替换所生成的配置文件的 <Bindings> 节。
在客户端程序的
Main方法的开头插入程序代码。通过将配置文件中的绑定名称作为输入参数进行传递,创建所生成的客户端类的实例。
调用 Open 方法,如下面的代码所示。
调用服务并显示结果。
示例
另请参见
任务
如何:创建 Windows Communication Foundation 客户端