У меня есть веб-сервис ASMX, работающий под IIS7 в классическом режиме. Эта услуга имеет следующий код:
try
{
env.ExternalIP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
catch (Exception ex)
{
LogWriter.WriteError(ex);
env.ExternalIP="000.000.000.000";
}
Это приводит к следующей трассировке стека. Я только изменил имена стека вызовов кода пользователя, чтобы защитить невинных:
Message: An Exception of type: NullReferenceException occured in method: GetAdditionalServerVar
ExceptionMsg: Object reference not set to an instance of an object.
===Stack Trace===
at System.Web.Hosting.ISAPIWorkerRequestInProc.GetAdditionalServerVar(Int32 index)
at System.Web.Hosting.ISAPIWorkerRequestInProc.GetServerVariable(String name)
at System.Web.HttpRequest.AddServerVariableToCollection(String name)
at System.Web.HttpRequest.FillInServerVariablesCollection()
at System.Web.HttpServerVarsCollection.Populate()
at System.Web.HttpServerVarsCollection.Get(String name)
at System.Collections.Specialized.NameValueCollection.get_Item(String name)
at MyService.MyMethod()
Я в недоумении, потому что это очень простой простой ванильный код.
EDIT
Это становится еще более странным. Я добавил немного базового кода, просто интересно, какие переменные сервера я могу получить на этом этапе. Это происходит с тем же исключением, когда я пытаюсь получить все ключи:
System.NullReferenceException: объект
ссылка не установлена на экземпляр
объект. в
System.Web.Hosting.ISAPIWorkerRequestInProc.GetAdditionalServerVar (Int32
индекс) в
System.Web.Hosting.ISAPIWorkerRequestInProc.GetServerVariable (String
имя) в
System.Web.HttpRequest.AddServerVariableToCollection (String
имя) в
System.Web.HttpRequest.FillInServerVariablesCollection ()
в
System.Web.HttpServerVarsCollection.Populate ()
в
System.Web.HttpServerVarsCollection.get_AllKeys ()
в MyService.MyHelper ()
Когда я смотрел на код фреймворка, это могло произойти, когда массив, который кэширует переменные сервера, не заполнен, и похоже, что это происходит, когда есть нулевой указатель на некоторый контекст ... что выглядит довольно основной кусок кода структуры.
Полагаю, пришло время сжечь одну из наших заявок в службу поддержки с Microsoft.