2011-03-04 2 views
1

수많은 웹 서비스를 사용하는 클라이언트 응용 프로그램에서 WCF 관리자를 구현했습니다.WCF 클라이언트 관리자는 호출하는 웹 서비스의 이름 또는 메서드 이름 또는 형식 또는 메서드를 호출합니다.

저는이 검사기를 로깅 메커니즘으로 사용하여 응용 프로그램에서 전송 된 호출을 웹 서비스 및 응답에 대한 응답으로 기록합니다.

public class WcfClientInterceptor : IClientMessageInspector 
    { 

     protected static readonly ILog log4net = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

     private static readonly IMessageLogger Logger = new Log4NetLogger(); 

     private MessageLogEntry LogEntry;// = new MessageLogEntry(); 

     public void AfterReceiveReply(ref Message reply, object correlationState) 
     { 

      if (Logger.IsLogEnabled) 
      { 
       LogEntry.ResponseBody = reply.ToString(); 
       Logger.Log(LogEntry); 
      } 
     } 

     public object BeforeSendRequest(ref Message request, IClientChannel channel) 
     { 
      if (Logger.IsLogEnabled) 
      { 
       LogEntry = LogEntry ?? new MessageLogEntry(); 
       //instanceContext.GetServiceInstance().GetType().Name 
       //LogEntry.WebServiceIdentity = request.Headers.Action; 
       LogEntry.WebServiceIdentity = OperationContext.Current.IncomingMessageHeaders.Action; 
       LogEntry.RequestBody = request.ToString(); 
      } 
      return null; 
     } 
    } 

내 문제는 어떤 웹 서비스가 호출되는지 알 수 없다는 것입니다. 나는 그 (것)들에 어떤 종류의 참고를 얻고 그것을 기록하고 싶다.
이것은 request.Headers.Action하지만 작동하지 않는 유일한 방법입니다. 대부분이 시간은 String.Empty입니다. OperationContext.Current는 클라이언트 측에서 정상적으로 이해되는 null입니다.

호출되는 webservice의 이름을 가져 오는 다른 방법이 있습니까? 또는 호출하는 메소드의 이름? 또는 뭔가?

감사합니다

답변

1
이 LogEntry.WebServiceIdentity = request.Headers.Action 작동

; 실수를했습니다.

관련 문제