NetHttpBinding 示例演示如何实现在 BinaryMessageEncodingBindingElement 上堆叠 HttpTransportBindingElement 或 HttpsTransportBindingElement 的绑定。Windows Communication Foundation (WCF) 附带的、基于 HTTP 的系统定义的绑定(如 BasicHttpBinding 或 WsHttpBinding)在 TextMessageEncodingBindingElement 上堆叠 HTTP 的主要目的是允许收发文本/Xml 消息,以实现互操作性。Windows Communication Foundation (WCF) 附带的、基于 TCP 以及基于 NamedPipe 的系统定义的绑定(如 NetTcpBinding 或 NetNamedPipeBinding)以二进制形式编写和使用消息。二进制格式尽管不可互操作,但更为有效并且进行了性能优化。
提示
本主题的末尾介绍了此示例的设置过程和生成说明。
此示例演示如何利用 WCF 的体系结构合并您希望在通道堆栈中使用的绑定元素,以按照您需要的方式配置绑定。创建自定义绑定的步骤如下:
- 确定您为了创建绑定而希望堆叠在一起的绑定元素。
- 确保您知道使堆栈正常工作而对绑定元素进行堆叠的顺序。例如,您希望在堆栈的底部添加传输。
- 创建 Binding 类,它从 Binding 继承而来。在我们这个特例中,NetHttpBinding 还实现 ISecurityCapabilities 接口,因为我们希望允许此绑定的用户检查 ProtectionLevel 以及它们的绑定是否支持客户端和服务器身份验证。
- 该绑定公开必须提供给用户的其他属性,以允许他们配置构成绑定元素。例如,我们提供了 BypassProxyOnLocal 属性,所以可以在基础 HTTP 或 HTTPS TransportBindingElement 上配置同一个属性。
- 在 CreateBindingElements 方法中,该示例演示了绑定元素必须采用的堆叠顺序。例如,它首先添加编码器,然后添加传输,因为传输必须位于绑定堆栈的底部。
- 最后,我们实现 ApplyConfiguration 方法,以允许使用配置填充 NetHttpBinding。实际上,要使您的绑定能够从配置文件中进行配置,还需要其他几个类。幸运的是,您可以使用 ConfigurationCodeGenerator 工具创建这些类。ConfigurationCodeGenerator 工具也作为一个 WCF 示例进行提供。
NetHttpBinding 示例服务
使用 NetHttpBinding 的示例服务位于服务子目录中。用于配置终结点的绑定是 NetHttpBinding。该示例服务是使用 Main 方法的自承载服务,但也可以在 Internet 信息服务 (IIS) 中承载。
NetHttpBinding 示例客户端
客户端还配置其到 NetHttpBinding 的绑定,以连接到该服务。客户端演示它可以在代码或配置中配置绑定。它可以通过配置来配置 NetHttpBinding 这一事实通过它为了向配置公开绑定而添加的类来实现。正如前文所讲,ConfigurationCodeGenerator 工具可以帮助您生成这些类。
设置和生成示例
若要生成解决方案,请按照生成 Windows Communication Foundation 示例中的说明进行操作。
请确保路径包含 Makecert.exe 所在的文件夹。
在要运行服务器的计算机上,从示例安装文件夹中运行 Setup.bat,以创建服务器需要的服务器证书及其颁发者证书。
在同一台服务器计算机上,按照Configuring HTTP and HTTPS 中的概念文档中的说明使用 HTTP.SYS 配置服务器证书。
在同一计算机上运行示例
启动 service\bin 中的 Service.exe。服务活动显示在服务控制台窗口上。
启动 \client\bin 中的 Client.exe。客户端活动将显示在客户端控制台应用程序上。
完成示例后,运行 Cleanup.bat 移除证书。
跨计算机运行示例
启动 service\bin 中的 Service.exe。服务活动显示在服务控制台窗口上。
因为该服务器是自承载的,如果您以域用户的身份运行该客户端和服务器,则必须在客户端的 App.config 文件中指定一个标识:
<client> <endpoint name="EchoServer" address= https://localhost:8000/TestService/BinaryEncoderOverHTTP binding= "netHttpBinding" bindingConfiguration="netHttpBinding" contract= "Microsoft.ServiceModel.Samples.Client.IEchoService" > <identity> <userPrincipalName value="user_name@service_domain"/> </identity> </endpoint> </client>
启动 \client\bin 中的 Client.exe:将服务窗口中显示的 HTTPS URL 作为命令行参数进行传递。客户端活动将显示在客户端控制台应用程序上。
完成示例后,运行 Cleanup.bat 移除证书。
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.