我有一个WCF REST休息服务,由Windows服务托管.它使用自定义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;
}
}
Run Code Online (Sandbox Code Playgroud)
但它抛出异常,因为在这种情况下上下文为空.我怎么解决这个问题?注意,大多数建议的asp.net兼容模式不是一个选项,我的服务由WIndows服务托管,而不是由IIS托管.
谢谢!
Min*_*bag -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;
}
}
Run Code Online (Sandbox Code Playgroud)