2009-04-02 4 views
12

新しいクライアントがWCFホストサービスに接続したときにイベントを発生させるにはどうすればよいですか?クライアントがWCFホストエンドポイントに接続するとイベントが発生する

EDIT:新しいセッションが作成されるか、クライアント用に新しいチャンネルが作成されたときにイベントを取得します。そのような:セッション閉鎖私は使用しています:

OperationContext.Current.Channel.Closed += new EventHandler(Channel_Closed); 

私はセッションiitiationのために何を使用する必要がありますか?

答えて

5

は、私はあなたが最高の彼らが作成された後、サービスリスナー(複数可)に新しいchannel initializerを追加することによって行われる達成しようとしているものと思います。

基本的に、そのインターフェイスを実装するクラスを作成してから、サービスホストに追加します。あなたはセルフホスティングしている場合は、これは非常に単純です:

public class MyHook : IChannelInitializer 
{ 
    public void Initialize(IClientChannel channel) 
    { 
    // Do whatever. 
    } 
} 

var host = new ServiceHost(typeof(MyService), MYBASEADDRESS); 
host.AddServiceEndpoint(typeof(IMyService), new WSHttpBinding(), MYSERVICEADDRESS); 
host.Open(); 

// There will be one per endpoint; you can enumerate them if needed etc. 
var dispatcher = host.ChannelDispatchers[0] as ChannelDispatcher; 
dispatcher.ChannelInitializers.Add(new MyHook()); 

あなたはセッションごとのインスタンス・モードを使用しているので、あなたはそれぞれの新しいセッションのために作成された新しいチャネル、クライアントが接続する最初の時間を取得します。チャネルディスパッチャは、新しく作成されたチャネルを取得し、特定のサービスオブジェクトインスタンス(アドレスマッチングなど)に関連付けるオブジェクトです。サービスがそれに接続される前に、新しい初期化子を新しいチャンネルで実行します。

+0

ありがとう!それは私の質問にちょうど答えます – galets

+0

追加情報については、http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/14/wcf-extensibility-initializers-instance-context-channel-call-contextを参照してください。 aspx 特にWCF 4.0の場合、ホストが開いた状態に遷移した後で例外がスローされるため、提案された方法は機能しません –

0

あなたの設定によりますが、 "通話ごとの"会話はありますか?それで、あなたは本当に "クライアントが今接続されました"というメッセージを得ることはありません。

セッションベースの会話はしますか?あなたの "ServiceHost"クラスには2つのイベント "Opening"と "Opened"があります。

このイベントをトラップすることで、正確に達成したいことは何ですか?

マークは

+2

セッションベース。サービスホストは、サービスホストの起動時にOpenedイベントを発生させます。たとえば、host.Open()呼び出しで、新しいクライアントが接続するときではありません。 – galets

+1

InstanceContextMode.Singleの場合は何かアドバイスがありますか? – arconaut

関連する問題