2010-12-28 6 views
3

실행중인 서비스의 모든 끝점에 메시지 관리자를 자동으로 추가하기 위해 사용하려는 사용자 지정 ServiceHost를 만들었습니다. 나는 IDispatchMessageInspector 및 IClientMessageInspector를 구현하고 모든 엔드 포인트에 추가하도록되어 다음과 같은 코드를 발견하셨습니까 MessageInspector을 만들었습니다런타임에 WCF 메시지 검사기 추가

foreach (ChannelDispatcher channel in this.ChannelDispatchers) { 
    foreach (EndpointDispatcher endpoint in channel.Endpoints) { 
     endpoint.DispatchRuntime.MessageInspectors.Add(new MyMessageInspector()); 
    } 
} 

내가으로 실행하는 문제는 ServiceHost를 열 때까지 ChannelDispatchers 모음이 비어 있다는 것입니다 이것은 생성자에서이 코드를 실행할 수 없음을 의미합니다. 나는 오픈 이벤트에 대한 이벤트 처리기를 만들어 거기 대신에 그 코드를 사용하지만 그때 엔드 포인트를 추가하려고 다음과 같은 오류가 발생합니다 :

This value cannot be changed after a ServiceHost has been opened 

나는 캐치의 어떤 종류에 걸려 있어요 보인다 22, WCF 내에서 가능한 기능을 찾고 있습니까?

감사, 서비스 엔드 포인트에 메시지 관리자를 추가하려면

답변

3

마이크, 이것은 IServiceBehavior, 또는 IEndpointBehavior 중 하나를 구현하여 수행해야합니다. 사용 종료 된 ServiceBehavior의 경우 위의 코드를 IServiceBehavior의 ApplyDispatch() 메서드에 넣었습니다. BehaviorExtensionElement를 생성하여 구성을 통해 할 수는 있지만, 필자는 ServiceHost에 명령을 추가했습니다.