阅读来电者';WCF中的s IP地址(OperationContext为空)?

阅读来电者';WCF中的s IP地址(OperationContext为空)?,wcf,validation,Wcf,Validation,我正在使用UserNamePasswordValidator.Validate(字符串用户名、字符串密码)验证用户,并且服务正在承载自身(例如,没有IIS) 我遇到的问题是,如果用户验证失败,我希望跟踪用户的IP地址。当用户得到验证时,这可以正常工作,因为OperationContext已经初始化(在validate方法中为null,直到稍后才会创建) 是否有人知道如何在validate方法中或在validate方法执行之前获取客户端IP地址 是的,我知道如何使用RemoteEndpointMe

我正在使用UserNamePasswordValidator.Validate(字符串用户名、字符串密码)验证用户,并且服务正在承载自身(例如,没有IIS)

我遇到的问题是,如果用户验证失败,我希望跟踪用户的IP地址。当用户得到验证时,这可以正常工作,因为OperationContext已经初始化(在validate方法中为null,直到稍后才会创建)

是否有人知道如何在validate方法中或在validate方法执行之前获取客户端IP地址


是的,我知道如何使用RemoteEndpointMessageProperty获取IP地址,但正如我所说的,如果验证失败,它永远不会有那么大的作用:-)

我整个星期都在研究这个问题,但我找不到一个博客条目或MSDN文章来处理这个问题

据我所知,您不能在验证阶段记录IP地址


我能建议的唯一解决办法是在IIS中托管并使用那里的日志,这些日志不记录IP地址。不幸的是,这很痛苦,但这可能是唯一的方法。

如果您在IIS中托管,那么这就变得简单多了。这个配置块直接来自我的托管web项目,并强制ASP.NET请求通过IIS管道发送,而不是直接发送到IIS的ASP错误位

aspNetCompatibilityEnabled:当此属性设置为 对Windows通信基础(WCF)服务的请求 流通过ASP.NET HTTP管道,并通过 禁止使用非HTTP协议

见:



我使用AuthenticationService并利用HttpContext获取有关客户端的所有有趣信息,其中很多信息对于确保用户不是从六个不同的子网登录以及玩cookie等方面非常有用

虽然我认为这适用于MS AuthenticationService,但您拥有的任何其他服务都需要此属性:

[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]

如果您想继续使用非IIS托管的服务路由,那么我将使用反射查看MS API中的可用内容,在停止时使用调试器在WCF上四处搜索,展开所有非公共成员

我想问题是获取一个对一个WCF的引用,这个WCF是初始化的,从这个WCF开始戳。在设置服务主机时,可能必须向其中一个分派器注册某种侦听器

编辑:

添加此链接是因为我的想法是,在WCF进入代码之前,您需要了解WCF中的内容:


我也有同样的问题,我的研究结果是零。我认为这可能是不可能的(我在基于basicHttpBinding的SOAP web服务中尝试了此选项,但仍然发现UserNamePasswordValidator.Validate()方法中的OperationContext.Current为null。“我使用AuthenticationService并利用HttpContext获取有关客户端的所有有趣信息”--也就是说,一旦设置了ASP.NET兼容性,就可以像在网站中一样使用HttpContext.Current。记住问题是“如何读取调用方的IP地址”
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />