SQL Express под IIS 7.5 - PullRequest
       2

SQL Express под IIS 7.5

1 голос
/ 18 июня 2010

Я разрабатываю веб-сервис, который обращается к базе данных SQL Express, он очень хорошо работает на хосте Visual Studio, но при развертывании его в IIS 7.5 я получаю это исключение.

Пожалуйста, помогите мне.

Трассировка стека:

System.Data.EntityException: The underlying provider failed on Open. ---> System.Data.SqlClient.SqlException: Failed to generate a user instance of SQL Server due to failure in retrieving the user's local application data path. Please make sure the user has a local user profile on the computer. The connection will be closed.
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)
   at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
   at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
   at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
   at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.SqlClient.SqlConnection.Open()
   at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
   --- End of inner exception stack trace ---
   at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
   at System.Data.EntityClient.EntityConnection.Open()
   at System.Data.Objects.ObjectContext.EnsureConnection()
   at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
   at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
   at WSCinema.CinemaService.Movie() in D:\Documents\My Dropbox\Projects\sd.v0910\trab3\code\WSCinema\CinemaService.asmx.cs:line 46

Ответы [ 2 ]

2 голосов
/ 18 июня 2010

Учетная запись, под которой работает пул приложений вашего приложения в IIS, нуждается в доступе для записи в папку App_Data, где хранится файл базы данных (mdf). Например. если пул приложений настроен для работы в качестве сетевой службы, предоставьте разрешения этой учетной записи в папке App_Data.

Когда вы запускаете на хосте VS ваше приложение работает как ваша учетная запись пользователя, которая имеет доступ к App_Data.

1 голос
/ 18 июня 2010

Вы используете RANU, пользовательские экземпляры SQL Express.Подробнее о них см. В Пользовательские экземпляры SQL Server 2005 Express Edition .RANU создает новый экземпляр для каждого пользователя, подключающегося к исходному экземпляру SQL Express, а новый пользовательский экземпляр запускается с учетными данными пользователя.В этом случае он создаст пользовательский экземпляр под удостоверением ASP AppPool, и при попытке создать этот пользовательский экземпляр возникнет ошибка:

Не удалось создать пользовательский экземпляр SQL Server из-за сбоя при получениипуть к данным локального приложения пользователя.Убедитесь, что у пользователя есть локальный профиль пользователя на компьютере.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...