2011-09-26 7 views
4

비슷한 호출이 많고, 일부 웹 서비스에 병렬로 연결된 것일 수 있습니다. 상관 토큰 메커니즘을 구현하는 가장 좋은 방법이 무엇인지 궁금합니다.상관 토큰을 WCF 서비스에 전달 하시겠습니까?

아이디어는 클라이언트에서 서버로 단일 요청에 대한 정보를 나중에 특정 요청에 대한 로그를 얻는 데 도움이되는 식별자와 함께 기록하는 기능입니다.

각 작업마다 매개 변수를 추가하는 것을 피하고 싶습니다. 비즈니스가 아니라 배관이라고 생각하기 때문입니다.

추신 : 내 솔루션에서 클라이언트와 서버 측을 모두 제어하고 있습니다. 필요한 것은 무엇이든 바꿀 수 있습니다. 내 서비스는 .Net V4로 실행되며 log4net을 사용하여 로그를 작성합니다. Log4net은 필요한 경우 변경할 수있는 유틸리티 메서드입니다.

답변

3

요청 및 응답에 대한 정보 만 원하십니까? WS-Addressing으로 메시지 버전을 사용하는 경우 각 메시지에는 자동 생성 된 ID (guid)가 포함되어 있고 각 응답에는 요청의 ID도 포함되므로 자동으로 받아야합니다. 당신은 OperationContext을 통해 이러한 헤더에 액세스 할 수 있습니다

서버 측 :

UniqueId id = OperationContext.Current.IncomingMessageHeaders.MessageId; 

클라이언트 측 :

using (var scope = new OperationContextScope()) 
{ 
    // Do call to server and after that access headers 

    OperationContext context = OperationContext.Current; 
    UniqueId responseId = context.IncomingMessageHeaders.MessageId; 
    UniqueId requestId = context.IncomingMessageHeaders.RelatesTo; 
} 

는 WS-주소는 WsHttpBinding 또는 CustomBinding가에 올바른 MessageVersion를 사용하여 SOAP 서비스를 사용해야합니다을 사용하려면 TextMessageEncodingBindingElement.

동일한 클라이언트의 모든 요청에 ​​대해 상관 관계를 확인하려면 WCF 세션이 필요하며 세션 ID (OperationContext.Current.SessionId)를 사용하십시오.

+0

thx :) 이것은 내가하고 싶은 것입니다. 약간의 캡슐화 및 내 로그는이 ID로 피드됩니다. –

관련 문제