18

私はWCFでメッセージインスペクターをやっています:

public class LogMessageInspector :
    IDispatchMessageInspector, IClientMessageInspector

メソッドを実装します:

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

呼び出されたサービスの名前を次のように取得できます。

instanceContext.GetServiceInstance().GetType().Name

しかし、呼び出された操作の名前を取得するにはどうすればよいでしょうか?

4

5 に答える 5

12

きれいではありませんが、これは私が操作名を取得するために行ったことです:

var action = OperationContext.Current.IncomingMessageHeaders.Action;
var operationName = action.Substring(action.LastIndexOf("/", StringComparison.OrdinalIgnoreCase) + 1);
于 2010-03-19T12:30:48.467 に答える
8
var operationName = OperationContext.Current.IncomingMessageProperties["HttpOperationName"] as string;
于 2011-03-01T03:31:23.600 に答える
4

このアプローチは、ここで紹介する他のアプローチと似ていますが、以下を使用しますPath.GetFileName

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

このメソッドの戻り値とpath文字列の形式は、このシナリオでは非常に調和して機能します。

パスの最後のディレクトリ文字の後の文字。path の最後の文字がディレクトリまたはボリュームの区切り文字である場合、このメソッドは String.Empty を返します。path が null の場合、このメソッドは null を返します。

于 2014-10-09T20:12:41.710 に答える
2
OperationContext.Current.IncomingMessageHeaders.Action.Split('/').ToList().Last();
于 2012-10-08T03:00:47.027 に答える