调用GetCallbackChannel()时如何只获取一个实例?

时间:2012-02-13 13:21:43

标签: c# wcf callback instance

我的WCF服务有点问题 实际上,用户可以订阅“发布”服务。

我只是在做OperationContext.Current.GetCallbackChannel<IPublishing>(); 然后我将返回的对象添加到List(一种List<IPublishing>

由于我希望在发布消息时通知我的客户,我只需调用所有订阅用户的回调。

效果很好,但用户可以订阅两次,我不想这样做 这就是为什么我要if (!theList.Contains(theCallbackChannelReturned))来验证这个约束......

这里的事实是,每当我创建callbackchannel时,他似乎创建了另一个新的IPublishing实例,即使在同一个客户端上......

我不知道如何做到这一点...我发现OperationContext.Current.InstanceContext仍然返回相同的Hashcode但是 GetCallbackChannel没有...

谢谢!

1 个答案:

答案 0 :(得分:1)

在客户端回调实现中,您应该执行以下操作:

[CallbackBehavior(
    ConcurrencyMode = ConcurrencyMode.Reentrant, 
    UseSynchronizationContext = false)]
public partial class ServiceClient : IMyService_Callback 
{ .... }