SQL 2008 + пул приложений IIS: не удалось создать пользовательский экземпляр SQL Server из-за сбоя при получении пути к данным локального приложения пользователя - PullRequest
1 голос
/ 27 сентября 2011

У меня проблемы с подключением к SQL Server 2008 R2 Express с базой данных Northwind с использованием ApplicationPoolIdentity в IIS 7.5, что приводит к следующему сообщению об ошибке:

Failed to generate a user instance of SQL Server due to failure in retrieving the user's local application data path. The connection will be closed.

Примечания:

  • Я использую Windows 7 / VS 2010 / IIS 7.5 / SQL Server 2008 R2 Express (все на одном компьютере).
  • мой сайт использует пул приложений "ASP.NET v4.0";
  • Пул приложений ASP.NET v4.0 использует ApplicationPoolIdentity в качестве удостоверения;
  • SQL Server 2008 R2 Express имеет имя входа «IIS APPPOOL \ ASP.NETv4.0» с предоставленной ролью сервера sysadmin;
  • В базе данных Northwind пользователь «IIS APPPOOL \ ASP.NET v4.0» настроен со следующими разрешениями: db_accessadmin, db_backupoperator, db_datareader, db_datawriter, db_ddladmin, db_securityadmin;
  • процесс w3wp.exe выполняется с пользователем «IIS APPPOOL \ ASP.NETv4.0»
  • Я вижу, что создана папка профиля пользователя (C: \ Users \ ASP.NET v4.0);
  • та же проблема возникает при использовании пула приложений "DefaultAppPool".

Если я изменю пользователя ApplicationPoolIdentity на другого пользователя, у которого есть права доступа к базе данных, он будет работать.

Дополнительная информация:

строка подключения:

<connectionStrings>
    <add name="NorthwindEntities" connectionString="metadata=res://*/NorthwindModel.csdl|res://*/NorthwindModel.ssdl|res://*/NorthwindModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=NOTEBOOK\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

Может ли кто-нибудь помочь мне решить эту проблему?

Спасибо за совет.

1 Ответ

1 голос
/ 29 сентября 2011

Похоже, что вы пытаетесь использовать функцию "экземпляра пользователя" в SQL Server Express, т.е. строка подключения выглядит следующим образом:

AttachDBFilename=|DataDirectory|xxxxxx.mdf;User Instance=true

Это не будет работать для ApplicationPoolIdentity учетных записей в IIS7.5.Для получения дополнительной информации см. Эту статью базы знаний MS:

Проблемы с экземплярами пользователей SQL Server Express и проектами веб-приложений ASP.net

Веб-приложения, созданные с помощью Visual Studio2005, Visual Studio 2008 или Visual Studio 2010, которые используют экземпляры пользователей в SQL Server Express 2005 или SQL Server Express 2008, не работают с новым удостоверением пула приложений.Эти продукты были разработаны и протестированы для пулов приложений, работающих с более старой учетной записью NETWORK SERVICE.

Также Microsoft не рекомендует использовать эту функцию сейчас:

Thisфункция будет удалена в будущей версии Microsoft SQL Server.Избегайте использования этой функции в новых разработках и планируйте модифицировать приложения, которые в настоящее время используют эту функцию.

Если вы этого еще не сделали, я бы прикрепил базу данных кSQL Express и используйте вместо этого обычную строку соединения SQL, как в производственной среде.Вам может потребоваться включить TCP / IP для вашего экземпляра SQL Express с помощью диспетчера конфигурации SQL Server, если он еще не включен:

enter image description here

и убедиться, что порт 1433 также настроен наследующая вкладка этого диалога.

...