Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для kmi
55 / 55 / 14
Регистрация: 26.04.2010
Сообщений: 177
.NET 3.x

Стала возникать ошибка при запросе данных из БД (БД не подвергалась изменениям)

06.09.2012, 16:24. Показов 2166. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллеги, помогите разобраться.
Имеем web-приложение ASP.NET, на одной из страниц которого используется Silverlight для показа интерактивной карты. Приложение сделано не мной и давно. Данные для отображения загружаются из БД посредством WCF-сервиса. И данные, и код не менялись минимум полтора года, и до последнего времени работали корректно. Сначала выводилась общая карта объекта, а по клику на определённой области выводилась карта выбранного региона.
Ни с того, ни с сего (как уверяет заказчик) при клике по одному из регионов пользователю стала выводится ошибка [HttpWebRequest_WebException_RemoteServer]... (см. вложение). Проверил код, проверил данные - ничего не менялось.
В FireBug посмотрел запросы. На post для любого региона всегда приходят корректные данные со статусом 200 OK, а для этого - всегда 502 Bad Gateway.
Решил посмотреть ситуацию подробнее в SOA. Задаю адрес сервиса, задаю заголовки (для всех регионов, понятно, одни и те же):

Content-Length: 385
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://www.company.ru/Map/Silverlight/Service/IMapService/GetRegion"

Задаю текст запроса, сначала для "нормального" региона:

XML
1
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><GetRegions xmlns="http://www.company.ru/Map/Silverlight/Service"><regionKey xmlns:d4p1="http://www.company.ru/Map/Silverlight/Service/RegionKey" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><d4p1:RegionID>550000</d4p1:RegionID><d4p1:SubjectID i:nil="true" /></regionKey></GetRegions></s:Body></s:Envelope>
Посылаю запрос. Приходит корректный ответ. Статус 200.
Теперь создаю запрос для "проблемного" региона - он отличается только одним знаком: вместо 550000 ставлю 530000:

XML
1
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><GetRegions xmlns="http://www.company.ru/Map/Silverlight/Service"><regionKey xmlns:d4p1="http://www.company.ru/Map/Silverlight/Service/RegionKey" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><d4p1:RegionID>530000</d4p1:RegionID><d4p1:SubjectID i:nil="true" /></regionKey></GetRegions></s:Body></s:Envelope>
И в обратку получаю ошибку 502 Bad Gateway. В ответе содержится такая информация:

(104) Connection reset by peer. An error condition occurred while reading data from the network. Please retry your request.

Смотрю лог IIS 7. Там запись:

2012-09-05 13:24:30 195.239.66.230 33601 178.74.128.183 80 HTTP/1.0 POST /services/map/mapservice.svc - 1 Connection_Dropped DefaultAppPool

Чем эта ситуация может быть вызвана?
Миниатюры
Стала возникать ошибка при запросе данных из БД (БД не подвергалась изменениям)  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.09.2012, 16:24
Ответы с готовыми решениями:

Стала возникать ошибка NullReferenceException при отделении части кода в отдельную библиотеку
int numOfDoubleEl = 0; for (int numElements1 = 0; numElements1 &lt; Library.cities.Length; numElements1++) ...

Стала возникать "Ошибка при создании формы" после публикации
Накануне вечером запускал нормально. После полез в свойства проекта, воспользовался функцией публикация. Большое ничего не трогал. ...

Стала возникать ошибка в проекте (скнрин)
Всем доброе утро! Не могу понять ошибку,так как ее раньше не когда не было ! Кто пожет помочь плз! Отпишите!

7
 Аватар для kmi
55 / 55 / 14
Регистрация: 26.04.2010
Сообщений: 177
06.09.2012, 16:26  [ТС]
И самое интересное, если я вместо 530000 ставлю любое другое целое число, хоть отрицательное, возвращается корректный ответ со статусом 200.
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
06.09.2012, 16:45
а в каком виде храниться карта?
логирование есть?
может при чтении из бд по id, который вы передаете, ошибка вываливается и не происходит обработка искл. ситуации. в любом случае было бы неплохо глянуть код, который обрабатывает этот запрос.

