我有一个WCF服务,提供对某些数据的访问.我们的客户要求限制此服务,以便给定用户只能在特定时间段内拨打这么多电话.我的想法是建立一个请求速率限制,并在超过该限制时对该IP地址发出临时禁止.
但是,似乎只有一种方法可以使用WCF获取调用者的IP:
var context = OperationContext.Current; var props = context.IncomingMessageProperties; var endpoint = props[RemoteEndpointMessageProperty.Name]; return ((RemoteEndpointMessageProperty)endpoint).Address;
这对我来说根本没用,因为RemoteEndpointMessageProperty是使用HttpContext的Request.UserHostAddress属性设置的.通常,这没关系,除了我们的Web服务位于负载均衡器后面,导致Request.UserHostAddress始终显示负载均衡器的IP,而不是原始调用者.
我知道使用X-Forwarded-For等,并且实际上已经在我们的负载均衡器上配置了,但是似乎没有任何方法可以挂钩到http请求来访问标题而不是设置WCF服务以ASP.NET兼容模式运行.这真的是我唯一的选择吗?