Как получить имя вызываемой операции в WCF Message Inspector

Я делаю инспектор сообщений в WCF:

public class LogMessageInspector :
    IDispatchMessageInspector, IClientMessageInspector

который реализует метод:

public object AfterReceiveRequest(ref Message request,
    IClientChannel channel, InstanceContext instanceContext)

Я могу получить имя вызываемой службы с помощью:

instanceContext.GetServiceInstance().GetType().Name

Но как мне получить имя вызываемой операции?

Ответы

Ответ 1

Это не очень, но это то, что я сделал, чтобы получить название операции:

var action = OperationContext.Current.IncomingMessageHeaders.Action;
var operationName = action.Substring(action.LastIndexOf("/", StringComparison.OrdinalIgnoreCase) + 1);

Ответ 2

var operationName = OperationContext.Current.IncomingMessageProperties["HttpOperationName"] as string;

Ответ 3

Этот подход аналогичен другим, представленным здесь, но использует Path.GetFileName:

Path.GetFileName(OperationContext.Current.IncomingMessageHeaders.Action);

Возвращаемое значение этого метода и формат строки path работают довольно гармонично в этом сценарии:

Символы после последнего символа каталога в пути. Если последний Характер пути - это каталог или разделитель томов, этот метод возвращает String.Empty. Если путь равен null, этот метод возвращает нуль.

Ответ 4

OperationContext.Current.IncomingMessageHeaders.Action.Split('/').ToList().Last();