Добавлено через 2 минуты
а вообще посмотрите в базе регион по этому id, мне кажется его может не быть.
0
 Аватар для kmi
55 / 55 / 14
Регистрация: 26.04.2010
Сообщений: 177
06.09.2012, 17:48  [ТС]
Цитата Сообщение от kenny69 Посмотреть сообщение
а в каком виде храниться карта?
логирование есть?
может при чтении из бд по id, который вы передаете, ошибка вываливается и не происходит обработка искл. ситуации. в любом случае было бы неплохо глянуть код, который обрабатывает этот запрос.

Добавлено через 2 минуты
а вообще посмотрите в базе регион по этому id, мне кажется его может не быть.
Карта хранится в бинарном виде в БД. Данные карты и код обработки не менялись.
Вызывающая функция делает простой LINQ-запрос к БД, который до последнего времени проходил корректно, в т.ч. и к данным "ошибочного" региона.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Service 
 
public IEnumerable<PathMarkup> GetRegions(RegionKey regionKey)
{
    return WCFServiceOperationWrapper.Execute<IEnumerable<PathMarkup>>(() =>
        {
            return new MapDataRepository().GetRegions(regionKey.RegionID, regionKey.SubjectID)
                .Select(r => new PathMarkup()
                {
                    RegionKey = new RegionKey() 
                    {
                        RegionID = r.REGION_ID != 0 ? r.REGION_ID : (int?)null,
                        SubjectID = !String.IsNullOrEmpty(r.SUBJECT_ID) ? r.SUBJECT_ID : null
                    },
                    RegionName = r.vw_dict_MapRegions.NAME,
                    Value = r.PATH_MARKUP.ToArray(),
                    BackgroundType = r.BACKGROUND_TYPE,
                    BoundaryType = r.BOUNDARY_TYPE
                }).ToList();
        });
}
 
 
// MapDataRepository
 
public List<dict_mapv_RegionPathMarkup> GetRegions(int? RegionID, string subjectID)
{
    using (var context = new RegionsDataContext())
    {
        var dlo = new DataLoadOptions();
        dlo.LoadWith<dict_mapv_RegionPathMarkup>(r => r.vw_dict_MapRegions);
        context.LoadOptions = dlo;
 
        IQueryable<dict_mapv_RegionPathMarkup> result;
        
        if(RegionID == null && subjectID == null) // полная карта
            result = context.dict_mapv_RegionPathMarkups.Where(r => r.REGION_ID != 0 && r.SUBJECT_ID == ""); 
        else if (RegionID != null && subjectID == null) // это один регион                    
            result = context.dict_mapv_RegionPathMarkups.Where(r => r.REGION_ID == RegionID.Value && r.SUBJECT_ID != "");
        else
            result = new List<dict_mapv_RegionPathMarkup>().AsQueryable();
        //Теперь исключаем пути без соответствующих регионов
        result = result.Where(r => r.vw_dict_MapRegions != null);
        return result.ToList();                             
    }
}
Добавлено через 46 минут
На http://support.microsoft.com/kb/937692/ru нашёл такую инфу:

Сообщение об ошибке «Connection_Dropped» создается, если выполняются следующие условия:
•HTTP-клиент отправляет запрос HTTP IIS.
•IIS получил запрос и началась обработать ответ.
•Соединение между клиентом и сервером закрывается до отправки полного ответа.

Примечание Ведение журнала данных включает в себя полный ответ.
В этих условиях драйвер Http.sys не может разрешить подключение. Тем не менее драйвер Http.sys не может немедленно уничтожить исходный объект подключения. Соединения в этом состоянии также называются «зомби подключений».

