2011-11-14 98 views
0

我使用PollingDuplexHttpBinding以便客户端可以在我的应用程序中交换消息。 客户端通过RegisterClient()方法注册,将它们添加到静态字典中供将来使用。PollingDuplexHttpBinding和应用程序池回收

的代码看起来是这样的:

[ServiceContract(Namespace = "...", CallbackContract = typeof(MyServiceCallback))] 
public class MyService 
{ 
    public static Dictionary<string, MyServiceCallback> Clients = 
     new Dictionary<string, MyServiceCallback>(); 

    [OperationContract] 
    public void RegisterClient(string name) 
    { 
     Clients[name] = 
      OperationContext.Current.GetCallbackChannel<MyServiceCallback>(); 
    } 

    public static void SendMessage(string name, string message) 
    { 
     Clients[name].SendMessage(message); 
    } 
} 

[ServiceContract] 
public interface MyServiceCallback 
{ 
    [OperationContract(IsOneWay = true)] 
    void SendMessage(string message); 
} 

工作一切良好,当应用程序池得到回收除外。

当然我认识到静态的东西在这方面并不理想。

哪里可以保存我的客户端引用,以便它们在应用程序池recyle中生存?

+0

你使用什么InstanceContextMode? –

+0

@parapurarajkumar我没有指定InstanceContextMode,所以我会使用默认值,它相信是InstanceContextMode.PerSession。 –

回答

0

我不认为你可以themn生存的应用程序池回收,因为对于你需要坚持并重新创建渠道...

一个更好的办法是恕我直言,承载您的WCF服务的Windows服务(没有应用程序池回收)这种东西...

相关问题