5

Windows サービスによってホストされている WCF REST レスト サービスがあります。カスタム UserNamePasswordValidator 認証を使用します。

認証時にクライアントの IP アドレスを取得したい:

ublic static string GetClientIPAddress()
    {
        try
        {
            var context = OperationContext.Current;
            var prop = context.IncomingMessageProperties;
            var endpoint = prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
            return endpoint.Address;
        }
        catch (System.Exception exc)
        {
            Debug.Assert(false,exc.Message);
            return string.Empty;
        }
    }

ただし、その場合は context が null であるため、例外がスローされます。どうすればこれを解決できますか? ほとんどが提案されている asp.net 互換モードはオプションではないことに注意してください。私のサービスは、IIS ではなく、Windows サービスによってホストされています。

ありがとう!

4

1 に答える 1

-1

ちょっとうまくいくはずの解決策を試してください。

private string GetClientIp(HttpRequestMessage request)
{
    if (request.Properties.ContainsKey("MS_HttpContext"))
    {
        return ((HttpContextWrapper)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
    }
    else if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name))
    {
        RemoteEndpointMessageProperty prop;
        prop = (RemoteEndpointMessageProperty)this.Request.Properties[RemoteEndpointMessageProperty.Name];
        return prop.Address;
    }
    else
    {
        return null;
    }
}
于 2013-04-26T13:56:34.107 に答える