【发布时间】:2016-02-22 03:01:46
【问题描述】:
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 web 应用程序会在几分钟后抛出一个空白页。
我在 Azure 的失败请求跟踪日志中看到了这一点:
模块名称:DynamicCompressionModule
通知:SEND_RESPONSE
HttpStatus:500
HttpReason:内部服务器错误
HttpSubStatus:19
ErrorCode:尝试对不存在的网络连接进行操作。 (0x800704cd)
如您所见,我一直在“玩弄”超时设置。 还尝试捕获所有异常,但没有捕获任何异常。
此外,在我的计算机上本地调试 Web 应用程序时,这可以正常工作。可能是我办公室的互联网连接比 Azure 的好,导致 xml 文件被快速读取而没有任何问题。
任何可能的解决方法? 编辑:我想继续流式传输 XML 文件(我避免下载整个文件,因为用户可以选择只读取提要的前 N 个条目)。如果无法避免上述问题,如果有人可以帮助我至少向用户显示有意义的消息,而不是空白页,我会很高兴。
【问题讨论】:
-
我肯定会打赌下载的大小和时间会影响 azure 云中的某些内容代理重置您的连接。
-
这也可能是由服务器超时引起的,也就是您的代码连接到的服务器超时(此处为“example.com/feed.xml"”)。
-
是的@SimonMourier,我相信你可能是对的。但是当我无法捕捉到异常并给用户一个有意义的消息时,这是非常令人沮丧的。
-
你可以试试ServiceStack 库。查看其他 SO 线程 stackoverflow.com/questions/10040680/…
-
您尝试下载的 XML 的大小是多少?