SqlConnection.Open随机失败

时间:2016-11-21 10:15:42

标签: sql-server sqlconnection

我一直面临一个奇怪的问题。我有一个如下代码片段:

SqlTransaction transaction = null;
SqlDataReader reader = null;

using (SqlConnection sqlConnection = new SqlConnection(_sqlEndpoint.ConnectionString))
{
     sqlConnection.Open(); **// Randomly fails here**

    try
    {
        switch (_sqlEndpoint.ResultType)
        {
        case ResultSetType.None:
            transaction = sqlConnection.BeginTransaction();
            using (SqlCommand command = new SqlCommand(_sqlEndpoint.Query, sqlConnection, transaction))
            {
                command.CommandTimeout = _sqlEndpoint.CommandTimeout;
                int rowsAffected = command.ExecuteNonQuery();
                exchange.Message.SetHeader("RowsAffected", rowsAffected);
            }
            break;

        case ResultSetType.Single:
            using (SqlCommand command = new SqlCommand(_sqlEndpoint.Query, sqlConnection))
            {
                command.CommandTimeout = _sqlEndpoint.CommandTimeout;
                exchange.Message.Body = command.ExecuteScalar();
            }
            break;

        default:
            using (SqlCommand command = new SqlCommand(_sqlEndpoint.Query, sqlConnection))
            {
                command.CommandTimeout = _sqlEndpoint.CommandTimeout;
                reader = command.ExecuteReader(CommandBehavior.CloseConnection);
                exchange.Message.Body = reader;
            }
            break;
        }
    }
    catch (SqlException ex)
    {
         Log.ErrorFormat("[{0}] Error occured while fetching data from sql server: {1}", _sqlEndpoint.RouteName, ex.Message);
    }                
}

连接打开10次中的9次然后失败,出现以下异常: "该操作对交易状态无效"

再次能够连接第11次然后第19次左右随机失败。这不会发生在开发环境中,只会在生产环境中发生。

我已经尝试/检查了以下内容:

  • 更改连接字符串以使用UserId和Password creds而不是SSPI来消除任何与AD相关的问题
  • 尝试通过调用SqlConnection.ClearPool(conn)清除池中的特定连接,以便建立新连接而不是从池中获取
  • 检查生产服务器上是否正在运行MSDTC服务

我对这个问题的想法已经不多了。我甚至不确定如何在开发机器上重现此错误。

任何帮助或指示将不胜感激。 感谢

0 个答案:

没有答案