0
PollingDuplexHttpBinding
を使用して、クライアントがアプリケーションでメッセージを交換できるようにします。 クライアントは、RegisterClient()
メソッドを介して登録され、将来の使用のために静的辞書に追加されます。PollingDuplexHttpBindingとアプリケーションプールのリサイクル
コードは次のようになります。
[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);
}
すべてがアプリケーションプールをリサイクルする場合を除きますよく働きます。
もちろん、私は静的なものはその点で理想的ではないことを認識しています。
私はクライアントのリファレンスを保存して、アプリプールのrecyleから生き残ることができる場所はどこですか?
どのInstanceContextModeを使用していますか? –
@parapurarajkumar私はInstanceContextModeを指定していないので、InstanceContextMode.PerSessionというデフォルト値を使用します。 –