我想首先声明我不是网络人,所以我不知道这些警告/错误有多严重。正在运行的服务似乎正在创建一堆“无效数据类型”警告,这些警告在 Wireshark 跟踪中显示为“格式错误的数据包”。WireShark 跟踪太大,无法在此处附加,但我将在其中发布关键组件。
在 Wireshark 中,当我单击“专家信息”时,它会显示一个数据包列表。出现称为“无效数据类型”的某个“警告”。当我展开此警告时,有一堆“远程过程调用[格式错误的数据包]/协议/TDS 条目。
我单击第一个,它直接将我带到跟踪中的这个数据包。在那里,它表明“参数”的长度无效。
名称长度:62 名称:名称:\340\240\213@ENDTIME\342\250\200\340\240\207\350\274\240\341\204\276\346\225\226\340\254 \276\344\200\211\344\270\200\345\224\200\344\264\200\345\220\200\345\210\200\344\204\200\344\270\200 \345\214\200 类型信息(无效数据类型:00)
如果我将此“作为可打印文本”复制,它会显示一堆随机字符:
@ENDTIME* >Ve> @NUMTRANS& @NUMPAGES& @NUMCHECKS&@BATC
我不知道“* >Ve>”是从哪里来的。它肯定不在代码中。
如果我备份到为此数据包传入的第一个参数,它会为我提供导致问题的整个查询。
长度:552 数据 [截断]:插入 stats.FFX_BATCHINFO(BATCHNUMBER,BATCHTYPE,SCANSTATIONID,SCANUSERID,STARTTIME,ENDTIME,NUMTRANS,NUMPAGES,NUMCHECKS,BATCHTOTAL)值(@BATCHNUMBER,@BATCHTYPE,@SCANSTATIONID,@SCANUSERID,@STARTTIME ,
我还注意到它上面的查询在@STARTTIME 停止。根据代码,下一个参数是@ENDTIME,这是它似乎有问题的参数。
该查询的代码如下所示:
string query = string.Format("Insert Into {0}(BATCHNUMBER, BATCHTYPE, SCANSTATIONID, SCANUSERID, STARTTIME, ENDTIME"
+ ", NUMTRANS, NUMPAGES, NUMCHECKS, BATCHTOTAL, SOLUTIONINTERNALID"
+ ")"
+ " Values(" +
dbManager.ParamName("BATCHNUMBER") + ", " + dbManager.ParamName("BATCHTYPE") + ", " + dbManager.ParamName("SCANSTATIONID")
+ ", " +
dbManager.ParamName("SCANUSERID") + ", " + dbManager.ParamName("STARTTIME") + ", " + dbManager.ParamName("ENDTIME")
+ ", " +
dbManager.ParamName("NUMTRANS") + ", " + dbManager.ParamName("NUMPAGES") + ", " + dbManager.ParamName("NUMCHECKS")
+ ", " + dbManager.ParamName ("BATCHTOTAL") + ", " + dbManager.ParamName ("SOLUTIONINTERNALID")
+ ")", GlobalUtil.TableWithSchema ( "FFX_BATCHINFO"));
dbManager.OpenConnection();
dbManager.BeginTransaction();
IDbCommand idbCommand = null;
idbCommand = dbManager.GetCommand(CommandType.Text, query);
idbCommand.Parameters.Add(dbManager.CreateParam("@BATCHNUMBER", DbType.String, batchInfo.BATCHNUMBER));
idbCommand.Parameters.Add(dbManager.CreateParam("@BATCHTYPE", DbType.String, batchInfo.BATCHTYPE));
idbCommand.Parameters.Add(dbManager.CreateParam("@SCANSTATIONID", DbType.String, batchInfo.SCAN_STATIONID));
idbCommand.Parameters.Add(dbManager.CreateParam("@SCANUSERID", DbType.String, batchInfo.SCAN_USERID));
idbCommand.Parameters.Add(dbManager.CreateParam("@STARTTIME", DbType.DateTime2, batchInfo.STARTTIME));
idbCommand.Parameters.Add(dbManager.CreateParam("@ENDTIME", DbType.DateTime2, batchInfo.ENDTIME));
idbCommand.Parameters.Add(dbManager.CreateParam("@NUMTRANS", DbType.Int32, batchInfo.NUMTRANS));
idbCommand.Parameters.Add(dbManager.CreateParam("@NUMPAGES", DbType.Int32, batchInfo.NUMPAGES));
idbCommand.Parameters.Add(dbManager.CreateParam("@NUMCHECKS", DbType.Int32, batchInfo.NUMCHECKS));
idbCommand.Parameters.Add(dbManager.CreateParam("@BATCHTOTAL", DbType.Double, batchInfo.BATCHTOTAL));
idbCommand.Parameters.Add(dbManager.CreateParam("@SOLUTIONINTERNALID", DbType.Int64, batchInfo.SOLUTIONINTERNALID));
dbManager.ExecuteNonQuery();
dbManager.DisposeCommand();
dbManager.CommitTransaction();
所以,我不知道随机字符是如何或在哪里附加到数据包中的参数的。
任何帮助,将不胜感激。
附加信息:
- 服务正在使用 .Net Framework 4。
- 该服务在 Windows Server 2012 R2 上运行。
- 它连接的数据库是 SQL Server 2014。