PollingDuplexHttpBinding и повторение пулов приложений - PullRequest
0 голосов
/ 14 ноября 2011

Я использую 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);
}

Все работает хорошо, кроме случаев, когда пул приложений перерабатывается.

Конечно, я понимаю, что статичные вещи не идеальны в этом отношении.

Где было бы хорошее место для сохранения моих ссылок на клиентов, чтобы они пережили повторный пул приложений?

1 Ответ

0 голосов
/ 14 ноября 2011

Я не думаю, что вы сможете заставить их пережить перезапуск пула приложений, поскольку для этого вам нужно будет сохранить и воссоздать каналы ...

Лучшим подходом было бы IMHO разместить службу WCF вслужба Windows (без утилизации пула приложений) для такого рода вещей ...

...