Многопоточность и обращения к БД.
От: lasTvegas Украина  
Дата: 25.05.11 09:08
Оценка:
При работе серверного приложения возникает нехороший 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. Подскажите как найти место вылета исключения?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.