请问用.NET生成静态页面超时怎么处理?

llx1990 2014-06-28 11:53:59
我利用模板文件和一些参数,批量生成了很多html静态页面,但是生成的页面数量太多了,服务器会返回超时。。
现在就是不能调web.config的超时设置,我也知道该分批处理,可是不知道具体的代码怎么写。

我用的

HttpContext.Current.Response.Write("生成中……");
generateHtml();
HttpContext.Current.Response.Write("完成!");
HttpContext.Current.Response.End();

放在这些文字也是要等到全部生成完才会跳出来了。。不知道该怎么办。。求各位大神帮忙一下。要怎么写分批处理。
我的 generateHtml();代码里是

generateHtml()
{
for(...)
{
生成文件的操作。。。
}
}
...全文
167 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nitaiyoucala 2014-06-30
  • 打赏
  • 举报
回复
用线程,设置超时时间 啊
forbetterzhu 2014-06-29
  • 打赏
  • 举报
回复
在后台开个线程处理,处理一部分前天搞一个进度条,既不超时,还提高用户体验
  • 打赏
  • 举报
回复
引用 4 楼 llx1990 的回复:
比如PHP的CMS文章系统,大部分生成HTML静态页面也是这样的。但是他们的好像生成再多也不会卡主,而且还能逐行显示。。难道.NET做不到这样的吗?
说了,asp.net只不过是一个前端工具。人家php工程师可能前端比Asp.net程序员稍微多懂一些,因此他会研发较好的前端应用程序。说白了,假设服务器有1000个任务需要执行,你用asp.net前端开发成#4楼的桌面程序相同的异步管理的程序也看看呗!
llx1990 2014-06-29
  • 打赏
  • 举报
回复
引用 1 楼 forbetterzhu 的回复:
在后台开个线程处理,处理一部分前天搞一个进度条,既不超时,还提高用户体验
直接开new thread 不会超时吗?
  • 打赏
  • 举报
回复
“利用模板文件和一些参数,生成了很多html静态页面”这没有什么意思。因为aspx(以及ascx、masterpage等)本来就是模板文件,有各种模板标记方法,从简单的asp方式的标记方法到服务器控件和数据控件绑定语法,aspx都是一个产生html的一个模板。 asp.net程序员再去另外移植15年前的asp程序去搞什么“单词替换模板”,那就太原始了。搞这种模板的人一定是没有正规学过asp.net,从别的比较弱的web编程环境中学来的。这种方式只能处理很原始、很简单的网页。 而另一个问题,“批量生成静态页面”,则不是asp.net页面考虑范围。如果你的asp.net页面只是查询后台处理报告,或许还可以。但是asp.net只是一个前端工具,做不了真正需要持久处理的事情。你或者使用一个windows service服务去批量处理这种任务,或者写一个c/s客户端去处理单个页面的任务(并且实时跟踪处理结果)。
llx1990 2014-06-29
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
从aspx生成静态页面,就是类似这样的代码
protected override void Render(HtmlTextWriter writer)
{
    if (Request.QueryString["sta"] == null)
        base.Render(writer);
    else
    {
        var sb = new StringBuilder();
        base.Render(new Html32TextWriter(new StringWriter(sb)));
        var str = sb.ToString();
        File.WriteAllText(MapPath("~/index.html"), str);
        writer.Write(str);
    }
}
这样可以用访问时的一个url参数sta来标记是否需要生成静态页面。 然后,排量生成静态页面,应该使用一个桌面应用程序。然后把从数据库中把当前时间点需要生成静态页面的所有url独取出来,进行循环遍历,例如
foreach (var x in lst)
{
    var web = new WebClient();
    var url = string.Format("http://{0}:{1}/{2}", host, port, x);
    // 如果你需要捕获返回结果,例如需要统计哪些页面已经成功生成静态页面,这里应该注册 web.DownloadStringCompleted 事件处理。
    web.DownloadStringAsync(new Uri(url));
}
批量生成静态页面,根本不是asp.net程序该干的事情。
首先谢谢一下哦,我感觉批量生成应用在BS端也是很多的吧,比如PHP的CMS文章系统,大部分生成HTML静态页面也是这样的。但是他们的好像生成再多也不会卡主,而且还能逐行显示。。难道.NET做不到这样的吗?
  • 打赏
  • 举报
回复
var url = string.Format("http://{0}:{1}/{2}?sta=1", host, port, x);
  • 打赏
  • 举报
回复
从aspx生成静态页面,就是类似这样的代码
protected override void Render(HtmlTextWriter writer)
{
    if (Request.QueryString["sta"] == null)
        base.Render(writer);
    else
    {
        var sb = new StringBuilder();
        base.Render(new Html32TextWriter(new StringWriter(sb)));
        var str = sb.ToString();
        File.WriteAllText(MapPath("~/index.html"), str);
        writer.Write(str);
    }
}
这样可以用访问时的一个url参数sta来标记是否需要生成静态页面。 然后,排量生成静态页面,应该使用一个桌面应用程序。然后把从数据库中把当前时间点需要生成静态页面的所有url独取出来,进行循环遍历,例如
foreach (var x in lst)
{
    var web = new WebClient();
    var url = string.Format("http://{0}:{1}/{2}", host, port, x);
    // 如果你需要捕获返回结果,例如需要统计哪些页面已经成功生成静态页面,这里应该注册 web.DownloadStringCompleted 事件处理。
    web.DownloadStringAsync(new Uri(url));
}
批量生成静态页面,根本不是asp.net程序该干的事情。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