问题描述
[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,这个是没有错的。有谁能回答我楼顶的问题吗?
解决方案:
解决方案:
有人知道吗,高人呢