0

我正在开发一个应用程序,我在其中从 xml 提要读取数据。xml 提要包含大量数据,接近 100MB。因此,从提要会话中读取数据时会发生超时。

任何人都可以建议我如何避免超时。

我也尝试过延长执行时间和请求长度,但问题仍未解决。

 <httpRuntime  executionTimeout="100000000" maxRequestLength="2097151"
     useFullyQualifiedRedirectUrl="false" minFreeThreads="8"
     minLocalRequestFreeThreads="4" appRequestQueueLimit="100" 
     enableVersionHeader="true" />

从 URL 读取 xml 数据的代码:

WebRequest wrGETURL;
        wrGETURL = WebRequest.Create(sUrl);

        HttpWebResponse wr = (HttpWebResponse)wrGETURL.GetResponse();
        StringBuilder sb = new StringBuilder();
        byte[] buf = new byte[8192];

        if (wr.StatusCode == HttpStatusCode.OK)
        {

            Stream resStream = wr.GetResponseStream();
            string tempString = null;
            int count = 0;
            do
            {
                count = resStream.Read(buf, 0, buf.Length);
                if (count != 0)
                {
                    tempString = Encoding.ASCII.GetString(buf, 0, count);
                    sb.Append(tempString);
                }
            }
         }
4

2 回答 2

0

我不知道您的确切要求,但正如@DaveB 所说-如果您必须提取 100MB,那么您必须等待 100MB。

要阅读的提要是用户吗?如果是这样,您可以使用 ajax 部分提取 xml - 所以获得 5MB 的价值并显示它,然后获得下一个 5MB,依此类推。或者,基于滚动条的 Twitter 风格的 ajax 调用(如果是这样的话)可能会起作用。

如果提要用于某些处理能力并且不被用户读取,则不要使用 UI 线程 - 获取 WCF 或 WEB API 以在后台检索 100MB。

从您的帖子中很难说出要求,但也许这些想法可能会有所帮助?

于 2012-09-03T08:24:26.417 回答
0

您可以通过拥有本地副本来防止一些延迟。饲料多久更换一次?如果基础数据很少更改,那么经常点击 XML 提要是没有用的。您可以有一个计划的过程来“刷新”数据的本地副本。如果您尝试在每次点击页面时下载 100 MB,那么您将亲身体验该场景的问题。拥有数据后如何处理?或许您可以对数据运行 XPath 或 LINQ to XML 查询以呈现您想要的那部分。一些值得深思的...

于 2012-09-03T05:29:44.613 回答