2013-02-18 6 views
2

Мне нужно ограничить доступ к статическим файлам HTML в нескольких приложениях ASP.NET. Поскольку эти приложения реализуют свои собственные механизмы аутентификации, похоже, мне нужно просто, чтобы эти файлы проходили через конвейер обработки запросов ASP.NET, а не «стандартную» статическую обработку содержимого IIS. Некоторые из приложений являются относительно современными приложениями ASP.NET MVC и используют интегрированный конвейер на IIS 7.5, и похоже, что для них не очень важно делать то, что мне нужно. Но другие - это устаревшие веб-сайты ASP.NET, работающие в режиме классического конвейера (IIS 7.5), и на данный момент невозможно поместить их в интегрированный конвейер по определенным причинам.Как ограничить доступ к статическим файлам в IIS 7.5 Классический режим

UPD: Проблема в том, что приложения содержат некоторые статические файлы (страницы справки), а неавторизованный пользователь может их видеть, если они набирают прямой URL. И моя задача - сделать приложение показателем страницы входа в таком случае.

Добавление обработчика в Web.config:

<add name="StaticHTMLHandler" path="*.htm*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" preCondition="classicMode,runtimeVersionv4.0,bitness32" /> 

вызвал меня только, чтобы получить это исключение:

[HttpException (0x80004005): Failed to Execute URL] 
    System.Web.Hosting.ISAPIWorkerRequestInProcForIIS6.BeginExecuteUrl(String url, String method, String childHeaders, Boolean sendHeaders, Boolean addUserIndo, IntPtr token, String name, String authType, Byte[] entity, AsyncCallback cb, Object state) +4136452 
    System.Web.HttpResponse.BeginExecuteUrlForEntireResponse(String pathOverride, NameValueCollection requestHeaders, AsyncCallback cb, Object state) +653 
    System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state) +279 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +12551795 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288 

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

ответ

0

Я никогда не пробовал ваши методы, но у меня также есть FW 1.1, классический asp. и современные веб-приложения, смешанные на моих веб-серверах. То, что я делаю, это создание отдельного пула приложений для каждого фреймворка. Я запускаю 1.1 в 1.1 пуле приложений классического режима, который я создаю, и запускаю современные приложения в другом пуле приложений: интегрированный fw 4.0. Классический материал asp выходит за рамки этого вопроса. Каждый пул приложений - это собственный процесс, поэтому нет никакого реального недостатка в использовании большего количества пулов приложений, 1 пул приложений для каждого приложения является вполне приемлемой политикой безопасности, например.

+0

Несомненно, все наши приложения используют свои собственные пулы приложений - по одному на приложение, поэтому они запускаются в разных процессах. Проблема в том, что приложения содержат некоторые статические файлы (страницы справки), а неавторизованный пользователь может их видеть, если они набирают прямой URL. И моя задача - сделать приложение показателем страницы входа в таком случае. –