2016-07-18 5 views
5

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

Ошибка

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. Cannot create an automatic instance. See the Windows Application event log for error details.)

событие

приложений Windows

Windows API call SHGetKnownFolderPath returned error code: 5. Windows system error message is: Access is denied. Reported at line: 422.

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

Cannot get a local application data path. Most probably a user profile is not loaded. If LocalDB is executed under IIS, make sure that profile loading is enabled for the current user.

My Connection Strings (пробовал оба) -

<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.
Load User Profile уже Правда для меня

Мой 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 - enter image description here

DefaultApplicationPool -

enter image description here

Моя конфигурация веб-приложение -
enter image description here

App Pool разрешение
enter image description here

EDIT -

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

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

Все еще не удается подключиться.

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

Я на Windows 10 с помощью Visual Studio 2015 с SQL Server 2016.

+0

Включили ли вы загрузить профиль пользователя для учетной записи запуска приложения пул? – Tim

+0

Пользовательский профиль пользователя @Tim Load уже был прав для меня. –

+0

Да, но когда вы говорите, что это верно для вас, вы имеете в виду вашу учетную запись или учетную запись, использующую пул приложений приложения? – Tim

ответ

0

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

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

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

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

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

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

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

0

Если бы эта проблема. Однако я не пробовал все, что вы делали. Я сделал следующее:

  1. менеджер IIS
  2. пулов приложений
  3. Найти пул приложение принадлежит (для меня это было .NET v4.5)
  4. правой кнопкой мыши -> Расширенные настройки
  5. прокрутки вниз Identity
  6. Измените что-нибудь (для меня это было ApplicationPoolIdentity, как и у вас) в LocalSystem.
0

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

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

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

0

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

В случае Log; Я видел эти 2 ошибки:

Windows API call SHGetKnownFolderPath returned error code: 5. Windows system error message is: Access is denied. 

Не удается получить локальный путь данных приложения. Скорее всего, профиль пользователя не загружен. Если 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 Application. Итак, я изменил учетные данные как другой пользователь (мой пользователь, который является администратором, но я верю, что без разрешения администратора он тоже будет работать).

Так в основном:

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

  • мыши Basic Settings на правой панели

  • нажмите Connect As

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

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

  • Тогда в Application Pool установить Identity to LocalSystem

Смежные вопросы