【问题标题】:avoiding a timeout when read large data from xml feed in asp.net从 asp.net 中的 xml 提要读取大数据时避免超时
【发布时间】:2012-09-03 04:49:28
【问题描述】:

我正在开发一个应用程序,我在其中从 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);
                }
            }
         }

【问题讨论】:

  • 什么方法用来读取XML文件?您在上传文件吗?
  • @AVD:我编辑帖子并展示了我用来从提要中读取数据的方法。
  • 看看 SO 线程 1, 2, 3,4

标签: c# asp.net


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-19
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多