Я внедрил IClientMessageInspector
, чтобы «перехватить» исходящий вызов веб-службы в моем приложении. Можно ли узнать, какая операция вызывается изнутри BeforeSendRequest
и AfterReceiveReply
?Как получить имя вызываемой операции в IClientMessageInspector?
Здесь есть аналогичный вопрос: How do i get the invoked operation name within a WCF Message Inspector, который предназначен для серверной части (сторона, получающая запрос). Я попытался сделать что-то подобное, например.
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
var v = OperationContext.Current.OutgoingMessageProperties["HttpOperationName"];
return null;
}
public void AfterReceiveReply(ref Message reply, object correlationState)
{
var v = OperationContext.Current.OutgoingMessageProperties["HttpOperationName"];
}
но во время исходящего запроса, кажется, что OperationContext.Current имеет нулевое значение, поэтому я не могу использовать это. Любая идея, как его получить? Любая идея, как сделать это чисто (в отличие, скажем, разобрать SOAP xml)?
Это трудно, потому что вы так низко в стеке клиента, что информация вам действительно нужно обернуть объект сообщения. Вы могли бы использовать другого инспектора? Например, для каждой операции применяется IParameterInspector и поэтому является прямым. Это также позволит избежать связывания определенных решений, таких как HTTPOperationName. – ErnieL
Как будет работать контролер параметров? –