2011-11-14 94 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服務(沒有應用程序池回收)這種東西...

相關問題