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