2013-09-05 98 views
7

更新任何資源文件(CSS,JS,圖像):事情我想 - 見下面回答的解決方案500內部服務器錯誤,要求在淨MVC 3網站

  1. 我安裝了一個新的MVC3的網站,它正確提供資源。這消除了machine.config設置的問題。
  2. 然後我在web.config中逐節查看web.config中是否有任何特定更改導致此問題。當配置相同時,新鮮的網站仍然有效,舊網站仍然被破壞。
  3. 我卸載了IIS,重新安裝了IIS,然後再次安裝了應用程序,試圖清除任何徘徊的設置。還是borked。
  4. 然後,我使用發佈(而不是msi部署)到新目錄。我使用iis選項在已完全相同的代碼被破壞的新目錄中「創建應用程序」。事情運作完美。
  5. 我假設文件權限,所以我刪除了違規目錄,並將新的工作版本重命名爲舊的目錄名稱。網站仍然是borked。這讓我認爲有些iis設置不在machine.config或web.config中是怪罪。
  6. 我用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 

一些奇怪的東西:

  1. 如果我IISRESET並擊中了js文件,它只會工作的第一個請求。

  2. 從服務器上的其他(webforms)網站(同一應用程序池)請求的任何js,css或圖像都可以正常工作。

  3. 與此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 
     ); 
    } 
+1

您是否設置了自定義路由規則? –

+1

您是否實際將資產部署到服務器? – Brett

+0

@Brett - 是資產在服務器上。事實上,在IIS重置之後,我可以直接訪問文件直接導航到它們。 –

回答

4

正如我的編輯提及。這個問題是我在IIS 6 Metabase Explorer中找到的錯誤的IIS設置。

我用IIS 6元數據庫資源管理器(是的,我在IIS 8站點上使用它),並看到不少在工作站點中的項目。在逐一刪除之後,我發現它是在我們的MSI安裝期間添加的「scriptMaps」條目導致問題。這被添加到安裝過程中自動添加通配符映射。它適用於IIS6,但顯然不在IIS8上。

我不知道爲什麼這些文件在第一個請求上得到正確處理,但沒有後續請求,但刪除條目起作用。我無法在IIS GUI中的任何位置找到「ScriptMaps」設置,但它可能在某處。

+6

對於我們來說,錯誤是一個靜態內容mimemap被添加到網絡中。config(woff),它也必須在我們的Azure Web服務的計算機級別安裝。一旦我們首先添加了一個刪除元素,那麼這就解決了這個問題,因此解決了500個錯誤 – Co7e

+0

史蒂夫 - 我很高興你發現了這個錯誤。我知道我長時間在牆上撞了我的頭。事件日誌中沒有任何內容。希望這有助於人們避免我所有的挫折。 –

1

對我的情況,我在Window 8.0上運行我的應用程序時遇到了這個錯誤。

當我在IIS中將迷你類型的.woff從'font/x-woff'更改爲'application/x-font-woff'後,它運行良好(在我更改迷你類型後,添加了我的web配置''自動轉換爲staticContent)

18

當我將本地站點(Windows 7)發佈到服務器(Windows 2012)時,出現同樣的錯誤。

我的本地IIS又增加了驗證碼:

<staticContent> 
    <mimeMap fileExtension=".woff" mimeType="application/x-font-woff" /> 
    <mimeMap fileExtension=".woff2" mimeType="application/x-font-woff" /> 
</staticContent> 

在哪裏,我需要這在Win 2012

<staticContent> 
    <remove fileExtension=".woff" /> 
    <mimeMap fileExtension=".woff" mimeType="application/x-font-woff" /> 
    <mimeMap fileExtension=".woff2" mimeType="application/x-font-woff" /> 
</staticContent> 

看來IIS對Win2012的新版本已經有.woff補充和替代給我任何細節,它只有500!

+0

在我的情況下,我不得不刪除woff2。 –