Использование Azure с SQL Server. В 30% случаев, когда SimpleRoleProvider неявно называется, мы получаем ошибку: Named Pipes Provider, ошибка: 40 - Не удалось открыть соединение с SQL Server. Ошибка возникает часто, но не воспроизводима. Это выглядит как тайм-аут ..Azure и SQL Server: поставщик Named Pipes, ошибка: 40 - Не удалось открыть соединение с SQL Server
[Authorize(Roles = "Administrator")]
public class AdminController : Controller
{
...
}
Трассировка стека выглядит следующим образом:
[Win32Exception (0x80004005): Access is denied]
[SqlException (0x80131904): Произошла ошибка сети связанных или экземпляра конкретных при установлении соединения с SQL Server , Сервер не найден или не был доступен. Проверьте правильность имени экземпляра и настройте SQL Server для удаленного подключения. (поставщик: поставщик Named Pipes, ошибка: 40 - не удалось открыть соединение с SQL Server)] System.Data.SqlClient.SqlInternalConnection.OnError (исключение исключения SqlException, логическое разрытие соединения, действие 1 wrapCloseInAction) +5296071 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +558 System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover) +5308555 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) +145 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) +889 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) +307 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions) +434 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +225 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) +37 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnectionOptions userOptions) +558 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnectionOptions userOptions) +67 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +1052 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource
1 повтор, DbConnectionOptions userOptions, DbConnectionInternal & соединение) +78 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection (DbConnection owningConnection, TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +167 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource
1 повторных попыток, DbConnectionOptions userOptions) +143 System.Data.SqlClient.SqlConnection.TryOpen (TaskCompletionSource`1 повторных попыток) +83 System.Data.SqlClient .SqlConnection.Open() +96 System.Web.DataAccess.SqlConnectionHolder.Open (контекст HttpContext, Boolean revertImpersonate) +88 System.Web.DataAccess.SqlConnectionHelper.GetConnectio п (String ConnectionString, Boolean revertImpersonation) +239 System.Web.Security.SqlRoleProvider.GetRolesForUser (String имя пользователя) +762 WebMatrix.WebData.SimpleRoleProvider.GetRolesForUser (String имя пользователя) +54 System.Web.Security.RolePrincipal.IsInRole (Роль строки) +9461104
У нас нет этой проблемы на нашем собственном сервере. Это проблема конфигурации? Мы используем бесплатную версию Azure.
--- Сложение ---
Плохо то, что MVC-основа "обрабатывает" запрос, в данном примере (Role Management). Использование фреймворка заключается в том, чтобы добавить слой абстракции для удобной обработки запроса домена. Так что делать в этом случае?
Заранее благодарим за любую помощь!
Странно, но мы чувствуем, что ошибка происходит чаще, используя IExplorer (против Chrome). – Gerard
Я не думаю, что это проблема, связанная с браузером. Откуда вы подключаетесь к БД? Ваш веб-сервер на посылке? – QFDev
База данных - это база данных Azure. Да, вы правы, это не может быть проблемой браузера. Тем не менее, статистически, Chrome работает лучше (!?!?) – Gerard