如何在WCF消息检查器中获取调用的操作名称

16 wcf operation idispatchmessageinspector c#-3.0

我正在WCF中做一个消息检查器:

public class LogMessageInspector :
    IDispatchMessageInspector, IClientMessageInspector
Run Code Online (Sandbox Code Playgroud)

实现方法:

public object AfterReceiveRequest(ref Message request,
    IClientChannel channel, InstanceContext instanceContext)
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令获取调用服务的名称:

instanceContext.GetServiceInstance().GetType().Name
Run Code Online (Sandbox Code Playgroud)

但是如何获取调用操作的名称?

Ken*_*art 11

它不漂亮,但这是我为获取操作名称所做的:

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

  • 在我的例子中,“Operation.Current”为 null,如果您通过 Message 对象从参数中检索操作,则它会起作用:“System.ServiceModel.Channels.Message request”...“request.Headers.Action”。 (2认同)

小智 8

var operationName = OperationContext.Current.IncomingMessageProperties["HttpOperationName"] as string;
Run Code Online (Sandbox Code Playgroud)