喜
也许这看起来可笑,但是这是问题,至少对我来说Wcf Duplex:检索客户端连接?
我写双工WCF服务,我的服务,我需要得到积极的客户服务,并将其保存,并在与发生特殊事件我打电话特定的客户端并为其发送一些值。所以我定义字典并保存客户端。 (用这种方法客户端调用)
public static Dictionary<int, IServiceCallbak> ActiveClients;
public void IConnect(int SenderId)
{
if (ActiveClients == null)
ActiveClients = new Dictionary<int, IServiceCallbak>();
Client = OperationContext.Current.GetCallbackChannel<IServiceCallbak>();
if (ActiveClients.Count(ac => ac.Key == SenderId) > 0)
ActiveClients.Remove(SenderId);
ActiveClients.Add(SenderId, Client);
}
所以后来当我需要从字典中寻找客户,并调用具体的方法:Client.DoSomthing().
此外,当客户想要退出时,它调用IDisconnect
方法,它将从词典中删除客户端。
所以我管理服务中的活动客户端!
But there is problem in client for managing themselves
经过一段时间后,在app.config
定义的服务连接将被关闭,您应该续约,然后打开服务。
因此,在这种情况下:
1)是否有重新创建任何解决方案,并在客户端中打开服务对象automatically
。
2),或者在服务器端,当服务需要致电客户,从字典中查询客户服务对象的状态,并重新从服务器端(Ridiculous-solution
)
连接编辑
我认为更好的解决方案是要处理Suggestion 1
,我不知道怎么回事!!!
因此,现在的问题是:Is way exist to do Suggestion 1 Or not?
以前我描述建议1在评论:
“并自动引用这种情况下的事件(如关闭或中止),但我没有找到任何这样做在Service-Client “
关于建议'1',如果我重新创建服务对象,并调用服务,有很大的问题,服务会发现客户端具有不同的服务回调通道。所以我的意思是,我为服务创建了具有相同Service-Callback-Channel的相同对象。并自动引用此事件(如关闭或中止),但我在Service-Client中找不到这样的事情,但在Service-channel'Closing'中有一个事件。那么有什么方法可以使用它? – Rev 2010-10-24 08:51:04