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