Я использую 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);
}
Все работает хорошо, кроме случаев, когда пул приложений перерабатывается.
Конечно, я понимаю, что статичные вещи не идеальны в этом отношении.
Где было бы хорошее место для сохранения моих ссылок на клиентов, чтобы они пережили повторный пул приложений?