Bezdepbonusu7Программирование: статьи и ответы

Вопрос

C #: номер строки на трассировке стека указывает на строку с символом}

Автор вопроса: bdwakefieldОтветов: 2

Есть предложения по решению этой проблемы? Я все время придумываю "отсутствующие" номера строк, когда обращаюсь к машине Google, и это не проблема, с которой мы сталкиваемся. У нас есть номер строки, но он не указывает ни на что, кроме закрывающей скобки.

Может быть, это тайм-аут? Кажется странным, что он постоянно отказывается от метода в самом конце, и от того же метода не меньше. Тайм-ауты не обязательно бывают частыми, и приложение (выигрышные формы, вызывающие веб-службу asmx) время от времени выдает тайм-аут в других местах.

Изменить: трассировка кода и стека.

public DataSet GetData(...)
{
   // About 18 try/catch blocks loading tables in dataset, all similar to below
   try
   {
      // Create Table Adapter
      // Fill Table
   }
   catch (Exception ex)
   {
      LogError(ex, System.Reflection.MethodBase.GetCurrentMethod(), null);
      throw ex;
   }
}  //Line 479

System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException: серверу не удалось обработать запрос. ---> System.Data.SqlClient.SqlException: истекло время ожидания. Время ожидания истекло до завершения операции или сервер не отвечает. at MonitoringDataService.AddAllData (DataSet Data, DateTime LastSync, String PrevAreas, String NewAreas, DateTime PrevStartDate, DateTime PrevEndDate, DateTime NewStartDate, DateTime NewEndDate, Int32 CurrentUser, логическая строка IsInGroup9: строка MonitoringData

Стоит отметить, что это внутреннее исключение.

  • Вы забыли опубликовать код и трассировку стека. Мы не можем прочитать это отсюда. Cody Gray 05.04.2011
  • Пытался не избавляться от лишнего. Код добавлен. bdwakefield 05.04.2011
  • Да, настоящая проблема в том, что у вас есть все эти блоки try / catch. Для этого нет веской причины. Вторая проблема заключается в том, что вы используете throw ex вместо throw. Это уже обсуждалось здесь несколько раз. Например, см. здесь. Лучший способ решить проблему - удалить все блоки try / catch и только перехватить те ошибки, которые вы обрабатываете явным образом. Есть лучшие способы регистрировать исключения; вы не должны делать все это встроенным. Cody Gray 05.04.2011
  • +1 за помощь с излишней снисходительностью. bdwakefield 05.04.2011
  • Извините, я не имел в виду снисходительность. Я полагаю, что отсылка вас к другим вопросам для обсуждения throw и throw ex может показаться снисходительной, но просто там уже была предоставлена ​​хорошая информация. Я не хочу дублировать это здесь, и я не смог бы сделать такую ​​же работу, как другие, которые уже опубликовали. Cody Gray 05.04.2011
  • Наверное, было не так плохо, как это читалось в моей голове, по крайней мере, уже несколько раз; Двигаясь дальше, я полностью за то, чтобы не дублировать обсуждение, так что это нормально. Однако я был бы больше заинтересован в лучших методах ведения журнала. Насколько я понимаю, это довольно самодостаточная вещь, и она сохраняет всю эту информацию в базе данных ... неожиданный сюрприз, что таблица достигла 5 миллионов записей за несколько недель и в основном все залила водой. bdwakefield 05.04.2011

timeoutexception-handling

Ответы

Ответ 1 · рейтинг 4 · Aliostad

Вероятные причины:

  • Выполняемый код отличается от источника, из которого вы выполняете отладку. Это наиболее вероятная причина.
  • Строка может быть строкой после throw new exception(...)

Ответ 2 · рейтинг 3 · FreeAsInBeer

Скорее всего, ошибка не в конечной скобке, а в строке перед ней.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы