WCF客户端检查器获取它调用的Web服务的名称或调用方法名称或类型等

时间:2011-03-04 13:59:29

标签: c# wcf web-services logging

我在客户端应用程序中实现了一个消耗大量Web服务的WCF检查器。

我使用此检查器作为记录机制来记录从应用程序发送到这些Web服务的调用以及它们返回的响应。

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;
        }
    }

我的问题是我不知道调用什么Web服务。我想得到一些参考并记录下来。
这是唯一有效的request.Headers.Action方法,但它并不总是有效。大多数情况下,这是String.Empty。 OperationContext.Current为null,我理解在客户端是正常的。

是否有其他方法可以获取所调用的Web服务的名称? 或者调用方法的名称?还是什么?

谢谢

1 个答案:

答案 0 :(得分:1)

它适用于LogEntry.WebServiceIdentity = request.Headers.Action; 我犯了一个错误