WCF实现全双工例子(1)
来源:互联网 发布:网络运营需要学什么 编辑:程序博客网 时间:2024/05/17 04:17
全双工的一些细节
基于Http协议(wsDualHttpBinding)的全双工回调接口的几个注意点:
下面的binding="wsDualHttpBinding"一定要是支持全双工的协议;
<service name="dualService.Dog" > <host> <baseAddresses> <add baseAddress="http://localhost:1709/Design_Time_Addresses/dualService.Dog/" /> </baseAddresses> </host> <endpoint address="" binding="wsDualHttpBinding" contract="dualService.IDog"/> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> </service>
服务契约一定要加上标注[ServiceContract(SessionMode=SessionMode.Required,CallbackContract=typeof(IResult))],这个SessionMode=SessionMode.Required是一直开启会话验证,为此服务设置回调接口(注意:类是不能作为回调的),即CallbackContract=typeof(IResult))。最后一定要为操作契约设置为单项模式,即[OperationContract(IsOneWay=true)]。
[ServiceContract(SessionMode=SessionMode.Required,CallbackContract=typeof(IResult))] public interface IDog { [OperationContract(IsOneWay=true)] void Fly(FlyTarget conposite); } [ServiceContract] public interface IResult { [OperationContract(IsOneWay = true)] void Result(string result);}
在.svc文件中获取当前操作上下文的回调接口的回调管道,即Irslt=OperationContext.Current.GetCallbackChannel<IResult>();,并且使用该接口对象调用该接口中声明的方法,即Irslt.Result("取经失败!")。这里调用接口IResult中的Result方法,实质上是为客户端回调接口的时候,出发这个方法而准备的。
IResult Irslt = null; public Dog() { Irslt = OperationContext.Current.GetCallbackChannel<IResult>(); } public void Fly(FlyTarget conposite) { if(conposite.Magheight>500) { Irslt.Result("取经失败!"); } else { Irslt.Result("取经成功!"); } }
最后,在客户端调用服务,并且使用服务调用Fly()方法,这样就可以触发回调接口的方法,然后再客户端在实现服务生成的回调接口IDogCallback即可可完成整个接口回调。
static void Main(string[] args) { //using (DogClient dc = new DogClient(new System.ServiceModel.InstanceContext(new Result1()))) //{ DogClient dc = new DogClient(new System.ServiceModel.InstanceContext(new Result1())); FlyTarget fly = new ServiceReference1.FlyTarget() { Magheight = 400 }; dc.Fly(fly); //} Console.ReadKey(); } } public class Result1:IDogCallback { public void Result(string result1) { Console.Write(result1); Console.ReadKey(); }}
总结,在这个例子中,除开标志服务契约和方法契约为单向模式、服务接口设置为SessionMode=Required以及标志回调接口以外,还要注意要在服务(.svc文件)获取当前操作上下文中的回调接口,然后使用该回调接口的对象调用接口中所需的方法(这里是Result()方法)。最后要在客户端实现服务生成的回调接口即可。
- WCF实现全双工例子(1)
- WCF实现全双工通信笔记
- WCF全双工数据传输
- WCF实现双工通信
- S60 全双工音频例子--实现边采集边播放
- RS485(半)全双工实现
- WCF中实现双工通信
- wcf双工
- 我的WCF之旅(3):在WCF中实现双工通信
- 我的WCF之旅(3):在WCF中实现双工通信
- 我的WCF之旅(3):在WCF中实现双工通信
- 我的WCF之旅(3):在WCF中实现双工通信
- 我的WCF之旅(3):在WCF中实现双工通信
- wcf使用netTcpBinding实现双工通信
- WCF 学习笔记之双工实现
- WCF双工通讯实现聊天传文件
- Winfrom 使用WCF 实现双工通讯
- 套接字(全双工)实现进程间通信
- 用于不相交集合的数据操作——并查集
- 虚拟机无法打开磁盘 "或者某一个快照所依赖的磁盘 原因:未能锁定文件"的解决办法
- UISegment使用
- 黑马程序员——OC——内存管理
- (一)一个基本C程序描述
- WCF实现全双工例子(1)
- 想法经常上下摇摆
- 程序员必须知道的10大基础实用算法及其讲解
- 新浪微博发送消息和授权机制原理(WeiboSDK)
- UVA 1508 - Equipment 状态压缩 枚举子集 dfs
- “集群和负载均衡”等的通俗解释
- 【hadoop入门实战】Mac上安装hadoop,并运行程序(1)
- LINUX安装ImageMagick和PHP Imagick扩展
- 非线程安全对象池