Служба C #, вызывающая ошибки «Недопустимый тип данных» в трассировке Wireshark. Параметр запроса содержит странные символы - PullRequest
0 голосов
/ 26 июня 2018

Я хочу начать с заявления, что я не сетевой человек, поэтому я не знаю, насколько серьезны эти предупреждения / ошибки. Служба, которая работает, похоже, создает кучу предупреждений о «недопустимом типе данных», которые отображаются в виде «неправильно сформированных пакетов» в трассировке Wireshark. Трассировка WireShark слишком велика, чтобы прикреплять ее здесь, но я опубликую ключевые компоненты на ней.

В Wireshark, когда я нажимаю «Информация об эксперте», он показывает мне список пакетов. Появляется определенное «Предупреждение», которое называется «Неверный тип данных». Когда я раскрываю это предупреждение, появляется куча записей «Удаленный вызов процедуры [Malformed Packet] / Protocol / 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.
...