2016-07-22 139 views
4

自从我们搬到Azure中,我们看到了几个问题,与我们的数据库。间歇System.ComponentModel.Win32Exception:网络路径找不到

System.ComponentModel.Win32Exception:网络路径找不到

有了这个调用堆栈:

System.Data.Entity.Core.EntityException: The underlying provider failed on Open. ---> System.Data.SqlClient.SqlException: 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: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) ---> System.ComponentModel.Win32Exception: The network path was not found 
    --- End of inner exception stack trace --- 
    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) 
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) 
    at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover) 
    at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) 
    at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) 
    at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) 
    at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData) 
    at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) 
    at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) 
    at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) 
    at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) 
    at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) 
    at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) 
    at System.Data.SqlClient.SqlConnection.Open() 
    at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext](TTarget target, Action`2 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed) 
    at System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(DbConnection connection, DbInterceptionContext interceptionContext) 
    at System.Data.Entity.Infrastructure.DbExecutionStrategy.<>c__DisplayClass1.<Execute>b__0() 
    at System.Data.Entity.Infrastructure.DbExecutionStrategy.Execute[TResult](Func`1 operation) 
    at System.Data.Entity.Core.EntityClient.EntityConnection.Open() 
    --- End of inner exception stack trace --- 
    at System.Data.Entity.Core.EntityClient.EntityConnection.Open() 
    at System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(Boolean shouldMonitorTransactions) 
    at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) 
    at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__5() 
    at System.Data.Entity.Infrastructure.DbExecutionStrategy.Execute[TResult](Func`1 operation) 
    at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) 
    at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0() 
    at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext() 
    at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source) 
    at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source, Expression`1 predicate) 

的recommandation是增加从S0 OU层到S1,这是我们确实,仍然没有帮助。

第二个问题是:

System.ComponentModel.Win32Exception:连接尝试失败,因为连接的方没有正确一段时间后,因为连接主机未能响应响应或已建立的连接失败

第三个是:

System.Data.SqlClient.SqlException:用户登录失败 'MyUserName输入'。

我们尝试:

public class SqlAzureConfiguration : DbConfiguration 
    { 
     public SqlAzureConfiguration() { 
      SetExecutionStrategy("System.Data.SqlClient",() => new SqlAzureExecutionStrategy()); 
     } 
    } 

没有帮助。任何想法是什么问题以及如何解决它?

编辑1:我们的网站现在不停地进行故障。我用DTU的数量进行了屏幕截图。正如你可以看到,我们有20个DTU的,它会持续在一个非常低的使用水平,甚至失败。

DTU usage

EDIT 2

我们怀疑超限会议,我们追踪那些AppInsight,仍然不是问题:Sessions numbers on AppInsight

+0

您使用的连接字符串是什么? (请删除任何敏感信息以保护您的服务器) –

+0

@drediske onnectionString =“Server = tcp:********。database.windows.net,1433; Data Source = *****。database .windows.net; Initial Catalog = Production; Persist Security Info = False; User ID = *****; Password = ****; Pooling = False; MultipleActiveResultSets = True; Encrypt = True; TrustServerCertificate = False; Connection Timeout = 30;” – MBen

+0

不确定是否相关,但是当我们收到Webhook时会发生这种情况。由于我们可以为同一家公司安装一个webhook,所以我们使用了一些锁,这可能是问题吗? – MBen

回答

0

我们从增加超时在ConnectionString:

连接超时= 30;

连接超时= 1800;

和帮助。已经有一周了,迄今为止我们还没有看到任何问题。

0

任何有此错误的人,尤其是在Azure上,都会尝试在应用程序中的连接字符串中向数据库服务器名添加“tcp:”。这迫使sql客户端使用tcp与数据库进行通信。我被默认假设连接的UDP并且可以有间歇性连接问题。这与OP发布的内容稍有不同,因为他的连接字符串有tcp,请务必尝试此操作