0

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

アプリケーション プールがリサイクルされる場合を除いて、すべてが正常に機能します。

もちろん、その点で静的なものは理想的ではないことはわかっています。

アプリ プールのリサイクル後も存続するように、クライアント参照を保存するのに適した場所はどこですか?

4

1 に答える 1

0

チャネルを永続化して再作成する必要があるため、アプリプールのリサイクルを生き残ることができるとは思いません...

より良いアプローチは、この種のもののためにWindowsサービス(アプリプールのリサイクルなし)でWCFサービスをホストすることです...

于 2011-11-14T06:47:17.643 に答える