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);
}
アプリケーション プールがリサイクルされる場合を除いて、すべてが正常に機能します。
もちろん、その点で静的なものは理想的ではないことはわかっています。
アプリ プールのリサイクル後も存続するように、クライアント参照を保存するのに適した場所はどこですか?