【发布时间】:2011-03-04 13:59:28
【问题描述】:
我在我的客户端应用程序中实现了一个 WCF 检查器,它使用大量的 Web 服务。
我使用这个检查器作为记录机制来记录从应用程序发送到这些 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 服务的名称吗? 或调用方法的名称?还是什么?
谢谢
【问题讨论】:
标签: c# wcf web-services logging