2012-01-08 4 views
1

В событии Application_Start в файле global.asax.cs я добавил код инициализации. Этот код запускается в порожденной нитью (созданной с использованием новой Thread()). Код инициализации использует Server.MapPath для получения физического пути к файлу. Однако много раз я получаю сообщение об ошибке в файлах журнала: Работа с сервером недоступна в этом контексте В любом случае я уловил исключение. Инициализация не является критичной, так как даже если это не удастся, это не будет проблемой для меня. Мой вопрос:Server.MapPath in Global.asax

  1. Почему я получаю сообщение об ошибке «Сервер недоступен»?
  2. Может ли обработать Исключение вызывает любые проблемы, такие как Недействительный ViewState во время нормального выполнения приложения. Мы заметили много из них - Недействительный ViewState позже в журналах. Я считаю, что это невозможно. Пожалуйста, поправьте меня, если я ошибаюсь.

Благодаря

Викас

ответ

1

объект сервера ссылаются с помощью HttpContext.Current т.е. относительно текущего запроса. Я подозреваю, что он недоступен от Application_Start, так как в этот момент нет запроса. Независимо от того, что он не будет надежно доступен из отдельного потока, потому что потоки выполняются независимо друг от друга, поэтому любой запрос может быть запущен или закончен, прежде чем ваш поток попытается получить к нему доступ.

Попробуйте использовать HostingEnvironment.MapPath() вместо этого, поскольку это статический метод.

+0

Да, я согласился с этим. Когда вы создаете новый поток в пуле приложений, вы не можете использовать HttpContext.Current, потому что он в другом контексте. – springchun

Смежные вопросы