12

更新:私が試したこと - 解決策については以下の回答を参照してください

  1. 新しい MVC3 サイトをインストールしたところ、リソースが適切に提供されました。これにより、問題としての machine.config 設定が解消されました。
  2. 次に、web.config のセクションごとに、web.config の特定の変更が問題を引き起こしているかどうかを確認します。構成が同一の場合、新しいサイトは引き続き機能し、古いサイトはまだ壊れていました。
  3. IIS をアンインストールし、IIS を再インストールしてから、アプリを再度インストールして、残っている設定をすべてクリアしようとしました。まだ退屈。
  4. 次に、(msi deploy の代わりに) 新しいディレクトリへの発行を使用しました。壊れているまったく同じコードの新しいディレクトリで「アプリケーションの作成」にiisオプションを使用しました。物事は完璧に機能しました。
  5. ファイルのアクセス許可を想定していたので、問題のあるディレクトリを削除し、新しい作業バージョンの名前を古いディレクトリ名に変更しました。サイトはまだボーリングされていました。これにより、machine.config または web.config にない一部の iis 設定が原因であると思われました。
  6. 私は IIS 6 メタベース エクスプローラーを使用しました (はい、IIS 8 サイトで使用しました)。作業サイトにないかなりの数のエントリが表示されました。1つずつ削除した後、MSIのインストール中に追加された「scriptMaps」エントリが問題の原因であることがわかりました。これは、インストール中にワイルドカード マッピングを自動的に追加するために追加されました。IIS6 では動作しますが、IIS8 では動作しないようです。

1 つのアプリケーションのように見える Web フォームと MVC3 アプリケーションがあります。これは多くの環境 (2003、2008、Win 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>

テレリックスクリプトマネージャーを使用するだけでなく:

@{
    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. サーバー上の別の (Web フォーム) サイト (同じアプリ プール) から要求された js、css、またはイメージは正常に機能します。

  3. この 500 エラーに関連するイベント ログはありません。

アプリプールが実行されているユーザーに完全なアクセス許可を追加しようとしました。また、[Machine]\IUSR にファイル アクセス許可を追加しました。

これが私のweb.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 を使用するか、script タグを使用してリソースを追加するかに関係なく、すべてのリソースで 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
       );
    }
4

3 に答える 3

24

サイトをローカル (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>

Win2012 の新しいバージョンの IIS には既に .woff が追加されているようで、詳細を提供する代わりに 500 になりました!

于 2015-09-07T05:19:05.030 に答える
4

私の編集で述べたように。問題は、IIS 6 メタベース エクスプローラーで見つかった IIS 設定の誤りでした。

私は IIS 6 メタベース エクスプローラーを使用しました (はい、IIS 8 サイトで使用しました)。作業サイトにないかなりの数のエントリが表示されました。1つずつ削除した後、MSIのインストール中に追加された「scriptMaps」エントリが問題の原因であることがわかりました。これは、インストール中にワイルドカード マッピングを自動的に追加するために追加されました。IIS6 では動作しますが、IIS8 では動作しないようです。

最初のリクエストでファイルが適切に提供され、その後のリクエストでは提供されない理由はわかりませんが、エントリの削除は機能しました。IIS GUI のどこにも「ScriptMaps」設定が見つかりませんでしたが、おそらくどこかにあるはずです。

于 2013-09-09T20:39:22.627 に答える
1

私の状況では、アプリケーションを Window 8.0 で実行すると、このエラーが発生しました。

IIS で .woff のミニ タイプを 'font/x-woff' から 'application/x-font-woff' に変更した後、うまく動作します (ミニ タイプを変更した後、私の Web 構成は '' を staticContent に追加しました)。自動的)

于 2014-05-07T08:23:53.867 に答える