WCF服务编程-非WCF应用程序使用WCF服务
2009-06-03 10:59
351 查看
很多人刚开始了解WCF的时候,对于非WCF应用程序如何使用WCF提供出来的服务一直很困惑。其实WCF框架的默认绑定已经考虑到了这一点。即如果某个服务需要给非WCF应用程序使用的话,只需要更改一下配置文件即可。
WCF附带绑定描述列表
绑定功能列表
功能描述列表
通过WCF 附带绑定列表我们可以看到系统提供的BasicHttpBinding绑定适用于与Web服务进行的通信。我们将《WCF服务编程-HelloWorld》的示例为基本在解决方案中添加一个.NET 2.0的非WCF的控制台应用程序,用于向WCF服务请求消息。
第一步 解决服务协定问题
我们知道之前在做Hello World程序时第一步要先创建一个服务协定并在客户端和服务器端都实现这个协定,当时我们是通过引用协定的项目来解决的。但是在非WCF应用程序中不能引用使用WCF的组件那该怎么办呢?其实之前已经提了一下就是服务协定是可以通过WSDL来描述的。那么就跟Web Service一样使用了,在非WCF应用程序中。
默认情况下不能使用HttpGet的方式直接获取WCF服务的协定,需要在服务端的配置文件中定制服务行为来实现:
<!--添加服务行为配置-->
<service name="Cbcye.Service.HelloWorldService" behaviorConfiguration="MyHttpGetBehaviors" >
<!--定制服务行为,允许hhtpGet方法-->
<behaviors>
<serviceBehaviors>
<behavior name="MyHttpGetBehaviors" >
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
配置完成之后我们就可以使用IE访问:http://localhost:7788/cbcye/helloworld?wsdl去获得服务协定了
第二步 在.NET 2.0应用程序中使用WCF服务
下面大家应该比较清楚了。就是在.NET 2.0的应用程序中像使用Web Serivce一样使用服务就可以了。因为是在同一个解决方案,因此需要在Visual Studio外启动服务端的应用程序。添加Web Service引用之后,接下来就可以是在代码中使用服务了,因为代理类已经创建好了。
static void Main(string[] args)
{
ServiceProxy.HelloWorldService hl = new Cbcye.Client2.ServiceProxy.HelloWorldService();
Console.WriteLine("[Client] "+hl.Getstring("Request From .NET 2.0"));
Console.ReadKey(true);
}
第三步 测试运行结果
以下是运行的结果,源代码可以HelloWorld[cbcye.com].zip]在此下载
通过tcpTrace对消息的跟踪,我们可以看到两次调用其实都是采用SOAP协议在进行
使用WCF客户端程序调用
使用非WCF客户端调用
WCF附带绑定描述列表
绑定 | 配置元素 | 说明 |
BasicHttpBinding | <basicHttpBinding> | 一个绑定,适用于与符合 WS-Basic Profile 的 Web 服务(例如基于 ASP.NET Web 服务 (ASMX) 的服务)进行的通信。此绑定使用 HTTP 作为传输协议,并使用文本/XML 作为默认的消息编码。 |
WSHttpBinding | <wsHttpBinding> | 一个安全且可互操作的绑定,适合于非双工服务约定。 |
WSDualHttpBinding | <wsDualHttpBinding> | 一个安全且可互操作的绑定,适用于双工服务协定或通过 SOAP 媒介进行的通信。 |
WSFederationHttpBinding | <wsFederationHttpBinding> | 一个支持 WS-Federation 协议的安全的、可互操作的绑定,使联盟中的组织可以高效地对用户进行身份验证和授权。 |
NetTcpBinding | <netTcpBinding> | 一个安全且经过优化的绑定,适用于 WCF 应用程序之间跨计算机的通信。 |
NetNamedPipeBinding | <netNamedPipeBinding> | 一个安全、可靠且经过优化的绑定,适用于 WCF 应用程序之间计算机上的通信。 |
NetMsmqBinding | <netMsmqBinding> | 一个排队绑定,适用于 WCF 应用程序之间的跨计算机的通信。 |
NetPeerTcpBinding | <netPeerTcpBinding> | 一个支持多计算机安全通信的绑定。 |
MsmqIntegrationBinding | <msmqIntegrationBinding> | 一个适合于 WCF 应用程序和现有消息队列应用程序之间的跨计算机通信的绑定。 |
BasicHttpContextBinding | <basicHttpContextBinding> | 一个绑定,适用于与符合 WS-Basic Profile 且允许使用 HTTP Cookie 交换上下文的 Web 服务进行的通信。 |
NetTcpContextBinding | <netTcpContextBinding> | 一个安全且经过优化的绑定,适用于允许使用 SOAP 标头交换上下文的 WCF 应用程序之间跨计算机的通信。 |
WebHttpBinding | <webHttpBinding> | 一个绑定,可用于为通过 HTTP 请求(而不是 SOAP 消息)公开的 WCF Web 服务配置终结点。 |
WSHttpContextBinding | <wsHttpContextBinding> | 一个安全且可互操作的绑定,适用于允许使用 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 属性可设置值。允许的值包括: · Buffered:请求消息和响应消息都是缓冲式的。 · Streamed:请求消息和响应消息都是流式的。 · StreamedRequest:请求消息是流式的,而响应消息是缓冲式的。 · StreamedResponse:请求消息是缓冲式的,而响应消息是流式的。 |
第一步 解决服务协定问题
我们知道之前在做Hello World程序时第一步要先创建一个服务协定并在客户端和服务器端都实现这个协定,当时我们是通过引用协定的项目来解决的。但是在非WCF应用程序中不能引用使用WCF的组件那该怎么办呢?其实之前已经提了一下就是服务协定是可以通过WSDL来描述的。那么就跟Web Service一样使用了,在非WCF应用程序中。
默认情况下不能使用HttpGet的方式直接获取WCF服务的协定,需要在服务端的配置文件中定制服务行为来实现:
<!--添加服务行为配置-->
<service name="Cbcye.Service.HelloWorldService" behaviorConfiguration="MyHttpGetBehaviors" >
<!--定制服务行为,允许hhtpGet方法-->
<behaviors>
<serviceBehaviors>
<behavior name="MyHttpGetBehaviors" >
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
配置完成之后我们就可以使用IE访问:http://localhost:7788/cbcye/helloworld?wsdl去获得服务协定了
第二步 在.NET 2.0应用程序中使用WCF服务
下面大家应该比较清楚了。就是在.NET 2.0的应用程序中像使用Web Serivce一样使用服务就可以了。因为是在同一个解决方案,因此需要在Visual Studio外启动服务端的应用程序。添加Web Service引用之后,接下来就可以是在代码中使用服务了,因为代理类已经创建好了。
static void Main(string[] args)
{
ServiceProxy.HelloWorldService hl = new Cbcye.Client2.ServiceProxy.HelloWorldService();
Console.WriteLine("[Client] "+hl.Getstring("Request From .NET 2.0"));
Console.ReadKey(true);
}
第三步 测试运行结果
以下是运行的结果,源代码可以HelloWorld[cbcye.com].zip]在此下载
通过tcpTrace对消息的跟踪,我们可以看到两次调用其实都是采用SOAP协议在进行
使用WCF客户端程序调用
使用非WCF客户端调用
相关文章推荐
- WCF服务编程-非WCF应用程序使用WCF服务(转载)
- 使用托管应用程序运行和使用WCF服务
- 普通WCF应用程序使用SVC文件寄宿WF 4.0服务
- 使用 Windows CardSpace 保证您的 ASP.NET 应用程序和 WCF 服务的安全
- 使用 Silverlight 2 和 WCF 构建服务驱动的应用程序
- 使用C#创建WCF服务控制台应用程序
- 使用 Silverlight 2 和 WCF 构建服务驱动的应用程序
- 使用 Silverlight 2 和 WCF 构建服务驱动的应用程序
- 使用一个窗体应用程序作为WCF服务的宿主
- .NET Framework 4.6 and 4.5 > 开发指南 > 使用 WCF 的面向服务的应用程序 > Windows Communication Foundation (WCF)
- 将使用netTcp绑定的WCF服务寄宿到IIS7上全记录
- 关于WCF服务的使用(非常详细的步骤)
- Silverlight应用程序中添加WCF服务的兼容性问题
- 使用PHP 开发基于Web 服务的应用程序
- 一个HttpClient使用Windows认证请求WCF服务的例子
- Visual Studio 2008开发新特性系列课程(7):使用WCF,WF,Cardspace创建互联的应用程序
- 使用反射提供程序创建数据服务(WCF 数据服务)
- 使用WindowsService为宿主实装WCF 服务
- 真实世界:使用WCF扩展记录服务调用时间
- 使用WCF实现SOA面向服务编程—— 架构设计