Asp.net

ASP.NET 4.5 MVC 4 在 Windows Server 2008 IIS 7 上不起作用

  • September 19, 2012

顯然我遺漏了一些東西,我無法在 IIS 7 上的 Windows Small Business Server 2008 上部署簡單的 ASP.NET MVC 4、.NET 4.5 應用程序。

.NET 框架 4.5 已安裝。

我應該在應用程序的應用程序池基本設置中看到該版本(4.5)嗎?這個時候,我只有2.0和4.0,因為4.5就像3.5一樣,只是在4.0框架之上添加的,我想這是正常的。

當我瀏覽首頁時,出現以下錯誤:

403 - 禁止:訪問被拒絕。您無權使用您提供的憑據查看此目錄或頁面。

當我請求唯一一個名為 Page /page/index 的控制器時,我得到了 404 not found 頁面。就像 ASP.NET 程序永遠不會得到 http 請求。

我可以請求一個簡單的 HTML 頁面。

應用程序池設置為 .NET 4.0 並集成為託管管道模式。

NETWORK SERVICE 對目錄具有讀/寫權限。

當然,該應用程序從 VS2012 完美執行。

我對這裡不正確的地方一無所知,搜尋引擎查詢也沒有多大幫助。

有沒有人有提示,那將非常感激。謝謝

編輯

dll 已經在 bin 文件夾中,例如 System.Web.Mvc、System.Web.Razor 等。

我創建了一個空的 test.aspx 頁面以確保 asp.net 工作程序正在獲取請求,是的,該頁面是正常的。因此,儘管我的 ASP.NET MVC 3 Web 應用程序在該伺服器上執行良好,但 MVC 路由似乎無法正常工作。

.NET 4.5 安裝後,我做了一個 aspnet_regiis -iru 以防萬一,在應用程序上添加了一個 aspnet_client 文件夾,但這仍然不能解決問題。

匿名身份驗證在 IIS 身份驗證部分啟用,並且授權顯示允許所有使用者。

ASP.NET MVC 4 已安裝,我剛剛進行了修復以確保。

即使安裝了 ASP.NET MVC 4,標準 IIS 會返回來自請求 /page/index 操作的 404 錯誤,而不是標準的 aspnet 錯誤。所以確實看起來MVC 4框架沒有正確安裝,我只是仔細檢查並進行修復。我在哪裡可以繼續調查?

@Mystere Man,我已將匿名身份驗證更改為使用應用程序池身份,停止,啟動應用程序,但仍然出現相同的錯誤。看起來,如果 ASP.NET MVC 4 沒有接受請求。

這是 web.config 的一部分:

 <system.webServer>
   <validation validateIntegratedModeConfiguration="false" />
   <handlers>
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
   </handlers>
 </system.webServer>
 <runtime>
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <dependentAssembly>
       <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
       <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
     </dependentAssembly>
     <dependentAssembly>
       <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
       <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
     </dependentAssembly>
     <dependentAssembly>
       <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
       <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
     </dependentAssembly>
   </assemblyBinding>
 </runtime>
 <entityFramework>
   <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
 </entityFramework>

編輯 2012/09/27

我重新配對了 Microsoft Framework .NET 4.5 並修復了 ASP.NET MVC 4,重新部署了簡單的 ASP.NET MVC 4 應用程序,我仍然得到相同的行為。我不確定下一步該怎麼做,所以我開始了賞金,希望有人可以幫助我找到問題。

編輯 2014/01/31

當我問這個問題時,我將 runAllManagedModulesForAllRequests 標記為已接受的答案,因為它確實解決了問題。但我肯定不會在生產中使用它。我問為什麼我必須這樣做,但沒有任何答案。

Martin Hollingsworth的答案確實是我想要的,這是解決此問題的好方法,而不會出現與 runAllManagedModulesForAllRequests 相關的所有性能問題。

我們幾乎放棄併購買了新的 Windows 2012 伺服器(ASP.NET MVC 應用程序在該伺服器上按原樣工作)。在嘗試了 Martin 的解決方案後,Windows 2008 伺服器工作了。

如果您無法從 kb 980368應用QFE ,而不是使用已接受答案中建議的*runAllManagedModulesForAllRequests解決方案,您應該使用下面顯示的帶有**preCondition=""*的模組配置,以避免對靜態內容產生負面影響,如中所述部落格文章asp.NET MVC 路由的工作原理及其對靜態請求性能的影響以及在使 MVC 路由正常工作時不要使用 runAllManagedModulesForAllRequests=“true”以及對答案的一些評論。

Scott Hanselman 關於 runAllManagedModulesForAllRequests 的部落格文章應該為這個論點增加一些分量。Rick Strahl 的文章警告與 IIS 7/8中的 runAllManagedModulesForAllRequests 是我發現的設置之間互動的最佳解釋。關於模組 preCondition 屬性的 IIS 文件也值得一讀。

請記住,如果您已應用 QFE,則無需更改此配置,因為此行為已成為預設行為。

<system.webServer>
 <modules>
   <remove name="UrlRoutingModule-4.0" />
   <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
 </modules>
</system.webServer>

嘗試使用這個:

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true" />
   ...
</system.webServer>

編輯:

上面的解決方案適用於 .NET 3.5 或更低版本。如果您使用的是 .NET 4.0 或更高版本,您可能需要嘗試安裝 IIS7 QFE

此外,這篇文章值得一讀,以了解這兩者之間的區別。

引用自:https://stackoverflow.com/questions/12495346