2013-09-05 15 views
7

UPDATE: Le cose che ho provato - vedi risposta qui sotto per soluzione500 Internal Server Error richiedente tutti i file di risorse (CSS, JS, immagini) in un .Net MVC 3 del sito

  1. Ho installato un sito MVC3 fresco e servito correttamente le risorse. Questo ha eliminato le impostazioni di machine.config come un problema.
  2. Io quindi quando sezione per sezione in web.config per vedere se eventuali modifiche particolari in web.config hanno causato il problema. Quando i configs erano identici, il sito fresco funzionava ancora e il vecchio sito era ancora rotto.
  3. Ho disinstallato IIS, reinstallato IIS, quindi ho reinstallato le app nel tentativo di eliminare le impostazioni che si stavano verificando. Ancora borseggiato.
  4. Quindi ho usato publish (invece di msi deploy) in una nuova directory. Ho usato l'opzione iis per "Creare un'applicazione" nella nuova directory dello stesso codice identico che è stato rotto. Le cose hanno funzionato perfettamente.
  5. Ho assunto le autorizzazioni per i file, quindi ho cancellato la directory offendente e ho rinominato la nuova versione funzionante con il vecchio nome della directory. Il sito era ancora bloccato. Questo mi ha fatto presumere che una certa impostazione di iis che non è in machine.config o web.config è da biasimare.
  6. Ho utilizzato IIS 6 Metabase explorer (sì, l'ho usato sul sito IIS 8) e ho visto alcune voci che non erano nel sito di lavoro. Dopo aver eliminato uno per uno, ho scoperto che era la voce "scriptMaps" che veniva aggiunta durante l'installazione di MSI causando un problema. Questo è stato aggiunto per aggiungere automaticamente i mapping jolly durante l'installazione. Funziona su IIS6, ma apparentemente non su IIS8.

Abbiamo un Webform e un'applicazione MVC3 che assomigliano a un'applicazione. Questo è distribuito in molti ambienti (2003, 2008, Win 7) e funziona correttamente. Ho appena impostato queste applicazioni su un nuovo computer Windows Server 2012 e tutto funziona tranne che per ottenere i file di risorse per il sito MVC. Il browser ottiene un

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. 

Le risorse previste ai _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> 

nonché utilizzando lo ScriptManager Telerik:

@{ 
    Title = "Reportable Conditions"; 
    SelectedSubTab = SubTabIndex.Reportables; 
    Html.Telerik().ScriptRegistrar().DefaultGroup(dg => dg 
     .Add("~/Scripts/ReportableConditions/List.js") 
     .Add("~/Scripts/ClientObjects/GridSettings.js")) 
     .OnDocumentReady("bootStrapUI()"); 
} 

Se provo a navigare direttamente al file javascript, ricevo lo stesso errore:

http://[server]/S7D/Scripts/2012.2.607/jquery-1.7.1.min.js 

Alcune cose strane:

  1. Se IISReset e ha colpito il file js, funzionerà la prima richiesta.

  2. Qualsiasi js, css o immagine richiesta da un altro sito (webforms) (stesso pool di app) sul server funziona correttamente.

  3. Non c'è nulla nel registro eventi relativo a questo errore 500.

Ho provato ad aggiungere permessi completi alle autorizzazioni per l'utente che il pool di applicazioni è in esecuzione. Ho anche aggiunto i permessi dei file alla [Macchina] \ IUSR.

Ecco la mia rete.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> 

Tutte le risorse, sia che si utilizzi Telerik o aggiungendoli con il tag script danno l'errore 500. Il controllore e la vista visualizzati correttamente (senza stili o Javascript)

EDIT:

Registrati Rotte:

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

Hai impostato le regole di instradamento personalizzate? –

+1

Stai effettivamente distribuendo le risorse sul server? – Brett

+0

@Brett - Sì, le risorse si trovano sul server. Infatti, dopo un reset di IIS, posso accedere ai file una volta navigandoci direttamente. –

risposta

4

Come accennato nella mie modifiche. Il problema era un'impostazione IIS errata che ho trovato con IIS 6 Metabase Explorer.

Ho utilizzato IIS 6 Metabase explorer (sì, l'ho usato sul sito IIS 8) e ho visto alcune voci che non erano nel sito di lavoro. Dopo aver eliminato uno per uno, ho scoperto che era la voce "scriptMaps" che veniva aggiunta durante l'installazione di MSI causando un problema. Questo è stato aggiunto per aggiungere automaticamente i mapping jolly durante l'installazione. Funziona su IIS6, ma apparentemente non su IIS8.

Non sono sicuro del motivo per cui i file verrebbero visualizzati correttamente alla prima richiesta, ma non le richieste successive, ma la rimozione della voce ha funzionato. Non sono riuscito a trovare l'impostazione "ScriptMaps" in qualsiasi punto della GUI di IIS, ma probabilmente è lì da qualche parte.

+6

Per noi, l'errore era una mimemap di contenuto statico aggiunta nel web.config (woff) che deve anche essere stato installato a livello macchina sul nostro servizio Web di Azure. Una volta aggiunto un elemento remove, questo risolve il problema e quindi i 500 errori. – Co7e

+0

Steve - Sono contento che tu abbia trovato l'errore. So che stavo sbattendo la testa contro il muro per il tempo più lungo. Nulla nei registri eventi. Spero che questo aiuti le persone a evitare tutte le frustrazioni che ho avuto. –

1

Per la mia situazione, ho riscontrato questo errore durante l'esecuzione dell'applicazione su Windows 8.0.

Dopo aver modificato il mini tipo di .woff da 'font/x-woff' a 'application/x-font-woff' in IIS, funziona bene (dopo aver modificato il mini-type, la mia configurazione web è stata aggiunta '' in staticContent automaticamente)

18

Stavo ricevendo lo stesso errore quando ho pubblicato il mio sito da locale (Windows 7) al server (Windows 2012).

mio IIS locale aveva aggiunto questo codice:

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

Dove come ho bisogno di questo su Win 2012

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

sembra la versione più recente di IIS sul Win2012 ha già .woff aggiunto e invece di darmi qualsiasi tipo di dettaglio, è appena passato 500!

+0

nel mio caso, ho dovuto rimuovere anche woff2. –

Problemi correlati