在应用程序 (WPF) 的多个实例之间共享 WCF 服务(类)的单个实例SoapClient
的最佳方法是什么?
我需要这样做,因为我需要启用带有回调的双工通信,所以我需要向服务“注册应用程序”,以便使用该应用程序的其他用户在新用户登录时会收到通知。
顺便说一句,以下内容被删除,因为我已经确认要使通知起作用,注册者需要注册到同一个 wcf 服务实例......因此现在我需要一种方法来共享这个实例
我目前正在开发一个应用程序,每当有人登录该应用程序时,我需要某种方式来通知当前正在使用该应用程序的用户。
我尝试过使用 WCF Duplex 的东西,但我无法让它工作......我认为它背后的原因是因为通知和订阅需要发生在 WCF 服务的同一个实例上。
但是由于这个应用程序将部署在多个用户的电脑上,我不能只共享这个 wcf 服务的一个实例是吗?(或者我可以吗?)
有没有办法为所有用户共享一个 wcf 服务的公共实例 (the SoapClient
)?还是我以错误的方式解决这个问题?
目前我正在通过一个公共属性通过一个类库访问 WCF 服务,该公共属性在每次访问它时都会发送一个新的 wcf 服务实例,我认为这就是为什么通知不适用于多个实例的原因应用程序。
以下是客户端应用程序(wpf 应用程序)用于访问服务方法的方法(在类库中):
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));