Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TDS流中的协议错误-错误_C#_Sql Server_Tcp_Connection String_Network Protocols - Fatal编程技术网

C# TDS流中的协议错误-错误

C# TDS流中的协议错误-错误,c#,sql-server,tcp,connection-string,network-protocols,C#,Sql Server,Tcp,Connection String,Network Protocols,我们有两台服务器。一个应用服务器和一个SQL server 从应用服务器运行此简单程序时: static void Main(string[] args) { OleDbCommand cmd; OleDbConnection cnn; string connectionString = "Provider=SQLNCLI10;Integrated Security=SSPI;User ID=***;Pas

我们有两台服务器。一个应用服务器和一个SQL server

从应用服务器运行此简单程序时:

 static void Main(string[] args)
        {
            OleDbCommand cmd;
            OleDbConnection cnn;
            string connectionString = "Provider=SQLNCLI10;Integrated Security=SSPI;User ID=***;Password=***;Persist Security Info=False;Initial Catalog=MCS_BATCH;Data Source=CD6S01;Initial File Name=;";
            string sql = "EXEC [msp].[MasterMSP] @BTYPE = N'B_PVM_KNN', @AC_KEY = NULL, @RUN_TS = '2014-05-02 17:29:31.1400555', @CHUNK_ID = 8794";

            System.IO.StreamWriter file = new System.IO.StreamWriter("MasterMSP_output.txt");

            cnn = new OleDbConnection(connectionString);
            try
            {
                cnn.Open();
                cmd = new OleDbCommand(sql, cnn);
                try
                {

                    OleDbDataReader reader = cmd.ExecuteReader();
                    int numberOfFields = reader.VisibleFieldCount;
                    StringBuilder sb = new StringBuilder();

                    while (reader.Read())
                    {
                        for (int i = 0; i < (numberOfFields - 1); i++)
                        {
                            file.Write(reader[i].ToString());
                        }
                        file.WriteLine("");
                    }
                    file.Close();

                }
                catch (Exception ex)
                {
                    file.Write("Execption ex at : {0}", System.DateTime.Now);
                    file.Write(ex.Message.ToString());

                    Console.WriteLine("Exception ex time is : {0}", System.DateTime.Now);
                    throw;
                }

                cmd.Dispose();
                cnn.Close();
            }
            catch (Exception exx)
            {
                file.Write("Execption exx at : {0}", System.DateTime.Now);
                file.Write(exx.Message.ToString());
                Console.WriteLine("Exception exx time is : {0}", System.DateTime.Now);
                throw;
            }
        }
static void Main(字符串[]args)
{
OleDbCommand cmd;
OLEDB连接cnn;
string connectionString=“Provider=SQLNCLI10;Integrated Security=SSPI;User ID=***;Password=***;Persist Security Info=False;Initial Catalog=MCS_BATCH;Data Source=CD6S01;Initial File Name=;”;
string sql=“EXEC[msp].[MasterMSP]@BTYPE=N'B_PVM_KNN',@AC_KEY=NULL,@RUN_TS='2014-05-02 17:29:31.1400555',@CHUNK_ID=8794”;
System.IO.StreamWriter file=new System.IO.StreamWriter(“MasterMSP_output.txt”);
cnn=新的OLEDB连接(连接字符串);
尝试
{
cnn.Open();
cmd=新的OleDbCommand(sql、cnn);
尝试
{
OleDbDataReader=cmd.ExecuteReader();
int numberofields=reader.VisibleFieldCount;
StringBuilder sb=新的StringBuilder();
while(reader.Read())
{
对于(int i=0;i<(numberOfFields-1);i++)
{
file.Write(reader[i].ToString());
}
file.WriteLine(“”);
}
file.Close();
}
捕获(例外情况除外)
{
Write(“Execption ex at:{0}”,System.DateTime.Now);
file.Write(例如Message.ToString());
WriteLine(“异常前时间为:{0}”,System.DateTime.Now);
投掷;
}
cmd.Dispose();
cnn.Close();
}
捕获(异常exx)
{
Write(“Execption exx at:{0}”,System.DateTime.Now);
file.Write(exx.Message.ToString());
WriteLine(“异常exx时间为:{0}”,System.DateTime.Now);
投掷;
}
}
一段时间后,我们得到一个“TDS流中的协议错误”错误:

我们运行了一个网络跟踪,我们可以看到“TCP窗口大小”在10分钟后减小,然后它发送一个TCP窗口大小=0(关闭窗口)。 这意味着SQL server在从应用程序服务器获得大于0的更新窗口大小之前无法发送更多数据。(对吗?)

SQL server正在尝试发送1字节的keepalive,但应用程序服务器从未响应。(问题是应用程序服务器再也不会提升TCP窗口大小。最后,应用程序服务器将终止会话。)

我们注意到这是应用程序服务器的故障,可能是网络缓冲区不再为空(刷新)。TCP堆栈唯一能做的就是关闭TCP窗口大小,直到应用程序再次清空缓冲区——但它永远不会这样做

关于这个问题有什么提示和想法吗? 这个问题实际上是在第三方程序中出现的。此程序正在调用SQL server上的存储过程。所以我试着在C程序中重现逻辑,并且能够重现错误

非常感谢您的任何帮助、想法或意见。
感谢将此添加到connectionstring中,修复了错误:MARS Connection=True


哪些程序的屏幕截图来自于?“CMD”和“Microsoft Network Monitor 3.4”