2016-07-22 102 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,請務必嘗試此操作