Я использую IClientMessageInspector
для входа/выхода сообщений, но проблема в том, что я не могу найти, как получить имя операции из AfterReceivedReply
и BeforeSendRequest
.
Я протестировал следующее:
if ((action = reply.Headers.Action.Split('/').LastOrDefault()) != null)
{
callInformation.Action = action;
callInformation.Address = reply.Headers.Action.Replace(action, "");
}
Это прекрасно работает в BeforeSendRequest
, но в AfterReveivedReply
возвращает что-то другое, часто с «Ответом». в конце?
Как в этих методах получить только название операции?
Допустим, моя операция называется MyOperation
и атрибут OperationContract
указывает action = "MyOpeation"
(ошибочное написание). Результатом этого является то, что MyOpeation
будет извлечено в BeforeSendRequest
, а AfterReceiveReply
вернет MyOperationResponse
.
Таким образом, BeforeSendRequest
будет извлекать указанное действие в атрибуте, а AfterReceiveReply
будет извлекать реальное имя операции, но с добавлением "Response"на конец?
Важно иметь возможность сопоставлять входящие и исходящие сообщения, и единственный способ сделать это, насколько я понимаю, — это сопоставить имена операций, но если это невозможно, то я не вижу хорошего решения для этого?
Я видел решение при использовании OperationContext.Current.IncomingMessageHeaders.Action, но OperationContect.Current имеет значение null при выполнении этого на стороне клиента.