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中生存?
你使用什么InstanceContextMode? –
@parapurarajkumar我没有指定InstanceContextMode,所以我会使用默认值,它相信是InstanceContextMode.PerSession。 –