Проблемы с StreamReader - PullRequest
       28

Проблемы с StreamReader

1 голос
/ 04 июля 2011

Я пытался сломать свой недавно созданный сервлет и в итоге сломал свое собственное приложение, я бы хотел, чтобы меня это не беспокоило!

response = (HttpWebResponse)request.GetResponse();
reader = new StreamReader(response.GetResponseStream());
String streamedXML = reader.ReadToEnd(); // 
XmlDocument doc = new XmlDocument();
doc.LoadXml(streamedXML);

Если я открою 10 окон или около того,затем быстро запрашиваю данные из моих сервлетов (это те же 10 окон, возвращающие те же данные), затем я получаю исключение xml;

Unexpected end of file has occurred. The following elements are not closed:

Дело в том, что если я запускаю это по одномуили с большим разрывом между запросами, тогда, если завершается нормально.Это потому, что мой потоковый читатель перегружен запросами и запускает новые, прежде чем другие закончат работу?Если да, то есть ли лучший способ записи этих данных?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 04 июля 2011

Вы можете попытаться исправить этот код или оставить его экспертам и использовать WebClient:

using (var client = new WebClient())
{
     string streamedXML = client.DownloadString(sourceUrl);
     ...

}

И лично я бы использовал XDocument вместо XmlDocument, но это зависит.

2 голосов
/ 04 июля 2011

StreamReader не перегружен.(Он может только блокировать или вызывать исключения IO Exception / Out Of Memory)

Однако может показаться, что сервер, с которым он обращается, перегружен.

Узнайте с помощью fiddler или в журналах сервера

1 голос
/ 04 июля 2011

Вы можете начать с правильной утилизации и посмотреть, поможет ли это:

using(response = (HttpWebResponse)request.GetResponse())
using(reader = new StreamReader(response.GetResponseStream()))
{
    String streamedXML = reader.ReadToEnd(); // 
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(streamedXML);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...