2013-08-18 71 views
1

我有一個ASP.NET MVC 2 Web應用程序,可以在我的本地Cassini服務器中正常工作,並且在我最後一次測試它時也能正常工作幾個月前的IIS 7.5。IIS 8 - 靜態文件請求通過託管管道,儘管runAllManagedModulesForAllRequests =「false」

我的web.config看起來像這樣(不相關的部分去掉):

<?xml version="1.0"?> 
<configuration> 

    <system.web> 

     <authentication mode="Forms"> 
      <!-- 2880 minutes is 48 hours --> 
      <forms loginUrl="~/Welcome/Login" timeout="2880" slidingExpiration="true" /> 
     </authentication> 

     <customErrors mode="RemoteOnly" /> 

     <httpHandlers> 
      <remove verb="*"  path="*.asmx" /> 
      <add verb="*"  path="*.asmx"    validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      <add verb="*"  path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      <add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     </httpHandlers> 

     <httpModules> 
      <add name="ScriptModule"  type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     </httpModules> 

    </system.web> 

    <system.webServer> 
     <validation validateIntegratedModeConfiguration="false"/> 
     <modules runAllManagedModulesForAllRequests="true"> 
      <remove name="ScriptModule"/> 
      <remove name="UrlRoutingModule"/> 
      <add name="ScriptModule"  preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add name="UrlRoutingModule"        type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     </modules> 
     <handlers> 
      <remove name="WebServiceHandlerFactory-Integrated"/> 
      <remove name="ScriptHandlerFactory"/> 
      <remove name="ScriptHandlerFactoryAppServices"/> 
      <remove name="ScriptResource"/> 
      <remove name="UrlRoutingHandler"/> 
      <add name="ScriptHandlerFactory"   preCondition="integratedMode" verb="*"  path="*.asmx"    type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add name="ScriptHandlerFactoryAppServices" preCondition="integratedMode" verb="*"  path="*_AppService.axd" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add name="ScriptResource"     preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add name="UrlRoutingHandler"    preCondition="integratedMode" verb="*"  path="UrlRouting.axd"  type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 
     </handlers> 
     <httpErrors> 
      <remove statusCode="404" subStatusCode="-1" /> 
      <error statusCode="404" prefixLanguageFilePath="" path="Views\Shared\Iis404.htm" responseMode="File" /> 
     </httpErrors> 

    </system.webServer> 

</configuration> 

我現在它的Azure的VM和靜態內容的請求,例如部署到IIS 8 /Styles/style.css經歷了託管請求管道,並且由於我有一個就地認證系統,這意味着這些請求會被阻止並被我的應用程序的登錄屏幕取代。

我發現這個QA(Prevent IIS from serving static files through ASP.NET pipeline),我改變了<modules runAllManagedModulesForAllRequests="true"><modules runAllManagedModulesForAllRequests="false">,但是這並沒有解決它:請求/Styles/style.css還是造成了被調用我的ASP.NET MVC的代碼(它調用我的WelcomeController類的登錄動作,因爲現在Controller.User屬性返回null,所以失敗)。

我不知道IIS8中會有什麼變化會引發這種情況 - 但是我怎樣才能修復它呢?

更新:

我說這對我的Global.asax.cs,但它沒有工作:

routes.IgnoreRoute("Scripts/{*pathInfo}"); 
routes.IgnoreRoute("Styles/{*pathInfo}"); 
routes.IgnoreRoute("favicon.ico"); 

更新:我已經在我的Windows 8筆記本電腦企業,並安裝IIS 8我的驚訝,它在那裏按預期工作 - 所以我的Windows 8筆記本電腦和Server 2012 Azure VM之間存在一些配置差異。嗯。

回答

2

我開始尋找我的本地計算機的IIS配置和Azure的虛擬機之間的差異,我找到了解決辦法:

我已經忽略了IIS> {網站}>認證>匿名配置:在Azure虛擬機設置爲特定用戶對於不存在的用戶!而在我的本地IIS中,它被設置爲應用程序池標識

我將其更改爲應用程序池標識現在它按預期工作。

我很驚訝IIS沒有給我任何其他錯誤消息或更有用的方法來診斷問題。哼。