У нас есть служба 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 не предоставляет их изначально, к сожалению).