Драйвер Http.sys добавляет в список «зомби соединения». Так как исходный объект подключения по-прежнему доступен, исходный объект сведения о соединении могут быть включены в данные ведения журнала после завершения запроса. Если ответ будет завершена достигнуто значение времени ожидания, используемый драйвером Http.sys, информация не регистрируется в файле Httperr.log. Вместо этого код состояния записывается в журнал IIS. Например, «HTTP 200-OK» код состояния заносится в журнал IIS, когда запрос выполняется успешно.

Тем не менее при обработке ответа дольше, чем значение времени ожидания, используемый драйвером Http.sys, драйвер Http.sys уничтожает исходный объект подключения. Затем драйвер Http.sys записывает сообщение об ошибке «Connection_Dropped» в файл Httperr.log.
Т.е. получается, что запрос поступает на сервис и начинает обрабатываться, но драйвер перекрывает соединение до того, как обработка заканчивается.

Но почему это происходит при указании id 530000 и не происходит при 550000 или 530001?
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
06.09.2012, 18:10
в методе репозитория вроде все норм.

а в методе сервиса попробуйте поставить в try/catch и залогируйте ошибку.
т.к. некоторые переменные могут быть равны null.

Не по теме:

Ps: как вариант, может, заказчик попробовал влезть в бд. и возможно что-то изменял...

0
 Аватар для kmi
55 / 55 / 14
Регистрация: 26.04.2010
Сообщений: 177
07.09.2012, 09:32  [ТС]
Цитата Сообщение от kenny69 Посмотреть сообщение
в методе репозитория вроде все норм.

а в методе сервиса попробуйте поставить в try/catch и залогируйте ошибку.
т.к. некоторые переменные могут быть равны null.

Не по теме:

Ps: как вариант, может, заказчик попробовал влезть в бд. и возможно что-то изменял...

Данные я проверил, буквально сопоставив каждую запись побайтно, включая бинарные значения. Изменений нет.

Поставить логгер можно, но закинуть изменения на сайт сложно. Сайт под большой нагрузкой, выдаёт важную информацию пользователям и должен работать 24 часа в сутки 7 дней в неделю. Карта тут только один из индикаторов. Конечно, если других способов не будет, придётся останавливать.

Я попробовал прокинуть на сервис заведомо попорченные разным способом запросы. Ответы возвращались вполне адекватные. Попробовал в т.ч. и вызвать исключение. Вернулась ошибка 500 Internal Server Error - опять-таки вполне адекватно. Т.е. при возникновении исключения непредвиденного разрыва соединения не возникает. И Connection_Dropped в логе IIS не появляется.

Добавлено через 4 минуты
А могут каким-то образом на ситуацию влиять сетевые фильтры или антивирусы?
0
 Аватар для kmi
55 / 55 / 14
Регистрация: 26.04.2010
Сообщений: 177
10.09.2012, 17:44  [ТС]
Уточнение: в логе IIS "ошибочный" запрос не регистрируется, а в логе httperr.log (драйвера http.sys) фиксируется указанный Connection_Dropped.

Добавлено через 4 часа 48 минут
Ещё одно уточнение.
Согласно рекомендации статуса 104, стал посылать один и тот же запрос. Из сотни посылов 4 вернули корректные данные, а остальные - всё ту же ошибку Bad Gateway.
0
 Аватар для kmi
55 / 55 / 14
Регистрация: 26.04.2010
Сообщений: 177
19.09.2012, 11:41  [ТС]
Проблема решена. Некорректно работал балансировщик, отсекая ответы, в которых содержалось слишком большое количество данных, если узел, с которого загружались данные, находился под большой нагрузкой. Уменьшили объём возвращаемых данных.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.09.2012, 11:41
Помогаю со студенческими работами здесь

На сайте стала возникать ошибка 451
Скажите, пожалуйста, что случилось с данным сайтом autohouse.sumy.ua, что это за ошибка 451, чем она вызвана и как исправить. В пятницу...

В мониторе стабильности системы стала возникать ошибка APPCRASH svchost.exe
Описание Неправильный путь приложения: C:\Windows\System32\svchost.exe Сигнатура проблемы Имя проблемного события: APPCRASH Имя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru