0

我使用 aPollingDuplexHttpBinding以便客户端可以在我的应用程序中交换消息。客户端是通过一种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);
}

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

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

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

4

1 回答 1

0

我不认为你可以让他们在应用程序池回收中幸存下来,因为为此你需要坚持并重新创建频道......

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

于 2011-11-14T06:47:17.643 回答