string url = "http://www.example.com/feed.xml";
var settings = new XmlReaderSettings();
settings.IgnoreComments = true;
settings.IgnoreProcessingInstructions = true;
settings.IgnoreWhitespace = true;
settings.XmlResolver = null;
settings.DtdProcessing = DtdProcessing.Parse;
settings.CheckCharacters = false;
var request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 900000;
request.KeepAlive = true;
request.IfModifiedSince = lastModified;
var response = (HttpWebResponse)request.GetResponse();
Stream stream;
stream = response.GetResponseStream();
stream.ReadTimeout = 600000;
var xmlReader = XmlReader.Create(stream, settings);
while (!xmlReader.EOF)
{
...
Когда я пытаюсь это сделать в большом xml файле (который также очень медленно загружается), мое веб-приложение azure выдает пустую страницу через пару минут.
Я видел это в журналах отслеживания неудачных запросов Azure:
ModuleName: DynamicCompressionModule
Уведомление: SEND_RESPONSE
HttpStatus: 500
HttpReason: ошибка внутреннего сервера
HttpSubStatus: 19
ErrorCode. Была предпринята операция по несуществующему сетевому соединению. (0x800704cd)
Как вы можете видеть, я "играл" с настройками таймаута. Также попытался поймать все исключения, но он не поймал.
Кроме того, это работает без проблем при отладке веб-приложения локально на моем компьютере. Возможно, подключение к Интернету в моем офисе лучше, чем у Azure, в результате чего xml файл читается быстро без каких-либо проблем.
Возможные обходные пути? Изменить: я хочу, чтобы потоковая передача XML файла (я избегаю загрузки всего файла, потому что пользователь имеет возможность читать только первые N записей в фиде). В случае, если проблему, описанную выше, нельзя избежать, я буду рад, если кто-то может помочь мне отображать значимое сообщение для пользователя, по крайней мере, вместо пустой страницы.