Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > .net 2.0 to .net 4.0 problem


Автор: MFSham 26.2.2014, 20:25
Добрый день.

Предыстория: обновили версию веб приложения с .net 2.0 на .net 4.0. Перекомпили приложение, соответственно, под новую версию фреймворка. Так же у IIS application pool поставили настройки для 4 фреймвока (полсностью совподающие с настройками 2).

Схема работы: есть win-приложение которому на вход подлаживается файл, а оно в свою очередь отправляет этот файл на наше веб-приложение на определенную страницу (asp.net). 

Код:
Код

HttpWebRequest hwrUpload = (HttpWebRequest)WebRequest.Create(sURL);
hwrUpload.Timeout = iUploadTimeout;
hwrUpload.KeepAlive = false;
hwrUpload.ContentType = "multipart/form-data; boundary=" + sBoundary;
hwrUpload.Method = "POST";
try
{
   hwrUpload.ContentLength = msData.Length;
   Stream rsUpload = hwrUpload.GetRequestStream();
   msData.Position = 0;
   byte[] aTmpBuf = new byte[msData.Length];
   msData.Read(aTmpBuf, 0, aTmpBuf.Length);
   msData.Close();
   rsUpload.Write(aTmpBuf, 0, aTmpBuf.Length);
   rsUpload.Close();
   WebResponse wrUploadRes = hwrUpload.GetResponse(); // 111 line
   Stream rsUploadRes = wrUploadRes.GetResponseStream();
   StreamReader srUploadRes = new StreamReader(rsUploadRes);
   sResult = srUploadRes.ReadToEnd();
   wrUploadRes.Close();
}
catch(Exception E)
{
   sResult = E.ToString() + "\r\nUploading files: " + sbUploadingFileNames.ToString();
}


Наше веб-приложение из request извлекает файл, и сохраняет его в систему.

Проблема: начало появляться мистическая проблема (Internal Server Error), которая локально не повторяется и воспроизвести ее так же не получается. У клиента _иногда_ (может 2 раза в день, может раз в неделю) появляется.

Код

System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
   at System.Net.HttpWebRequest.GetResponse()
   at WebUpload.UploadFiles(String sURL, String[,] aFiles, String& sResMsg) in X\...\WebUpload.cs:line 111
Uploading files: file.abc


Данный код работал годами, пока мы всего лишь не обновили версию приложения со 2 на 4 версию. Плюс, соответственно, повесили приложение на пул для 4 фреймворка с идентичными настройками. Логи на win и web приложение я добавлял, никакой ошибки кроме представленной выше - нет. Все запросы которые приходили на web приложение - обрабатывались от и до.

Интересный момент: В тот момент когда что-то упало/перестало_работать (наше win приложение бесконечно ломится на web страничку) мы может спокойно пользоваться сайтом. Даже если взять этот url (который генерит наше win приложение и ломится на web приложение) и вставить в браузер - все пройдет на ура. Но тут все хорошо, скорее всего, из-за того что в request просто нету файла самого.
Если мы рестартанем пул приложения - все заработает (!).
Наши запросы, которые так упорно не проходили, чудесным образом вернут 200 код и файлы загрузятся в систему.


У меня большие подозрения в сторону IIS настроек. Может там что не так, я не силен в администрировании. Но сама проблема вводит меня в ступор. Локально не воспроизводится, все работает на ура. Если проблема вылазит - простой рестарт пула решает ее. Но, что собственно, рестарт дает? И означает ли это что наш код тут ни при чем?
В общем вопросов много, ответов, как таковых нет.

Автор: jonie 27.2.2014, 19:48
а что  в логах-то про 500-ую ошибку ? (например в EventLog винды)

Автор: MFSham 17.3.2014, 11:56
Не верю я в чудеса, но ошибка уже не повторяется почти 3 недели.
Из последних добавлений в код - только логи, много логов почти на всех методах. А все остальное 1 к 1. 

Тему можно закрывать, походу.

Автор: jonie 17.3.2014, 20:01
Цитата(MFSham @  17.3.2014,  12:56 Найти цитируемый пост)
Не верю я в чудеса, но ошибка уже не повторяется почти 3 недели.
Из последних добавлений в код - только логи, много логов почти на всех методах. А все остальное 1 к 1. 

верный признак гонки за ресурсы.

Автор: MFSham 17.3.2014, 21:54
Нет многопоточности. Но есть много вызовов страницы, в то время когда предыдущий код еще не отработал.

Автор: jonie 18.3.2014, 09:16
Цитата(MFSham @  17.3.2014,  22:54 Найти цитируемый пост)
Нет многопоточности. Но есть много вызовов страницы, в то время когда предыдущий код еще не отработал. 

ну это, конечно, не многопоточность... ага... Попробуйте на досуге-таки изучить как работает контейнер IIS в части вызова managed хендлеров (да и вообще)...

Автор: MFSham 18.3.2014, 10:05
Спасибо, почитаю)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)