web-dev-qa-db-ja.com

Web.Configが「読み取り不能」である可能性があります

現行の企画:

  • ASP.NET 4.5.2
  • MVC 5

私はかなり奇妙な問題を抱えています。 VS2015内からデバッグする場合、問題なくサイトを使用および操作できますが、デバッグによって何かをチェックアウトするたびにコンパイルするのに非常に長い時間がかかります。さらに、デバッグを開始すると、ファイルはロックされ、編集できなくなります。そして、VSクラッシュへの内部IISのデバッグを停止すると(これは、これだけでなく、私が使用しているすべてのサイト用です)。したがって、IIS internal VS2015への移行は、デバッグモードでないと不可能です。

IIS Expressのローカルインストールを、プロジェクトファイルが存在するディレクトリ、またはコンパイルされたプロジェクトが吐き出されるディレクトリのいずれかにアタッチすると、サイトは通常のページでのみ機能します。データベース要求を含むすべてのアクションは500サーバーエラーで失敗します。同じセットアップ(インストール済みIISプロジェクトディレクトリを指す)を持つ他のサイトは正常に機能しますが、これは必要なアクションで失敗しますDB接続:

最も考えられる原因:

  • IISが要求を受信しました。ただし、リクエストの処理中に内部エラーが発生しました。このエラーの根本的な原因は、要求を処理するモジュールと、このエラーが発生したときにワーカープロセスで何が起こっていたかによって異なります。
  • IISは、Webサイトまたはアプリケーションのweb.configファイルにアクセスできませんでした。これは、NTFSアクセス許可が正しく設定されていない場合に発生する可能性があります。
  • IISは、Webサイトまたはアプリケーションの構成を処理できませんでした。
  • 認証されたユーザーには、このDLLを使用する権限がありません。
  • 要求はマネージハンドラーにマップされますが、.NET拡張機能がインストールされていません。

あなたが試すことができること:

  • Web.configファイルのNTFSアクセス許可が正しいことを確認し、Webサーバーのマシンアカウントへのアクセスを許可します。
  • イベントログをチェックして、追加情報がログに記録されているかどうかを確認します。
  • DLLのアクセス許可を確認します。
  • 要求がマネージハンドラーにマップされている場合は、.NET拡張機能をインストールします。
  • このHTTPステータスコードの失敗したリクエストを追跡するためのトレースルールを作成します。失敗したリクエストのトレースルールの作成の詳細については、ここをクリックしてください。
Detailed Error Information:
Module         ManagedPipelineHandler
Notification   ExecuteRequestHandler
Handler        System.Web.Mvc.MvcHandler
Error Code     0x00000000
Requested URL  http://project.localhost:80/Home/Test
Physical Path  D:\Source\Repos\Project\Project\Home\Test
Logon Method   Anonymous
Logon User     Anonymous

Web.Configのアクセス許可を調べましたが、IUSRとIIS_IUSRSの両方に読み取り/実行アクセス許可が与えられており、すべて問題ありません。アプリケーションプールは統合に設定されていますが、これはIIS問題具体的には)ではないようです。これは、マシン上の他の多くのデータベース駆動型サイトが結構です(頻繁にメンテナンスを行うため、そのままにしておきます)。したがって、少なくとも設定方法に関しては、これはWeb.Configの問題である可能性があると考えています(ここでも、アクセス許可は上の他のサイトと同じです)。それでも、VisualStudioに組み込まれているバージョンのIISは、サイトで問題なく動作します…デバッグが停止するたびに停止(クラッシュ)します(これはどのサイトでも同様です)。

だから私は提案を探しています-VS2015に組み込まれているIISのバージョンを正しく機能させることができるのは何ですか?しかし、WindowsのIISは、DB接続で失敗します私の現在のサイトでは?Windows IISは、他のサイトやこのサイトの静的ページで機能し、あらゆる種類のDBアクセスを持つアクションでは機能しないことに注意してください。

