У нас есть службы WCF (.NET 3.5 SP1) работает в IIS7, который помечен, чтобы режим совместимости с ASP.NET, поэтому мы можем получить доступ к HttpContext.Current
:HttpRequest.ServerVariables бросает ArgumentException в WCF с IIS7
[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 изначально, к сожалению).
Я просто ударил эту стену. Так много для атрибута IsOneWay. :( –
Спасибо, Грег, вы спасли меня несколько часов. – patelsan
есть способ обнаружить это, так что я могу избежать использования серверных переменных? – user230910