WCF,会话实例为什么不执行回调?

问题描述

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession,ConcurrencyMode=ConcurrencyMode.Reentrant)]publicclassMyService:IService{staticList<ISomeCallbackContract>m_Callbacks=newList<ISomeCallbackContract>();publicvoidDoSomething(stringUserName){ISomeCallbackContractcallback=OperationContext.Current.GetCallbackChannel<ISomeCallbackContract>();if(m_Callbacks.Contains(callback)==false){m_Callbacks.Add(callback);}if(m_Callbacks.Count>2)m_Callbacks[0].SomeCallbackMethod();}}

上面是一个WCF双工的服务实现类,当有2个会话实例的时候,使第一个会话实例执行回调函数。可是,为什么就不执行呢?其它代码是没有任何问题的,测试过的。

解决方案

解决方案二:
看看你的端点怎么配置的,有没有收到消息。
解决方案三:
引用1楼devmiao的回复:

看看你的端点怎么配置的,有没有收到消息。

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession,ConcurrencyMode=ConcurrencyMode.Reentrant)]publicclassMyService:IService{staticList<ISomeCallbackContract>m_Callbacks=newList<ISomeCallbackContract>();publicvoidDoSomething(){ISomeCallbackContractcallback=OperationContext.Current.GetCallbackChannel<ISomeCallbackContract>();if(m_Callbacks.Contains(callback)==false){m_Callbacks.Add(callback);}//callback.SomeCallbackMethod();//这句是可以执行的if(m_Callbacks.Count>=2)m_Callbacks[0].SomeCallbackMethod();}}

端口是没有问题的,像上面注销的那一句,是完全能执行的。测试过
解决方案四:
客户端使用完连接之后,是关闭了通道的,是不是因为这个原因?如何解决呢
解决方案五:
有人知道吗0................
解决方案六:

解决方案七:
一直在找WCF的资源,帮你顶下
解决方案八:
引用6楼ritai888的回复:

一直在找WCF的资源,帮你顶下

是啊,怎么没有人知道呢?
解决方案九:
有人知道么............
解决方案十:

解决方案十一:

解决方案十二:
帮顶................
解决方案十三:
你要用OneWay单路模式才能双工
解决方案十四:
引用12楼wyd1520的回复:

你要用OneWay单路模式才能双工

就是用的OneWay:[ServiceContract(CallbackContract=typeof(ISomeCallbackContract))]publicinterfaceIService{[OperationContract(IsOneWay=true)]voidDoSomething(stringUserName));}//用于回调的契约publicinterfaceISomeCallbackContract{[OperationContract(IsOneWay=true)]voidSomeCallbackMethod();}

解决方案十五:
,奇怪,这个帖子大咖们咋不回答
解决方案:
客户端的呢internalclassWcfClient:DuplexClientBase<IService>,IService要这样写{}
解决方案:
引用15楼wyd1520的回复:

客户端的呢}

你说的是客户端代理类吗,那是自动生成的啊。是这样的啊publicpartialclassServiceClient:System.ServiceModel.ClientBase<IService>,IService

解决方案:
引用16楼drf43r4的回复:

Quote: 引用15楼wyd1520的回复:
客户端的呢}

你说的是客户端代理类吗,那是自动生成的啊。是这样的啊publicpartialclassServiceClient:System.ServiceModel.ClientBase<IService>,IService

不能用ClientBase这只是单向的要用DuplexClientBase没有自动生成一说呀,要自己定义
解决方案:
引用17楼wyd1520的回复:

Quote: 引用16楼drf43r4的回复:
Quote: 引用15楼wyd1520的回复:
客户端的呢}

你说的是客户端代理类吗,那是自动生成的啊。是这样的啊publicpartialclassServiceClient:System.ServiceModel.ClientBase<IService>,IService

不能用ClientBase这只是单向的要用DuplexClientBase没有自动生成一说呀,要自己定义

客户端添加服务引用的时候,客户端代理类是自动生成的啊
解决方案:
引用18楼drf43r4的回复:

Quote: 引用17楼wyd1520的回复:
Quote: 引用16楼drf43r4的回复:
Quote: 引用15楼wyd1520的回复:
客户端的呢}

你说的是客户端代理类吗,那是自动生成的啊。是这样的啊publicpartialclassServiceClient:System.ServiceModel.ClientBase<IService>,IService

不能用ClientBase这只是单向的要用DuplexClientBase没有自动生成一说呀,要自己定义

客户端添加服务引用的时候,客户端代理类是自动生成的啊

不跟你说了么,不能用自动生成的,要自己代码实现
解决方案:
引用19楼wyd1520的回复:

不跟你说了么,不能用自动生成的,要自己代码实现

我仔细看了一下,我这边客户端代理类确实是继承自DuplexClientBase,这个是没有错的。有谁能回答我楼顶的问题吗?
解决方案:

解决方案:
有人知道吗,高人呢

时间: 2024-12-04 09:33:36

