2011-11-14 12 views
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から生き残ることができる場所はどこですか?

+0

どのInstanceContextModeを使用していますか? –

+0

@parapurarajkumar私はInstanceContextModeを指定していないので、InstanceContextMode.PerSessionというデフォルト値を使用します。 –

答えて

0

私はあなたがそのためにあなたがチャンネルを持続し、再作成する必要がありますので、アプリケーションプールのリサイクルを生き残るthemn作ることができるとは思わない...

より良いアプローチはであなたのWCFサービスをホストするIMHOだろうこの種のもののためのWindowsサービス(アプリケーションプールリサイクルなし)...

関連する問題