【问题标题】:PollingDuplexHttpBinding and app pool recyclesPollingDuplexHttpBinding 和应用程序池回收
【发布时间】:2011-11-14 06:40:32
【问题描述】:

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

代码如下所示:

[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);
}

除非应用程序池被回收,否则一切正常。

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

哪里是保存我的客户参考资料的好地方,以便他们在应用程序池回收中幸存下来?

【问题讨论】:

  • 你使用的是什么 InstanceContextMode ?
  • @parapurarajkumar 我没有指定InstanceContextMode,所以我会使用默认值,相信是InstanceContextMode.PerSession。

标签: c# asp.net .net iis-7 pollingduplexhttpbinding


【解决方案1】:

我认为您无法让它们在应用程序池回收利用中幸存下来,因为为此您需要坚持并重新创建频道...

恕我直言,更好的方法是在 Windows 服务中托管您的 WCF 服务(无应用程序池回收),用于此类内容...

【讨论】:

    猜你喜欢
    • 2015-01-07
    • 2011-09-20
    • 2016-06-13
    • 2012-02-05
    • 2011-08-31
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 2011-03-06
    相关资源
    最近更新 更多