NetHttpBinding
NetHttpBinding 示例演示如何实现在 BinaryMessageEncodingBindingElement 上堆叠 HttpTransportBindingElement 或 HttpsTransportBindingElement 的绑定。Windows Communication Foundation (WCF) 附带的、基于 HTTP 的系统定义的绑定(如 BasicHttpBinding 或 WsHttpBinding)在 TextMessageEncodingBindingElement 上堆叠 HTTP 的主要目的是允许收发文本/Xml 消息,以实现互操作性。Windows Communication Foundation (WCF) 附带的、基于 TCP 以及基于 NamedPipe 的系统定义的绑定(如 NetTcpBinding 或 NetNamedPipeBinding)以二进制形式编写和使用消息。二进制格式尽管不可互操作,但更为有效并且进行了性能优化。
注意: |
---|
本主题的最后提供了此示例的设置过程和生成说明。 |
注意: |
---|
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:
<安装驱动器>:\WF_WCF_Samples
如果此目录不存在,请访问针对 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能为英文网页),下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录。
<安装驱动器>:\WF_WCF_Samples\WCF\Extensibility\Binding\NetHttpBinding
|
此示例演示如何利用 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 工具可帮助您生成这些类。
设置和生成示例
使用以下命令安装 ASP.NET 4.0。
%windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
若要生成解决方案,请按照生成 Windows Communication Foundation 示例中的说明进行操作。
请确保路径包含 Makecert.exe 所在的文件夹。
在要运行服务器的计算机上,从示例安装文件夹中运行 Setup.bat,以创建服务器需要的服务器证书及其颁发者证书。
在同一台服务器计算机上,按照配置 HTTP 和 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 移除证书。