HttpRequest.ServerVariables создает исключение ArgumentException в WCF с IIS7 - PullRequest
5 голосов
/ 16 марта 2009

У нас есть служба WCF (.NET 3.5 SP1), работающая в IIS7, которая помечена как разрешающая режим совместимости с ASP.NET, чтобы мы могли получить доступ к HttpContext.Current:

[AspNetCompatibilityRequirements(
    RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

Однако при попытке доступа к любой серверной переменной выдается ArgumentException:

System.ArgumentException: Value does not fall within the expected range. 
    at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) 
    at System.Web.Hosting.IIS7WorkerRequest.GetServerVariableInternal(String name) 
    at System.Web.Hosting.IIS7WorkerRequest.GetServerVariable(String name) 
    at System.Web.Hosting.IIS7WorkerRequest.GetRemoteAddress() 
    at System.Web.HttpRequest.get_UserHostAddress() 

например. Любая из следующих строк выдает это исключение:

ha = HttpContext.Current.Request.UserHostAddress;
ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
us = HttpContext.Current.Request.UserAgent;

Это, кажется, результат внутреннего вызова структуры, что означает, что вызывающий код не виноват.

Предположительно, есть что-то в нашей конфигурации, что вызывает эту проблему, но я не знаю что. Есть идеи? Или какие-нибудь идеи, как еще я могу получить эти три бита данных (к сожалению, WCF не предоставляет их изначально, к сожалению).

1 Ответ

14 голосов
/ 16 марта 2009

Оказывается, проблема в том, что операция помечена ...

[OperationContract(IsOneWay = true)]

... и переменные сервера недоступны в односторонних операциях.

Позор, исключение ничего не говорит об этом ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...