При работе серверного приложения возникает нехороший Invalidoperationexception.
Локализировать место вылета не удаётся (возникает только при большой нагрузке и у стороны клиента). Но все обращения к БД находятся в следующем участке кода:
DBR _dbr = new DBR(); //класс для работы с БДstatic ManualResetEvent _mre = new ManualResetEvent(true);
public void Transfer(object o)
{
//Запрос существующих устройств
_mre.Reset();
_emeiList = _dbr.GetIMEIs();
_mre.Set();
Connection conn = (Connection)o;
Socket s = conn._socket;
byte[] buffer = new byte[17];
//Получение заголовка пакета устройства
...
//Проверка заголовка на наличие его в нашем спискеif (_emeiList.IndexOf(avlfp._imeiASCII) == -1)
{
//Отменяем получение
...
}
_dbr.UpdateDate(avlfp._imeiASCII, true);
//Проверка заголовка на необходимость обрабатывать данные с устройстваif (!_dbr.IsConnect(avlfp._imeiASCII))
{
//Отменяем получение
...
}
//Принимаем данные
...
//Сохраняем запись
_mre.Reset();
_dbr.SaveResult(avlPacket);
_mre.Set();
//Подтверждаем приём данных
...
}
}
Понимаю, что проблема возникает при одновременном запуске нескольких функций Transfer. Подскажите как найти место вылета исключения?
Здравствуйте, lasTvegas, Вы писали:
T>…Подскажите как найти место вылета исключения?
Скомпилировать в дебаге со включёнными символами (pdb) и нагрузить? Тогда, при вылете в Exception::ToString() будет номер строки. Если залогировать, то позже можно будет посмотреть.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, lasTvegas, Вы писали:
T>Понимаю, что проблема возникает при одновременном запуске нескольких функций Transfer. Подскажите как найти место вылета исключения?
пробовали отдать им бинарники с pdb файлами и потом в логах (или где-нить на фейсе) посмотреть строчку?
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, lasTvegas, Вы писали:
T>>…Подскажите как найти место вылета исключения?
_FR>Скомпилировать в дебаге со включёнными символами (pdb) и нагрузить? Тогда, при вылете в Exception::ToString() будет номер строки. Если залогировать, то позже можно будет посмотреть.
Имеете в виду Написать что-то на подобие такого
Void Transfer(object o)
{
try{
//Весь код метода
...
}
catch(Exeptio e)
{
//запись в файл лога
fs.Write(bytes, 0, bytes.Length);
}
}
Здравствуйте, lasTvegas, Вы писали:
T>>>…Подскажите как найти место вылета исключения? _FR>>Скомпилировать в дебаге со включёнными символами (pdb) и нагрузить? Тогда, при вылете в Exception::ToString() будет номер строки. Если залогировать, то позже можно будет посмотреть. T>Имеете в виду Написать что-то на подобие такого