SQL не будет подключаться после развертывания

asp.net sql-server iis sql-server-2016

2072 просмотра

4 ответа

1780 Репутация автора

Я недавно развернул свой сайт на IIS (LocalDB). Но всякий раз, когда я пытаюсь запустить веб-сайт, SQL не может подключиться. Я пролистал сотни постов / статей сейчас, но я не могу решить это.

ошибка

При установке соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений. (поставщик: сетевые интерфейсы SQL, ошибка: 50 - Произошла ошибка локальной базы данных. Не удалось создать автоматический экземпляр. Подробную информацию об ошибке см. в журнале событий приложений Windows.)

Журнал событий приложений Windows

Вызов API Windows SHGetKnownFolderPath вернул код ошибки: 5. Сообщение об ошибке системы Windows: доступ запрещен. Сообщено в строке: 422.

Второй журнал -

Не удается получить локальный путь к данным приложения. Скорее всего, профиль пользователя не загружен. Если LocalDB выполняется под IIS, убедитесь, что загрузка профиля включена для текущего пользователя.

Мои строки подключения (пробовал оба) -

<appSettings>
    <add key="ConnectionString" value="Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=test;Integrated Security=True" />
    <!--<add key="ConnectionString" value="data source=(LocalDB)\MSSQLLocalDB;UID=SOME_USERNAME;PWD=SOME_PASSWORD;initial catalog=test;connection timeout=30"/>-->
  </appSettings>

Я попытался редактировать applicationHost.config .
Загрузить профиль пользователя уже для меня

Мой файл ApplicationHost.config

 <applicationPools>

            <add name="Classic .NET AppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" />
            <add name=".NET v2.0 Classic" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" />
            <add name=".NET v2.0" managedRuntimeVersion="v2.0" />
            <add name=".NET v4.5 Classic" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" />
            <add name=".NET v4.5" managedRuntimeVersion="v4.0" />
            <add name="ASP.NET v4.0" managedRuntimeVersion="v4.0">

            <add name="DefaultAppPool" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated">
           <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" />
            </add>
        </applicationPools>

Мой менеджер IIS - введите описание изображения здесь

DefaultApplicationPool -

введите описание изображения здесь

Конфигурация моего веб-приложения -
введите описание изображения здесь

Разрешение пула приложений
введите описание изображения здесь

РЕДАКТИРОВАТЬ -

Добавлен IIS Apppool с помощью

icacls c:\inetpub\wwwroot /grant "IIS APPPOOL\DefaultAppPool":(OI)(CI)(RX)

Все еще не в состоянии соединиться.

Любая помощь приветствуется.

Я нахожусь на Windows 10 с использованием Visual Studio 2015 с SQL Server 2016.

Автор: Pirate X Источник Размещён: 18.07.2016 04:36

Ответы (4)


0 плюса

187 Репутация автора

Я вижу две возможные ошибки.

Предположим, ваш SQL-сервер находится в том же окне, что и IIS, и предположим, что, как предполагает ваша ConnectionString, вы установили SQL-сервер с именованным экземпляром «MSSQLLocalDB», строка подключения должна быть:

Data Source=localhost\MSSQLLocalDB;Initial Catalog=test;IntegratedSecurity=True"

Если LocalDB находится на другом компьютере, не используйте имя хоста (если у вас нет DNS-сервера), просто используйте IP-адрес.

Теперь, когда ваше приложение использует APPPOOL \ DefaultAppPool, убедитесь, что предоставили этому пользователю полномочия делать то, что вы собираетесь делать в SQL (например, если выполнять хранимую процедуру). Вы должны добавить это как логин и затем предоставить ему разрешение EXECUTE, SELECT, INSERT, DELETE для базы данных.

Источник данных всегда должен быть /

Я предлагаю вам подключиться к SSMS и подтвердить имя хоста. Я не ожидал, что "(" или ")" появится там. Если вы просто не ссылались на свой (LocalDB), который может быть 192.168.0.1 и т. Д.

Автор: Arvin Amir Размещён: 08.03.2017 10:19

5 плюса

627 Репутация автора

Была такая же проблема. Я не пробовал все то, что ты сделал, хотя. Я сделал следующее:

  1. IIS Manager
  2. Пулы приложений
  3. Найдите пул, к которому принадлежит ваше приложение (для меня это было так .NET v4.5)
  4. Щелкните правой кнопкой мыши -> Расширенные настройки
  5. Прокрутите вниз до Identity
  6. Измените что угодно (для меня это было так ApplicationPoolIdentityже, как и вы) на LocalSystem.
Автор: Robotron Размещён: 09.05.2017 08:29

0 плюса

804 Репутация автора

Хотя есть обходные пути, которые вы можете попробовать (либо запустить SQL Server под своей учетной записью, либо предоставить общий доступ к экземпляру LocalDB и подключиться к нему, используя только что созданный общий адрес), я думаю, что лучшим решением здесь является обновление до SQL Server Express 2012, что я и использую. в конечном итоге делает.

Подробное объяснение изложено в этой записи блога: https://blogs.msdn.microsoft.com/sqlexpress/2011/12/08/using-localdb-with-full-iis-part-2-instance-ownership/

Я потратил почти целый день на выявление причины и обходных путей и пришел к выводу, что, если я обновлю версию SQL Server, это, вероятно, будет самым простым и наиболее вероятным доказательством того, что LocalDB, похоже, не предназначен для работы в IIS или аналогичных средах после чтения. блог.

Автор: Francis Размещён: 21.06.2017 06:28

0 плюса

1009 Репутация автора

У меня была точно такая же проблема, и наконец я решил. Надеюсь, это работает и для вас. Моя проблема заключалась в том, что я создал веб-приложение в Visual Studio 2017 и по умолчанию размещено в IIS Express . И я перешел на IIS, затем я получил эту ошибку.

В журнале событий я видел эти 2 ошибки:

  • Вызов API Windows SHGetKnownFolderPath вернул код ошибки: 5. Сообщение об ошибке системы Windows: доступ запрещен.

  • Не удается получить локальный путь к данным приложения. Скорее всего, профиль пользователя не загружен. Если LocalDB выполняется под IIS, убедитесь, что загрузка профиля включена для текущего пользователя.

Для меня решение:

Сначала я подключил базу данных к SQL Server Management Studio с именем входа в систему (LocalDB) \ MSSQLLocalDB, которое я нашел в строке подключения web.config.

<connectionStrings>
 <add name="EFWeatherDBEntities" 
     connectionString="metadata=res://*/Models.EFModel.csdl|res://*/Models.EFModel.ssdl|res://*/Models.EFModel.msl;provider=System.Data.SqlClient;
     provider connection string=&quot;
     data source=(LocalDB)\MSSQLLocalDB;
     attachdbfilename=|DataDirectory|\WeatherDB.mdf;
     integrated security=True;connect timeout=30;
     MultipleActiveResultSets=True;App=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />
</connectionStrings>

Тогда я понял , в IIS , когда я пытаюсь нажать Test Settingsна Basic Settings, я получаю Invalid приложений сообщений об ошибке Path. Поэтому я изменил учетные данные как другой пользователь (мой пользователь, который является администратором, но я полагаю, что без разрешения администратора это также должно работать).

Итак, в основном:

  • нажмите на сайт в IIS

  • нажмите Basic Settingsна правой панели

  • щелчок Connect As

  • и введите пользователя в Specific Userраздел

  • затем проверьте, если вы все еще получаете ошибку пути, нажав Test Settings.

  • Тогда в Application PoolкомплектеIdentity to LocalSystem

Автор: sa_ Размещён: 09.07.2017 10:40
Вопросы из категории :
32x32