У меня есть служба WCF, которая предоставляет доступ к некоторым данным. Наш клиент попросил ограничить эту услугу таким образом, чтобы данный пользователь мог совершать столько звонков только в течение определенного периода времени. Я хотел установить ограничение скорости запросов и временно запретить этот IP-адрес, если он превысил этот предел.
Однако, как представляется, существует только один способ получить IP-адрес вызывающего абонента с помощью WCF:
var context = OperationContext.Current;
var props = context.IncomingMessageProperties;
var endpoint = props[RemoteEndpointMessageProperty.Name];
return ((RemoteEndpointMessageProperty)endpoint).Address;
Это совершенно бесполезно для меня, потому что RemoteEndpointMessageProperty устанавливается с помощью свойства Request.UserHostAddress HttpContext, в котором он обслуживается. Обычно это было бы хорошо, за исключением того, что наши веб-службы работают за балансировщиком нагрузки, в результате чего Request.UserHostAddress всегда показывает IP-адрес балансировщика нагрузки, а не исходный вызывающий объект.
Я знаю об использовании X-Forwarded-For и тому подобном, и на самом деле уже настроил это на нашем балансировщике нагрузки, но, похоже, у меня нет никакого способа подключиться к http-запросу, чтобы получить доступ к заголовкам за исключением настройка службы WCF для работы в режиме совместимости ASP.NET. Это ДЕЙСТВИТЕЛЬНО мой единственный вариант?