更新任何資源文件(CSS,JS,圖像):事情我想 - 見下面回答的解決方案500內部服務器錯誤,要求在淨MVC 3網站
- 我安裝了一個新的MVC3的網站,它正確提供資源。這消除了machine.config設置的問題。
- 然後我在web.config中逐節查看web.config中是否有任何特定更改導致此問題。當配置相同時,新鮮的網站仍然有效,舊網站仍然被破壞。
- 我卸載了IIS,重新安裝了IIS,然後再次安裝了應用程序,試圖清除任何徘徊的設置。還是borked。
- 然後,我使用發佈(而不是msi部署)到新目錄。我使用iis選項在已完全相同的代碼被破壞的新目錄中「創建應用程序」。事情運作完美。
- 我假設文件權限,所以我刪除了違規目錄,並將新的工作版本重命名爲舊的目錄名稱。網站仍然是borked。這讓我認爲有些iis設置不在machine.config或web.config中是怪罪。
- 我用IIS 6元數據庫瀏覽器(是的,我在IIS 8網站上使用它),並看到不少在工作網站中的條目。在逐一刪除之後,我發現它是在我們的MSI安裝期間添加的「scriptMaps」條目導致問題。這被添加到安裝過程中自動添加通配符映射。它適用於IIS6,但顯然不在IIS8上。
我們有一個webforms和MVC3應用程序,看起來像一個應用程序。這是部署在許多環境(2003年,2008年,贏7),並正常工作。我剛剛將這些應用程序設置在新的Windows Server 2012計算機上,除了獲取MVC網站的資源文件外,其他所有工作都可以使用。瀏覽器獲得一個
500 Internal Server Error
Server Application Unavailable
The web application you are attempting to access on this web server is currently unavailable. Please hit the "Refresh" button in your web browser to retry your request.
Administrator Note: An error message detailing the cause of this specific request failure can be found in the application event log of the web server. Please review this log entry to discover what caused this error to occur.
資源在_layout.cshtml
<head>
<meta http-equiv='X-UA-Compatible' content='IE=EmulateIE8' />
<title>@this.Title</title>
<script type="text/javascript" src="@Url.Content("~/Scripts/2012.2.607/jquery-1.7.1.min.js")"></script>
<script type="text/javascript" src="/Sentri7/scripts/jquery-p1s.banner.js"></script>
<script type="text/javascript" src="/Sentri7/scripts/jquery-p1s.patientsearch.js"></script>
<link type="text/css" rel="stylesheet" href="/sentri7/content/jquery-p1s.patientsearch.css"></link>
<link type="text/css" rel="stylesheet" href="/sentri7/content/jquery-p1s.banner.css" />
<link type="text/css" rel="stylesheet" href="/quantifi/resources/application/css/jqueryui/jquery-ui-1.7.2.custom.css" />
<link type="text/css" rel="stylesheet" href="/quantifi/resources/application/css/styles.css" />
@(RenderSection("PageHead", required: false))
</head>
引用以及使用Telerik的的ScriptManager:
@{
Title = "Reportable Conditions";
SelectedSubTab = SubTabIndex.Reportables;
Html.Telerik().ScriptRegistrar().DefaultGroup(dg => dg
.Add("~/Scripts/ReportableConditions/List.js")
.Add("~/Scripts/ClientObjects/GridSettings.js"))
.OnDocumentReady("bootStrapUI()");
}
如果我嘗試直接導航到javascript文件,我得到相同的錯誤:
http://[server]/S7D/Scripts/2012.2.607/jquery-1.7.1.min.js
一些奇怪的東西:
如果我IISRESET並擊中了js文件,它只會工作的第一個請求。
從服務器上的其他(webforms)網站(同一應用程序池)請求的任何js,css或圖像都可以正常工作。
與此500錯誤相關的事件日誌中沒有任何內容。
我已經嘗試嚮應用程序池正在運行的用戶添加權限完全權限。我還爲[Machine] \ IUSR添加了文件權限。
這是我的網頁。config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<configSections>
<sectionGroup name="telerik">
<section name="webAssets" type="Telerik.Web.Mvc.Configuration.WebAssetConfigurationSection, Telerik.Web.Mvc" requirePermission="false" />
</sectionGroup>
<sectionGroup name="spring">
<section name="typeAliases" type="Spring.Context.Support.TypeAliasesSectionHandler, Spring.Core" />
<section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web" />
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<spring>
<context>
<!-- Load web.config definition ** This resource reference is essential to define objects in the web.configs -->
<resource uri="config://spring/objects" />
<resource uri="assembly://CAS2/CAS2.CASLibDAO/_SpringObjects.xml" />
<resource uri="file://~/App_Data/MvcApplicationContext.xml" />
<resource uri="assembly://P1S.S7D.Core/P1S.S7D.Core.ApplicationContext/ApplicationContext-Common.xml" />
<resource uri="assembly://P1S.S7D.Core/P1S.S7D.Core.ApplicationContext/ApplicationContext-DAO.xml" />
<resource uri="assembly://P1S.S7D.Core/P1S.S7D.Core.ApplicationContext/ApplicationContext.xml" />
<resource uri="assembly://P1S.S7D.Core/P1S.S7D.Core.ApplicationContext/Services.xml" />
<resource uri="assembly://P1S.S7D.Common/P1S.S7D.Common.ApplicationContext/ApplicationContext-AuthModule.xml" />
<resource uri="assembly://P1S.S7D.Common/P1S.S7D.Common.ApplicationContext/ApplicationContext-Web-Common.xml" />
<resource uri="assembly://P1S.S7D.Core/P1S.S7D.Core.ApplicationContext.WCF/ApplicationContext.xml" />
<resource uri="assembly://P1S.S7D.Core/P1S.S7D.Core.ApplicationContext/ApplicationContext-Circular-Reference-IPReporting.xml" />
</context>
<objects xmlns="http://www.springframework.net">
<!--cached objects-->
</objects>
</spring>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="P1S.S7D.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="P1S.S7D.Web.Mvc" />
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
<add namespace="Telerik.Web.Mvc.UI" />
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="Spring.Data.NHibernate.Support.OpenSessionInViewModule.SessionFactoryObjectName" value="NHibernateSessionFactory" />
<add key="Spring.Data.NHibernate.Support.OpenSessionInViewModule.EntityInterceptorObjectName" value="MultiTenantInterceptor" />
<add key="webpages:Version" value="1.0.0.0" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<sessionState allowCustomSqlDatabase="true" mode="SQLServer" sqlConnectionString="Server=dev-ct-nhsn.dev.rph.int;Database=aspstate;User ID=UID;Password=*****; Application Name=S7DSharedSession" />
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
<profile>
<providers>
<clear />
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
</providers>
</profile>
<roleManager enabled="false">
<providers>
<clear />
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
<pages pageBaseType="P1S.S7D.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="P1S.S7D.Web.Mvc" />
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
<add namespace="Telerik.Web.Mvc.UI" />
</namespaces>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</controls>
</pages>
<httpHandlers>
<add verb="GET,HEAD" path="asset.axd" validate="false" type="Telerik.Web.Mvc.WebAssetHttpHandler, Telerik.Web.Mvc" />
</httpHandlers>
<httpModules>
<add name="AuthenticationModule" type="Web.Handlers.AuthenticationModule,P1S.S7D.Web.Mvc" />
<add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web" />
<add name="OpenSessionInView" type="Spring.Data.NHibernate.Support.OpenSessionInViewModule, Spring.Data.NHibernate31" />
</httpModules>
<customErrors mode="Off" />
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web" />
<add name="AuthenticationModule" type="Web.Handlers.AuthenticationModule,P1S.S7D.Web.Mvc" />
<add name="OpenSessionInView" type="Spring.Data.NHibernate.Support.OpenSessionInViewModule, Spring.Data.NHibernate31" />
</modules>
<!-- -->
<handlers>
<remove name="asset" />
<add name="asset" preCondition="integratedMode" verb="GET,HEAD" path="asset.axd" type="Telerik.Web.Mvc.WebAssetHttpHandler, Telerik.Web.Mvc" />
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NHibernate" culture="neutral" publicKeyToken="aa95f207798dfdb4" />
<bindingRedirect oldVersion="3.1.0.4000" newVersion="3.3.1.4000" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<telerik>
<webAssets useTelerikContentDeliveryNetwork="false" />
</telerik>
</configuration>
所有資源,無論是使用Telerik還是使用腳本標記添加它們都會導致500錯誤。控制器和視圖正確顯示(無樣式或JavaScript)
編輯:
註冊途徑:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
RouteTable.Routes.RouteExistingFiles = false;
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
您是否設置了自定義路由規則? –
您是否實際將資產部署到服務器? – Brett
@Brett - 是資產在服務器上。事實上,在IIS重置之後,我可以直接訪問文件直接導航到它們。 –