WCF:在同一WCF服务的多个实例之间使用Duplex进行通知

时间:2009-04-27 07:17:38

标签: c# wcf web-services duplex

跨应用程序(WPF)的多个实例共享单个WCF服务实例(SoapClient类)的最佳方法是什么?

我需要这样做,因为我需要启用带回调的双工通信,所以我需要“注册应用程序”到服务,以便每当新用户登录时,其他使用该应用程序的用户都会收到通知。


顺便说一句,下面的内容已被删除,因为我已经确认要使通知生效,注册人需要注册到同一个wcf服务实例...因此现在我需要一种方法来共享此实例

我正在开发一个应用程序,当有人登录应用程序时,我需要一些方法来通知当前正在使用该应用程序的用户。

我已经尝试过使用WCF Duplex的东西,但我无法让它工作......我认为其背后的原因是因为通知和订阅需要发生在WCF服务的同一个实例上。 / p>

但是由于这个应用程序将部署在多个用户的PC上,我不能只共享这个wcf服务的一个实例呃? (或者我可以吗?)

有没有办法为所有用户共享wcf服务的公共实例(SoapClient)?或者我是以错误的方式解决这个问题?

目前,我通过公共属性通过类库访问WCF服务,每次访问时都会发送一个新的wcf服务,我认为这就是为什么通知无法处理的原因多个应用程序实例。


以下是客户端应用程序(wpf app)用于访问服务方法的方法(在类库中):

public static MusicRepo_DBAccess_ServiceClient GetService(object instanceContext)
{
    return new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), dualBinding, endpointAddress);  
}

public static MusicRepo_DBAccess_ServiceClient GetService()
{
    return new MusicRepo_DBAccess_ServiceClient(new InstanceContext(new WSGateway()), dualBinding, endpointAddress);
}

在主应用程序窗口中,我从上面的重载方法获取一个新实例,传递this作为instanceContext参数,Open等待通知,但我从未收到通知当另一个用户从另一个应用程序实例登录时。

这就是我在服务登录方法中通知注册商(摘录)的方式:

if (!_callbackList.Contains(newUser))
{
     _callbackList.Add(newUser);
 }
 _callbackList.ForEach(c => c.NotifyNewUserOnline(loggedInUser));

<击>

1 个答案:

答案 0 :(得分:0)

解决方案很简单。我只需要将InstanceContextMode更改为Single

[ServiceBehavior(
        InstanceContextMode = InstanceContextMode.Single)]