Получить имя операции в Инспекторе сообщений?

Я использую 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 при выполнении этого на стороне клиента.

5
задан Banshee 2 April 2012 в 09:45
поделиться