很多人刚开始了解WCF的时候,对于非WCF应用程序如何使用WCF提供出来的服务一直很困惑。其实WCF框架的默认绑定已经考虑到了这一点。即如果某个服务需要给非WCF应用程序使用的话,只需要更改一下配置文件即可。
WCF附带绑定描述列表
绑定 | 配置元素 | 说明 |
一个绑定,适用于与符合 WS-Basic Profile 的 Web 服务(例如基于 ASP.NET Web 服务 (ASMX) 的服务)进行的通信。此绑定使用 HTTP 作为传输协议,并使用文本/XML 作为默认的消息编码。 | ||
一个安全且可互操作的绑定,适合于非双工服务约定。 | ||
一个安全且可互操作的绑定,适用于双工服务协定或通过 SOAP 媒介进行的通信。 | ||
一个支持 WS-Federation 协议的安全的、可互操作的绑定,使联盟中的组织可以高效地对用户进行身份验证和授权。 | ||
一个安全且经过优化的绑定,适用于 WCF 应用程序之间跨计算机的通信。 | ||
一个安全、可靠且经过优化的绑定,适用于 WCF 应用程序之间计算机上的通信。 | ||
一个排队绑定,适用于 WCF 应用程序之间的跨计算机的通信。 | ||
一个支持多计算机安全通信的绑定。 | ||
一个适合于 WCF 应用程序和现有消息队列应用程序之间的跨计算机通信的绑定。 | ||
一个绑定,适用于与符合 WS-Basic Profile 且允许使用 HTTP Cookie 交换上下文的 Web 服务进行的通信。 | ||
一个安全且经过优化的绑定,适用于允许使用 SOAP 标头交换上下文的 WCF 应用程序之间跨计算机的通信。 | ||
一个绑定,可用于为通过 HTTP 请求(而不是 SOAP 消息)公开的 WCF Web 服务配置终结点。 | ||
一个安全且可互操作的绑定,适用于允许使用 SOAP 标头交换上下文的非双工服务协定。 |
绑定功能列表
绑定 | 互操作性 | 安全性(默认) | 会话 (默认) | 事务 | 双工 | 编码(默认) | 流 (默认) |
BasicHttpBinding | Basic Profile 1.1 | (无)、传输、消息、混合 | (无) | (无) | n/a | 文本、(MTOM) | 是 (缓冲式) |
WSHttpBinding | WS | 传输、(消息)、混合 | (无)、可靠会话、安全会话 | (无)、是 | n/a | (文本)、MTOM | 否 |
WSDualHttpBinding | WS | (消息)、无 | (可靠会话)、安全会话 | (无)、是 | 是 | (文本)、MTOM | 否 |
WSFederationHttpBinding | WS-Federation | (消息)、混合、无 | (无)、可靠会话、安全会话 | (无)、是 | 否 | (文本)、MTOM | 否 |
NetTcpBinding | .NET | (传输)、消息、无、混合 | (传输)、可靠会话、安全会话 | (无)、是 | 是 | 二进制 | 是 (缓冲式) |
NetNamedPipeBinding | .NET | (传输)、无 | 无、(传输) | (无)、是 | 是 | 二进制 | 是 (缓冲式) |
NetMsmqBinding | .NET | 消息、(传输)、无 | (无)、传输 | 无、(是) | 否 | 二进制 | 否 |
NetPeerTcpBinding | 对等 | (传输) | (无) | (无) | 是 | 否 | |
MsmqIntegrationBinding | MSMQ | (传输) | (无) | 无、(是) | n/a | n/a | 否 |
BasicHttpContextBinding | 基本配置文件 1.1 | (无)、传输、消息、混合 | (无) | (无) | n/a | 文本、(MTOM) | 是 (缓冲式) |
NetTcpContextBinding | .NET | (传输)、消息、无、混合 | (传输)、可靠会话、安全会话 | (无)、是 | 是 | 二进制 | 是 (缓冲式) |
WSHttpContextBinding | WS | 传输、(消息)、混合 | (无)、可靠会话、安全会话 | (无)、是 | n/a | 文本、(MTOM) | 否 |
功能描述列表
功能 | 说明 |
互操作性类型 | 指定绑定用来确保互操作的协议或技术。 |
安全性 | 指定如何保护通道: · 无:不保护 SOAP 消息且不验证客户端的身份。 · 传输:在传输层上满足安全要求。 · 消息:在消息层上满足安全要求。 · 混合:声明包含在消息中;完整性和保密性要求由传输层满足。 |
会话 | 指定此绑定是否支持会话协定。 |
Transactions | 指定是否启用事务。 |
双工 | 指定是否支持双工协定。请注意,此功能要求支持绑定中的会话。 |
编码 | 指定消息的网络格式。允许的值包括: · 文本:例如 UTF-8。 · 二进制 · 消息传输优化机制 (MTOM):一种对 SOAP 信封上下文中二进制 XML 元素高效编码的方法。 |
流 | 指定传入和传出消息是否支持流。使用绑定上的 TransferMode 属性可设置值。允许的值包括: · :请求消息和响应消息都是缓冲式的。 · :请求消息和响应消息都是流式的。 · :请求消息是流式的,而响应消息是缓冲式的。 · :请求消息是缓冲式的,而响应消息是流式的。 |
通过WCF 附带绑定列表我们可以看到系统提供的BasicHttpBinding绑定适用于与Web服务进行的通信。我们将《WCF服务编程-HelloWorld》的示例为基本在解决方案中添加一个.NET 2.0的非WCF的控制台应用程序,用于向WCF服务请求消息。
第一步 解决服务协定问题
我们知道之前在做Hello World程序时第一步要先创建一个服务协定并在客户端和服务器端都实现这个协定,当时我们是通过引用协定的项目来解决的。但是在非WCF应用程序中不能引用使用WCF的组件那该怎么办呢?其实之前已经提了一下就是服务协定是可以通过WSDL来描述的。那么就跟Web Service一样使用了,在非WCF应用程序中。
默认情况下不能使用HttpGet的方式直接获取WCF服务的协定,需要在服务端的配置文件中定制服务行为来实现:
配置完成之后我们就可以使用IE访问:去获得服务协定了
第二步 在.NET 2.0应用程序中使用WCF服务
下面大家应该比较清楚了。就是在.NET 2.0的应用程序中像使用Web Serivce一样使用服务就可以了。因为是在同一个解决方案,因此需要在Visual Studio外启动服务端的应用程序。添加Web Service引用之后,接下来就可以是在代码中使用服务了,因为代理类已经创建好了。
第三步 测试运行结果
以下是运行的结果,源代码可以
通过tcpTrace对消息的跟踪,我们可以看到两次调用其实都是采用SOAP协议在进行
使用WCF客户端程序调用
使用非WCF客户端调用