WCF,会话实例为什么不执行回调?的相关文章

WCF分布式开发步步为赢(9):WCF服务实例激活类型编程与开发

.Net Remoting的激活方式也有三种:SingleTon模式.SingleCall模式.客户端激活方式,WCF服务实例激活类型包括三种方式:单调服务(Call Service),会话服务(Sessionful Service),单例服务(Singleton Service).他们之间有什么联系.WCF服务激活类型的优势和缺点,以及如何在项目里编程开发和设置服务实例.全文分为5个部分,首先一次介绍单调服务(Call Service),会话服务(Sessionful Service),单例服

Silverlight+WCF 新手实例 象棋 房间状态更新(二十)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示   这节开始,标题里就去掉"回归WCF通讯应用"几字了.   上节我们成功实现了进入房间,服务端也收到用户进入房间的请求了,这节,我们服务端收到进入房间请求后,通知在房间大门外的人更新房间状态. 我们要增加一个回调方法,ICallBack接口那,忘记的人回去看看WCF通讯那几篇(十四到十七节). 方法如下,以前说过了,回调的方法是给客户端实现的,服务端只管调就行了: using System.ServiceMode

Silverlight+WCF 新手实例 象棋 主界面-在线用户区(二十四)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 演示已更新到此节介绍:Silverlight+WCF 新手实例 象棋 介绍III(二十三)   这节我们来实现在线用户区的显示,把上两节介绍那张图再弄来,看在线用户区是哪块:   一眼扫过看到了,是第四区,现在开始了,还是上次下棋区域一样的逻辑,往Index.xaml里拉一个Board控件,然后后台写两行代码代码一下. 当然了,得新建一个用户控件:就叫:OnlineUser.xaml,好,空白的在线用户建完了,下面还是两步实

Silverlight+WCF 新手实例 象棋 WCF通讯轮询(十七)

上节说到: 关于双向通讯,官方提供了N种可以双向的,不过今天要用到的, 是pollingDuplexHttpBinding,一个扩展的轮询机制的双向通讯,当你也可以尝试用上面的通讯方式去试一试. 既然是扩展,就说明默认没有,那我们首先就要添加扩展了,用的是默认官方是提供的DLL,就在我们安装的Silverlight4的目录里: 正常路径为:C:\Program Files\Microsoft SDKs\Silverlight\v4.0\Libraries\Server\System.Servic

Silverlight+WCF 新手实例 象棋 回归WCF通讯应用-登陆(十八)

前四节,我们讲了通讯基础,从这节起,我们回归到项目中来,要将前面的WCF通讯知识应用进来. 之前的项目大伙没丢把,重新发下载地址:之前第3阶段代码:点此下载   我们为Chess项目的解决方案里,再添加WCF应用服务程序 由于Silverlight+WCF 新手实例 象棋 WCF通讯跨域(十五)已截图,所以这里不截图了. 步骤: 1.对着解决方案->右键->添加新建项目->选择WCF应用服务程序->输入:GameService 2.删除默认的IService1.cs和IServic

Silverlight+WCF 新手实例 象棋 主界面-事件区-求和认输(三十二)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示   事隔几篇,我们又回到事件区,继续其它两个按钮事件,来张图吧: 在Silverlight+WCF 新手实例 象棋 主界面-事件区-游戏开始(二十七) 和之后的几篇,我们实现了游戏开始, 在这篇之前,基本上双方已可以对战了,看似主体功能已完成.只是,大伙都知道,细节的东西,才是花时间的,漫长的路还在后面....... 如标题所示,这节实现"求和+认输"两个事件.   每次开始,我们都习惯的先写WCF服务端代码,再回

JS动态插入并立即执行回调函数的方法_javascript技巧

本文实例讲述了JS动态插入并立即执行回调函数的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <

Silverlight+WCF 新手实例 象棋 该谁下棋-A下B停(二十八)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示   上一节,我们实现了"开始"游戏,并互相通知可以开始游戏了:可是我们并没有对棋子进行限制,双方都可以随时的下: 所以,接下来我们要实现对棋子的限制,A下B停,B下A停,同时,要传递棋步,对方收到棋步,要反转棋步坐标,还得自动移动棋子.   说了这么多,我们从哪里开始下手呢?其实我也想了很久...... 让我们回到Chess象棋类,于是添加一个属性IsCanMove //象棋类 by 路过秋天public clas

Silverlight+WCF 新手实例 象棋 主界面-状态重置(三十四)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示   正如我们在:Silverlight+WCF 新手实例 象棋 主界面-事件区-求和认输(三十二)里面提到的一样: "游戏结束了,要干点什么呢?当然就是棋盘复位了,按钮重置了,如果还有棋谱之类的,全都得重置.这些,我们留下到另一节优化处理吧."   所以,本节就做这些手尾工作了. 由于游戏结束,我们复位的工作很多,至少有N个控件需要复位,因此,Silverlight+WCF 新手实例 象棋 主界面-控件消息传递(二