Web.Configに問題があるかどうかを誰かが教えてくれることを願っています。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <sectionGroup name="nwebsec">
      <section name="httpHeaderSecurityModule" type="NWebsec.Modules.Configuration.HttpHeaderSecurityConfigurationSection, NWebsec, Version=4.2.0.0, Culture=neutral, PublicKeyToken=3613da5f958908a1" requirePermission="false" />
    </sectionGroup>
    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
    </sectionGroup>
  </configSections>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="censored" providerName="System.Data.SqlClient" />
    <add name="Elmah" connectionString="censored" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    <add key="elmah.mvc.disableHandler" value="false" />
    <add key="elmah.mvc.disableHandleErrorFilter" value="false" />
    <add key="elmah.mvc.requiresAuthentication" value="false" />
    <add key="elmah.mvc.IgnoreDefaultRoute" value="false" />
    <add key="elmah.mvc.allowedRoles" value="*" />
    <add key="elmah.mvc.allowedUsers" value="*" />
    <add key="elmah.mvc.route" value="elmah" />
    <add key="elmah.mvc.UserAuthCaseSensitive" value="true" />
    <add key="recaptchaPublicKey" value="censored" />
    <add key="recaptchaPrivateKey" value="censored" />
    <add key="recaptchaApiVersion" value="2" />
  </appSettings>
  <system.web>
    <authentication mode="None" />
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" enableVersionHeader="false" />
    <roleManager enabled="true" />
    <pages>
      <controls>
        <add tagPrefix="ajaxToolkit" Assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" />
      </controls>
    </pages>
    <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </httpModules>
    <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="/Error/Index">
      <error statusCode="401" redirect="/Error/Unauthorized" />
      <error statusCode="404" redirect="/Error/NotFound" />
      <error statusCode="403" redirect="/Error/Forbidden" />
    </customErrors>
  </system.web>
  <system.webServer>
    <modules>
      <remove name="FormsAuthentication" />
      <remove name="RoleManager" />
      <add name="NWebsecHttpHeaderSecurityModule" type="NWebsec.Modules.HttpHeaderSecurityModule, NWebsec, Version=4.2.0.0, Culture=neutral, PublicKeyToken=3613da5f958908a1" />
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
    </modules>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
      <add name="ELMAH" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
    </handlers>
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="X-Frame-Options" value="SAMEORIGIN" />
      </customHeaders>
    </httpProtocol>
    <httpErrors errorMode="Detailed" existingResponse="Replace">
      <remove statusCode="403" />
      <error statusCode="403" responseMode="ExecuteURL" path="/Error/Forbidden" />
    </httpErrors>
    <security>
      <requestFiltering>
        <hiddenSegments>
          <add segment="NWebsecConfig" />
        </hiddenSegments>
      </requestFiltering>
    </security>
    <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="AngleSharp" publicKeyToken="e83494dcdc6d31ea" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-0.9.6.41832" newVersion="0.9.6.41832" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <!--<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />-->
    </compilers>
  </system.codedom>
  <system.net>
    <mailSettings>
      <smtp from="[email protected]">
        <network Host="" port="587" userName="" password="" enableSsl="false" />
      </smtp>
    </mailSettings>
  </system.net>
  <nwebsec>
    <httpHeaderSecurityModule xmlns="http://nwebsec.com/HttpHeaderSecurityModuleConfig.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="NWebsecConfig/HttpHeaderSecurityModuleConfig.xsd">
      <redirectValidation enabled="true" />
      <securityHttpHeaders>
        <x-Frame-Options policy="Deny" />
        <x-Content-Type-Options enabled="true" />
      </securityHttpHeaders>
    </httpHeaderSecurityModule>
  </nwebsec>
  <elmah xmlns="http://Elmah.Configuration">
    <!--
        See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for 
        more information on remote access and securing ELMAH.
    -->
    <security allowRemoteAccess="false" />
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="Elmah" />
  </elmah>
  <location path="elmah.axd" inheritInChildApplications="false">
    <system.web>
      <httpHandlers>
        <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
      </httpHandlers>
      <!-- 
        See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for 
        more information on using ASP.NET authorization securing ELMAH.

      <authorization>
        <allow roles="admin" />
        <deny users="*" />  
      </authorization>
      -->  
    </system.web>
  </location>
</configuration>
6
René Kåbis

少しMea Culpaここで、潜在的な善良なサマリア人に問題を最も明白に指摘する情報が私によって検閲されたので。どうして? DB connectionStringをworld + dogと共有したくなかったからです。

デフォルトのWeb.Configには、DefaultConnectionconnectionStringIntegrated Security=Trueという用語も含まれていることがわかります。なぜこれが問題なのですか?これは、DBにアクセスするときに統合セキュリティを使用するようにIISに指示しているため、のように、ユーザー名とパスワードを無視し、独自の資格情報を使用します。

もちろん、これはエピックフェイルです。

さて、Visual Studio2015に組み込まれているIISが、この用語をどのように無視またはバイパスしているかはわかりません。それを完全に無視して文字列にユーザー名とパスワードを使用するか、Visual Studioをインストールすると、VSとMSSQLの間で自動ハンドシェイクが設定されます。わかりません。

このclusterfuck全体を、これまでに取り組んだ最初の真に独立した(以前のバージョンではない)プロジェクトにチョークで書きましょう。他のすべての場合、以前のバージョンのサイト(つまり、DB)を使用していたので、編集するだけでなく、古いプロジェクトからユニット全体としてconnectionStringをコピーしたに違いありません。新しいプロジェクトのもの。

TL; DR:connectionStringIntegrated Security=Falseに変更するか、完全に削除すると、スタンドアロンのIIS(IISはVisual Studioに統合されていない)がDBにアクセスできないという問題が解決します。 VisualStudioに組み込まれているIISは問題なく動作します。

2
René Kåbis