Возникла следующая проблема в IIS6. Я полностью понимаю проблему, я просто ищу лучшее решение.
У меня есть следующее:
Сайт apiservices все еще работает под .NET Framework v2.0.
Веб-сайт «наш веб-сайт» работает под управлением .NET Framework v4.0 с использованием MVC3.
Новая замечательная функция, появившаяся в .NET 4.0, обработка URL без расширения, вызывает у нас некоторые проблемы из-за наших смешанных версий .NET Framework.
Если я пойду на:
- 'наш сайт' -> щелчок правой кнопкой мыши -> свойства -> вкладка виртуального каталога -> конфигурация. Я вижу, что существует универсальное сопоставление приложения с .NET Framework v4.0 aspnet_isapi.dll. Это правильно, но недостаточно из-за нашей настройки.
- 'apiservices' -> щелчок правой кнопкой мыши -> свойства -> вкладка виртуального каталога -> конфигурация. Я вижу, что существует универсальное сопоставление приложения с .NET Framework v2.0 aspnet_isapi.dll Это правильно для нашей установки И не должно быть установлено на 4.0, иначе оно сломается.
Теперь вот ошибка, возникшая из-за изменений в Microsoft: Поскольку у приложения ASP.NET v4.0 нет подстановочного сопоставления, определенного на корневом уровне, веб-сайт по умолчанию, PageMethods внутри нашего приложения получают неправильно маршрутизируется и 404.
Сумасшедшая часть? Если я пойду на:
- «Веб-сайт по умолчанию» -> щелчок правой кнопкой мыши -> свойства -> вкладка «Домашний каталог» -> конфигурация. Затем добавьте .NET Framework v4.0 к моим картам приложений Wildcard.
- Я нажимаю ОК. Мне предлагается указать, к каким дочерним веб-сайтам я хочу применить эти изменения, потому что они оба определяют свои собственные сопоставления подстановочных приложений. Здесь я указываю, что хочу использовать это сопоставление только для «нашего веб-сайта», а не для «apiservices»
Применение этого изменения решает нашу проблему.
Теперь мне интересно, как мне настроить это? Это работа файла web.config - может ли он управлять настройками верхнего уровня, как это? Или это работа нашего установщика по индивидуальному заказу?
РЕДАКТИРОВАТЬ: Похоже, мне нужно сделать это с помощью WIX. В настоящее время у меня есть код ниже, чтобы установить карту подстановки на дочернем уровне. Я изучаю способы установки его на корневом уровне без перезаписи подстановочного сопоставления «apiservices»:
<iis:WebVirtualDir Id="CSWebVirtualDir" Alias="[TARGETCSWEBVDIR]" Directory="CABLESOLVEWEBDIR" WebSite="DefaultWebSite">
<iis:WebApplication Id="CSWebApplication" Name="[TARGETCSWEBVDIR]" AllowSessions="yes" ParentPaths="yes" ScriptTimeout="900" SessionTimeout="60" WebAppPool="CSWebAppPool" ClientDebugging="no" ServerDebugging="no" Isolation="medium">
<iis:WebApplicationExtension Executable="[FRAMEWORKROOT]v4.0.30319\aspnet_isapi.dll" CheckPath="no" Script="yes" Verbs="GET,HEAD,POST" />
</iis:WebApplication>
<iis:MimeMap Id="MIMEXAP" Type="application/x-silverlight-app" Extension=".xap" />
<iis:MimeMap Id="MIMEXAML" Type="application/xaml+xml" Extension=".xaml" />
</iis:WebVirtualDir>
<iis:WebVirtualDir Id="CSWebAPIVirtualDir" Alias="[TARGETCSWEBAPIVDIR]" Directory="CABLESOLVEWEBAPIDIR" DirProperties="CSWebAPIVirtualDirProperties" WebSite="DefaultWebSite">
<iis:WebApplication Id="CSWebAPIApplication" Name="[TARGETCSWEBAPIVDIR]" ParentPaths="yes" AllowSessions="yes" ScriptTimeout="900" SessionTimeout="60" WebAppPool="CSWebAPIAppPool" ClientDebugging="no" ServerDebugging="no" Isolation="medium">
<iis:WebApplicationExtension Executable="[FRAMEWORKROOT]v2.0.50727\aspnet_isapi.dll" CheckPath="no" Script="yes" Verbs="GET,HEAD,POST" />
</iis:WebApplication>
</iis:WebVirtualDir>