none
「トランスポート レベルのエラー」が発生する場合の対処について RRS feed

  • 質問

  • お世話になりま

    表題の通り下記のエラーが出ています。

    「System.Data.SqlClient.SqlException: サーバーに要求を送信しているときに、トランスポート レベルのエラーが発生しました。 (provider: TCP プロバイダ, error: 0 - 既存の接続はリモート ホストに強制的に切断されました。)」

    結構前から出ているのですが、

    業者にSQLとIpvについて調べていただきましたが、ログ上特に問題なしとのことでした。

    ※離れたところに支店がありIPVでつながっています。サーバーは、その一方にありIPV経由の場所で使用する際このメッセージが出ます。

    IPV(cisco同士で接続しています。)特に問題がないようです。どのようにしたらいいでしょうか?エラーが出た時の全文は以下です。

    その下の「タイムアウトに達しました」もたまに出ますが、頻度的には上部なのでそちらのアドバイス優先がありがたいです。

    System.Data.SqlClient.SqlException: サーバーに要求を送信しているときに、トランスポート レベルのエラーが発生しました。 (provider: TCP プロバイダ, error: 0 - 既存の接続はリモート ホストに強制的に切断されました。)
       場所 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
       場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
       場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
       場所 System.Data.SqlClient.TdsParserStateObject.WriteSni()
       場所 System.Data.SqlClient.TdsParserStateObject.WritePacket(Byte flushMode)
       場所 System.Data.SqlClient.TdsParserStateObject.ExecuteFlush()
       場所 System.Data.SqlClient.TdsParser.TdsExecuteRPC(_SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj, Boolean isCommandProc)
       場所 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
       場所 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
       場所 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
       場所 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
       場所 Cytology.CytologyDataSetTableAdapters.MasterTableTableAdapter.UpdateQueryForResult(String ShindanCode, String Shindan, String ShindanBethesda, String Shoken, Nullable`1 HoukokuDone, String HoukokuDate, Nullable`1 ShidouI, String ShidouIDate, String ShidouIMei, String ScreenerKbn1, String HyohonID)
       場所 Cytology.InputDataForm.MyUpdate()
       場所 Cytology.InputDataForm.button1_Click(Object sender, EventArgs e)
       場所 System.Windows.Forms.Control.OnClick(EventArgs e)
       場所 System.Windows.Forms.Button.OnClick(EventArgs e)
    
    
    
    
    System.Data.SqlClient.SqlException: タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。
       場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
       場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
       場所 System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
       場所 System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
       場所 System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
       場所 System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt, Boolean trustServerCert, Boolean& marsCapable)
       場所 System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject, Boolean withFailover)
       場所 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject, Boolean withFailover)
       場所 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
       場所 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
       場所 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
       場所 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
       場所 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
       場所 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
       場所 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
       場所 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
       場所 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
       場所 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
       場所 System.Data.SqlClient.SqlConnection.Open()
    

    2016年12月12日 7:39

回答

  • Microsoft Japan SQL Server Support Teamのブログにトラブルシューティングの解説がございました。

    対応方法の記述もございます。

    Troubleshooting Connectivity #3 – 予期しない接続切断
    https://blogs.msdn.microsoft.com/jpsql/2012/07/16/troubleshooting-connectivity-3/

    • 回答としてマーク ferret001 2016年12月13日 6:22
    2016年12月13日 2:42

すべての返信

  • フォーラム オペレーターの栗下 望です。
    ferret001 さん、こんにちは。

    ご質問いただいた内容につきましては、
    ”SQL Server” カテゴリのほうが、情報が集まりやすいと思われるため、
    移動させていただきました。

    SQL Server

    ご自身のスレッドは、「クイックアクセス」の「マイスレッド」の一覧で確認することが出来ます。

    フォーラム ユーザーからの回答がお役にたちましたら、
    投稿者からの[回答としてマーク] をお願いします。

    どうぞよろしくお願いいたします。


    MSDN/TechNet Community Support 栗下 望

    2016年12月12日 8:32
    モデレータ
  • Microsoft Japan SQL Server Support Teamのブログにトラブルシューティングの解説がございました。

    対応方法の記述もございます。

    Troubleshooting Connectivity #3 – 予期しない接続切断
    https://blogs.msdn.microsoft.com/jpsql/2012/07/16/troubleshooting-connectivity-3/

    • 回答としてマーク ferret001 2016年12月13日 6:22
    2016年12月13日 2:42
  • お世話になります。

    なかなか、難しい内容のようですが、思うにtry~chatchブロックの中にアクセス文を書いて失敗したら「接続エラー発生後のリトライの仕組みを実装」するようにと読み解きました。

     実際、すべてを変更するのはかなり困難なようですがそうするより仕方ないようですね。

    でも、try~catchでこのエラーかどうかって普通どうやって見つけますか?

    ex.Message.Contains("トランスポート レベル");とか?

    頑張ってみます!

    2016年12月13日 6:22
  • 単純にSqlExceptionをひらえばいいのではないでしょうか?

    https://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlexception.aspx

    2016年12月13日 8:58