0

在应用程序 (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));

4

1 回答 1

0

解决方案很简单。我只需要更改InstanceContextModeSingle

[ServiceBehavior(
        InstanceContextMode = InstanceContextMode.Single)]
于 2009-05-02T11:11:24.797 回答