【发布时间】:2010-10-21 10:11:41
【问题描述】:
嗨
也许这看起来很荒谬,但至少对我来说这是个问题
我编写了双工 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 方法,该方法将从字典中删除客户端。
所以我在服务中管理 Active-client!!!
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-channelClosing中有一个事件。那么有什么方法可以使用它吗?
标签: wcf