WCF初探-13:WCF客户端为双工服务创建回调对象
2015-04-13 08:01
471 查看
前言:
在WCF初探-5:WCF消息交换模式之双工通讯(Duplex)博文中,我讲解了双工通信服务的一个应用场景,即订阅和发布模式,这一篇,我将通过一个消息发送的例子讲解一下WCF客户端如何为双工服务创建回调对象。双工服务指定一个回调协定,客户端应用程序必须实现该协定以便提供一个该服务能够根据协定要求调用的回调对象。虽然回调对象不是完整的服务(例如,您无法使用回调对象启动一个通道),但是为了实现和配置,这些回调对象可以被视为一种服务。
双工服务的客户端必须:
实现一个回调协定类。
创建回调协定实现类的一个实例,并使用该实例创建传递给 WCF 客户端构造函数的 System.ServiceModel.InstanceContext 对象。
调用操作并处理操作回调。
双工 WCF 客户端对象除了会公开支持回调所必需的功能(包括回调服务的配置)以外,其他的功能和它们的非双工对应项相同。
示例说明:
Service服务契约中定义了一个发送方法Send,采用IsOneWay=true,供客户端调用,向服务端发送消息。Service中还提供了用于双工通信的回调接口IMessageExchangeCallback,该接口中定义了服务端接收消息后向客户端发送消息的方法Receive,此方法就是客户端发送消息到服务端后,服务端调用回调方法,将消息发送到客户端。Client需要实现双工协定回调接口的类CallBackHandler,并实现Receive方法。
针对双工协定生成的 WCF 客户端需要在构造时提供一个 InstanceContext 类。此 InstanceContext 类用作实现回调接口并处理从服务发送回的消息的对象所在的位置。InstanceContext 类是用 CallbackHandler 类的实例构造的。此对象处理通过回调接口从服务发送到客户端的消息。
<?xml version="1.0"?> <configuration> <system.serviceModel> <services> <service name="Service.MessageExchange" behaviorConfiguration="mexBehavior"> <host> <baseAddresses> <add baseAddress="http://localhost:1234/MessageExchange/"/> </baseAddresses> </host> <endpoint address="" binding="wsDualHttpBinding" contract="Service.IMessageExchange" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> </service> </services> <behaviors> <serviceBehaviors> <behavior name="mexBehavior"> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
View Code
3. Client:控制台应用程序。客户端程序,启动服务承载程序Host后,添加对服务地址http://localhost:1234/MessageExchange/的引用,将命名空间修改为
MessageExchangeServiceRef,之后在Program.cs完成对双工服务回调接口IMessageExchangeCallback的实现和对服务方法的调用。Program.cs的代码如下:
using System; using Client.MessageExchangeServiceRef; using System.ServiceModel; namespace Client1 { public class CallBackHandler : IMessageExchangeCallback { public void Receive(string message) { Console.WriteLine("客户端监听服务端接收的消息:" + message); } } class Program { static void Main(string[] args) { InstanceContext instanceContext = new InstanceContext(new CallBackHandler()); MessageExchangeClient proxy = new MessageExchangeClient(instanceContext); proxy.Send("Wcf Duplex"); Console.Read(); } } }
运行结果如下:
总结:
本文模拟了客户端向服务端发送消息,服务端接收到消息后,将监听到的消息显示在客户端。希望通过本示例对双工通信有进步一的认识,关于实例和会话,我将在后面的博文中做解析。相关文章推荐
- WCF----最简单的winform客户端回调服务端WCFDemo下载,双工模式,IIS 6.0
- VS2010 创建WCF以及SL的客户端如何调用WCF服务 教程(二): 创建调用WCF的SilverLight客户端
- 一步一个脚印学习WCF之一WCF概要(中)之客户端与服务-WCF服务的创建与调用Demo
- WCF双工服务端回调客户端
- VS2010 创建WCF以及SL的客户端如何调用WCF服务 教程(二): 创建调用WCF的SilverLight客户端
- VS2010 创建WCF以及SL的客户端如何调用WCF服务教程(一): 创建WCF
- WCF----双工模式服务端回调客户端方法时无响应,“发送到 http://***/User.svc 的请求操作在配置的超时内未收到回复”
- VS2010 创建WCF以及SL的客户端如何调用WCF服务教程(一): 创建WCF
- 网络编程之WCF编程:WCF服务和客户端的建立,回调
- VS2010 创建WCF以及SL的客户端如何调用WCF服务教程(一): 创建WCF
- 网络编程之WCF编程:WCF服务和客户端的建立,回调
- 网络编程之WCF编程:WCF服务和客户端的建立,回调
- WCF初探-10:WCF客户端调用服务
- WCF服务创建与使用(双工模式)
- WCF初探-11:WCF客户端异步调用服务
- WCF双工模式服务端回调客户端
- Silverlight 客户端生成双工服务
- WCF服务和客户端操作步骤
- 为 Silverlight 客户端生成双工服务
- [问题]通过IIS宿主发布WCF服务,客户端添加服务引用出错的解决办法