跨应用程序(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));
击> <击> 撞击>
答案 0 :(得分:0)
解决方案很简单。我只需要将InstanceContextMode
更改为Single
:
[ServiceBehavior(
InstanceContextMode = InstanceContextMode.Single)]