我有一個WCF服務,它提供對某些數據的訪問。我們的客戶要求限制這項服務,以便給定用戶在特定時間內只能撥打這麼多電話。我的想法是建立一個請求速率限制,並在該IP地址超過限制時暫時禁止該IP地址。使用客戶端IP地址的WCF安全性
然而,似乎只有一種方式使用WCF獲得致電者的IP:
var context = OperationContext.Current;
var props = context.IncomingMessageProperties;
var endpoint = props[RemoteEndpointMessageProperty.Name];
return ((RemoteEndpointMessageProperty)endpoint).Address;
,因爲在所有的RemoteEndpointMessageProperty使用的的Request.UserHostAddress屬性的HttpContext設置這對我來說並不實用根據它被服務。通常情況下,沒關係,除非我們的Web服務位於負載平衡器後面,這會導致Request.UserHostAddress始終顯示負載平衡器的IP,而不是原始調用方。
我知道如何使用X-Forwarded-For等,並且實際上已經在我們的負載平衡器上配置了它,但似乎沒有任何方法可以掛鉤http請求來訪問標題設置WCF服務在ASP.NET兼容模式下運行。這真的是我唯一的選擇嗎?
最終,這個答案是有效的,所以我接受它,但.NET 3.5和更高版本添加了一個WebOperationContext類到System.ServiceModel.Web命名空間,這使得這更容易一些。 – Chris 2010-10-15 16:12:53
是的,但是這個解決方案對於所有基於Http的綁定是通用的。 WebOperationContext只能用於REST服務(在WebHttpBinding上公開)。 – 2010-10-15 17:31:53