내가 가장이 만들어진 후 서비스 리스너 (들)에 새 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의 경우 호스트가 열린 상태로 전환 된 후에 예외가 발생하기 때문에 제안 된 방법이 작동하지 않습니다 –