我在客户端应用程序中实现了一个消耗大量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服务的名称? 或者调用方法的名称?还是什么?
谢谢
答案 0 :(得分:1)
它适用于LogEntry.WebServiceIdentity = request.Headers.Action; 我犯了一个错误