2015-03-24 3 views
0

После реализации кэширования для моего приложения ASP MVC 5 и использования SqlDependency и сервис-брокера все отлично работает в локальной базе данных. Я получаю уведомления, когда в базе данных происходит определенное изменение.Метод SqlDependency.Start завершается с ошибкой после развертывания

Однако после развертывания приложения на рабочую машину, вызов SqlDependency.Start (строка ConnectionString) терпит неудачу, бросая исключение:

System.Data.SqlClient.SqlException: Login failed for user 'sa'. 

со следующей трассировкой стеки (системные вызовы включены, звонки в моем приложении код - исключен):

[SqlException (0x80131904): Login failed for user 'sa'.] 
    System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +6749670 
    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +815 
    System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4515 
    System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +84 
    System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) +53 
    System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) +368 
    System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) +6777754 
    System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) +6778255 
    System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData) +878 
    System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +1162 
    System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) +72 
    System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +6781425 
    System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +103 
    System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +2105 
    System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +116 
    System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +1089 
    System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +6785863 
    System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +233 
    System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +278 
    System.Data.SqlClient.SqlConnection.Open() +239 

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

Я вполне уверен, что сервисный брокер включен для производственной БД.

Какую конфигурацию IIS следует учитывать, что может вызвать эту разницу? Я использую Sql Server Express на данный момент. Кроме того, я не использую SqlCacheDependency, а только SqlDependency.

ответ

1

Это не проблема с сервис-брокером.

Ошибка: Войти Сбой пользователя «са»

Проверьте свои учетные данные подключения. Поддерживает ли ваше приложение учетные данные для изменения во время выполнения? Я бы рекомендовал вам разрешить гибкую настройку при развертывании.

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

+0

Учетные записи DB не изменяются нигде в приложении. Также обратите внимание, что одна и та же строка соединения (которая передается SqlDependency.Start) с одинаковыми учетными данными используется на сервере ASP для всего доступа к БД. Все остальное на веб-сайте работает так, как ожидалось, помимо представлений, относящихся к кешу (SqlDependency должен знать, когда истекает срок записи в кеш). Связанное действие контроллера - это то, где вызывается SqlDependency.Start и где он терпит неудачу. – pbalaga

+0

Вы уверены, что строка соединения в SqlDependency.Start (connectionString) такая же, как и в других местах? При сбое SqkDependency вы получаете ошибки в следующих строках: Брокер службы SQL Server для текущей базы данных не включен – reckface

+0

Также проверьте, используете ли вы интегрированную защиту. – reckface

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