ASP.NET 4.5 MVC 4 在 Windows Server 2008 IIS 7 上不起作用
顯然我遺漏了一些東西,我無法在 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
此外,這篇文章值得一讀,以了解這兩者之間的區別。