は、私はあなたが最高の彼らが作成された後、サービスリスナー(複数可)に新しい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());
あなたはセッションごとのインスタンス・モードを使用しているので、あなたはそれぞれの新しいセッションのために作成された新しいチャネル、クライアントが接続する最初の時間を取得します。チャネルディスパッチャは、新しく作成されたチャネルを取得し、特定のサービスオブジェクトインスタンス(アドレスマッチングなど)に関連付けるオブジェクトです。サービスがそれに接続される前に、新しい初期化子を新しいチャンネルで実行します。
ありがとう!それは私の質問にちょうど答えます – galets
追加情報については、http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/14/wcf-extensibility-initializers-instance-context-channel-call-contextを参照してください。 aspx 特にWCF 4.0の場合、ホストが開いた状態に遷移した後で例外がスローされるため、提案された方法は機能しません –