В моем клиентском приложении реализован инспектор 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, которое, как я понимаю, является нормальным для клиентской стороны.
Есть ли другой способ получить название веб-службы, которая называется?
или имя вызывающего метода? или что?
Спасибо