IHttpAsyncHandler вызывает исключение UnathorizedAccessException - PullRequest
0 голосов
/ 23 декабря 2009

В последние пару дней моих рождественских праздников я боролся с UnathorizedAccessException при попытке СЧИТАТЬ XML-файл на удаленном общем ресурсе через приложение ASP.NET, используя реализацию IHttpAsyncHandler долго с IRequiresSessionState.

После большой головной боли и заключения о том, что обработчик вне кода работал безупречно (см. Доступ предоставлен), я подумал, что это может быть проблема с многопоточностью, поэтому я изменил IHttpAsyncHandler на IHttpHandler, и проблема исчезла.

Меня беспокоит то, что для целей тестирования я фактически не использовал реализацию IHttpAsyncHandler (следовательно, я не использовал BeginProcessRequest и EndProcessRequest - только версия sync. ProcessRequest.

Может кто-нибудь попытаться объяснить возникшую проблему?

Существуют некоторые полезные вопросы при использовании обработчика в асинхронном режиме, так как я могу предварительно кэшировать значения, которые будут доставлены позже в приложении, но для этого мне придется пройти мимо проблем безопасности, которые, кажется, проявляются только тогда, когда реализации IHttpAsyncHandler.

Заранее спасибо за вашу помощь - и счастливых праздников: -)

1 Ответ

1 голос
/ 23 декабря 2009

Инфраструктура ASP.NET вызывает асинхронный обработчик по-разному (независимо от того, действительно ли impl является асинхронным). Возможно ли, что вы использовали олицетворение для доступа к сетевому ресурсу? Я полагаю, что необходимая WindowsIdentity не передавалась в поток пула потоков, который фактически обрабатывал запрос (я никогда не пытался использовать обработчик impersonation + async, но в прошлом я сталкивался с другими проблемами потока состояний потоков).

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

...