2016-07-06 3 views
2

Текущий проект:Web.Config может быть «нечитаемые»

  • ASP.NET 4.5.2
  • MVC 5

Я имею довольно странный вопрос. Когда я отлаживаюсь из VS2015, я могу использовать и взаимодействовать с сайтом без каких-либо проблем, однако каждый раз, когда я хочу что-то проверить, отлаживая, требуется много времени для компиляции. Кроме того, после начала отладки файлы блокируются и не могут быть отредактированы; и когда я прекращаю отладку внутренних IIS для сбоев VS (это для любого сайта, с которым я работаю, а не только этого). Поэтому использование внутреннего IIS для VS2015 невозможно, не находясь в режиме отладки.

Когда я прикрепляю локальную установку IIS Express к каталогу, в котором находятся файлы проекта, или к каталогу, из которого скомпилирован скомпилированный проект, сайт работает только с обычными страницами. Любые действия, связанные с запросами базы данных, терпят неудачу с ошибкой сервера 500. Другие сайты, которые имеют такую ​​же установку (установленные IIS, указывающей на каталог проекта) работает просто отлично, однако это терпит неудачу на любое действие, требующее подключения DB:

Наиболее вероятные причины:

  • IIS получил запрос; однако во время обработки запроса произошла внутренняя ошибка. Основная причина этой ошибки зависит от того, какой модуль обрабатывает запрос и что происходит в рабочем процессе при возникновении этой ошибки.
  • IIS не смог получить доступ к файлу web.config для веб-сайта или приложения. Это может произойти, если разрешения NTFS установлены неверно.
  • IIS не смог обработать конфигурацию для веб-сайта или приложения.
  • У аутентифицированного пользователя нет разрешения на использование этой библиотеки DLL.
  • Запрос сопоставляется с управляемым обработчиком, но функция расширения .NET не установлена.

Вещи, которые вы можете попробовать:

  • Убедитесь, что разрешения NTFS для файла web.config являются правильными и разрешить доступ к учетной записи компьютера веб-сервера.
  • Проверьте журналы событий, чтобы узнать, была ли зарегистрирована какая-либо дополнительная информация.
  • Проверьте разрешения для библиотеки 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, по крайней мере, с точки зрения того, как она настроена (опять же, разрешения идентичны другим сайтам на машине). И все же, версия IIS, встроенная в Visual Studio, отлично работает с сайтом ... она просто умирает (сбой) всякий раз, когда отладка прекращается (это с любым сайтом).

Итак, я ищу предложения - что может сделать версия IIS, встроенная в VS2015, работать правильно, но IIS в Windows сбой с каким-либо соединением DB на моем текущем сайте? Имейте в виду, что Windows IIS работает с другими сайтами и статическими страницами в этом, а не с действиями, которые имеют доступ к БД любого типа.

Я надеюсь, что кто-то мог бы сказать мне, если что-то не так с моей 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> 
+0

Не зная конкретного исключения, которое происходит, очень сложно сказать, что случилось. Первыми вещами, на которые я бы посмотрел, являются разрешения базы данных. В частности, имеет ли идентификатор, запускающий пул приложений, доступ к базе данных (при условии, что вы используете интегрированную защиту). Если это не сработает, я бы изменил Elmah, чтобы написать файл, чтобы вы могли видеть, что происходит. –

+0

Странная вещь, Elmah работает отлично ... изнутри VS2015 IIS. У меня есть более 40 записей, в которых подробно описаны проблемы, с которыми я столкнулся во время разработки. Но почему-то этот сайт не работает из Windows IIS. –

+1

Вы проверили разрешения базы данных? Потому что это похоже на наиболее вероятную проблему. –

ответ

0

Немного покаянием здесь, как информация, которая будет указывать из самой очевидной проблемы, к потенциальным Хорошим Самаритянам была подвергнута цензура. Зачем? Потому что я не хотел делиться БД connectionString с миром + собакой.

Оказывается, что по умолчанию Web.Config также будет включать в DefaultConnectionconnectionString термин Integrated Security=True. Почему это проблема? Поскольку это говорит IIS использовать Integrated Security при доступе к БД - как в, игнорировать имя пользователя и пароль и просто использовать свои собственные учетные данные.

Это, конечно же, эпическая ошибка.

Теперь я не знаю, как IIS, встроенный в Visual Studio 2015, игнорирует и/или минует этот термин. Либо он полностью игнорирует его, либо просто использует имя пользователя и пароль в строке, или установка Visual Studio каким-то образом устанавливает автоматическое квитирование между VS и MSSQL. Я просто не знаю.

Давайте сделаем весь этот кластер, чтобы это было моим первым действительно независимым (без предварительной версии) проектом, над которым я работал до настоящего времени. Во всех остальных случаях у меня была предварительная версия сайта (и, как таковая, БД) для работы, и я должен был просто скопировать по connectionString как единое целое из старого проекта, а не просто редактировать его в новом проект.

TL; DR: меняющих connectionString к Integrated Security=False или его удаления вообще решает проблему с автономной IIS (IIS не интегрирован в Visual Studio), не будучи в состоянии получить доступ к БД, несмотря на IIS, встроенные в Visual Studio делает очень хорошо.

+0

Вам не нужно изменять его в корневом web.config. Просто переопределите его в своем собственном web.config. Изучите иерархический дизайн и как правильно переопределить. –

+0

Я говорю о Web.Config в корне папки проекта. Вы знаете, тот, который будет сидеть в корне httpdocs веб-сайта после загрузки сайта. Не нужно ничего переоценивать, это все, что происходит. Я не говорю о файлах Web.Config в подпапках. –