Настройка IIS7 для сервера как DLL-библиотеки ISAPI с подстановочными знаками, так и статических файлов

У меня есть ISAPI DLL, настроенная в IIS для сопоставления с подстановочными знаками. Когда URL-адрес запроса соответствует статическому файлу, я хочу, чтобы StaticFileModule IIS обслуживал этот файл. Когда файл не существует, я хочу, чтобы ISAPI DLL обработала его.

Раздел обработчиков моего файла web.config, расположенный в корне иерархии статических файлов, выглядит так ...

<handlers accessPolicy="Read, Script">
    <clear />
        <add name="SomeIsapiDll" path="*" verb="*" type="" 
            modules="IsapiModule" scriptProcessor="C:\my_site\some_isapi.dll" 
            resourceType="Unspecified" requireAccess="None" allowPathInfo="false" 
            preCondition="" responseBufferLimit="4194304" />
        <add name="StaticFile" path="*" verb="*" type="" 
            modules="StaticFileModule,DefaultDocumentModule" scriptProcessor="" 
            resourceType="Unspecified" requireAccess="None" allowPathInfo="false" 
            preCondition="" responseBufferLimit="4194304" />
</handlers>

Это работает для запросов, предназначенных для ISAPI DLL, но статические файлы возвращаются как 404. Если я изменю порядок, я просто получаю пустые страницы без содержимого для любых запросов. Если я удалю ISAPI DLL из web.config, статические файлы обслуживаются правильно, но, конечно, запросы ISAPI не обслуживаются.

Я понимаю, что каскадные обработчики подстановочных знаков должны работать, но документы Microsoft, которые я могу найти, очень расплывчаты о том, как это сделать. Возможно, это либо проблема конфигурации, либо проблема с реализацией ISAPI DLL, но на данный момент я понятия не имею. Мысли?


person David Anderson    schedule 06.06.2009    source источник


Ответы (1)


У нас была та же проблема, но мы просто добавили следующее:

<add name="aspnet_isapi 32-bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv2.0,bitness32" />

<add name="aspnet_isapi 64-bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
person Ethan    schedule 02.07.2009
comment
Это полностью решило мою проблему с Vista 64bit. Спасибо! - person YeahStu; 30.09.2009