Я хочу начать с заявления, что я не сетевой человек, поэтому я не знаю, насколько серьезны эти предупреждения / ошибки. Служба, которая работает, похоже, создает кучу предупреждений о «недопустимом типе данных», которые отображаются в виде «неправильно сформированных пакетов» в трассировке 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.