WCF で呼び出されたサービスのメソッド名とクライアントのIPアドレスを OperationContext から取得するメモ

OperationContext の IncomingMessageHeaders や IncomingMessageProperties から取り出せる。 でもこれくらいはプロパティで用意しておいて欲しいな。

public static class OperationContextExtensions
{
    // 実行中のサービスのオペレーション名を取得
    public static string GetOperationName(this OperationContext operationContext)
    {
        var action = operationContext.IncomingMessageHeaders.Action;
        var operationName = action.Substring(action.LastIndexOf("/", StringComparison.OrdinalIgnoreCase) + 1);
        return operationName;
    }

    // クライアントの IP アドレスを取得
    public static string GetClientIPAddress(this OperationContext operationContext)
    {
        var messageKey = RemoteEndpointMessageProperty.Name;
        if (operationContext.IncomingMessageProperties.ContainsKey(messageKey))
        {
            var message = operationContext.IncomingMessageProperties[messageKey] as RemoteEndpointMessageProperty;
            if (message != null)
            {
                return message.Address;
            }
        }
        return string.Empty;
    }
}