【问题标题】:How to control max response size如何控制最大响应大小
【发布时间】:2012-06-11 15:06:26
【问题描述】:

我有一个我支持的网络应用程序,它有时需要渲染巨大的网页。

有时我会遇到此异常(它链接到用户制作的上传,网页呈现大约 22MB 的 Html):

Error Caught in Page : http://example.com/thepage.aspx
Error Message:Maximum request length exceeded.
Stack Trace:   at System.Web.HttpRequest.GetEntireRawContent()
   at System.Web.HttpRequest.FillInFormCollection()
   at System.Web.HttpRequest.get_Form()
   at System.Web.HttpRequest.get_HasForm()
   at System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
   at System.Web.UI.Page.DeterminePostBackMode()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint

我尝试在 web.config 中使用 HttpRuntime 节点的 maxRequestLength 属性,但它似乎无法控制。

作为测试用例,我尝试将其设置为 5K,但网页显示即使它更大(大约 150K),所以我猜它不允许显示巨大的网页。

有没有办法可以控制最大响应大小并避免“超出最大请求长度”错误?

如果它改变了我们使用 .Net 4.0 和 IIS 6.0 的任何内容

【问题讨论】:

    标签: c# asp.net .net-4.0 iis-6


    【解决方案1】:

    为该页面设置Response.Buffer=false,并在呈现页面时不时使用Response.Flush()

    这样您可以避免将所有数据都渲染到缓冲区并等待缓冲区满后再发送。

    同时禁用不需要的控件的视图状态。

    如果上述方法不能解决问题,那么您需要使用允许它们的不同类型的控件重新设计您的页面,并且您可以使用fluah() 不时向浏览器发送数据。中继器控件可以工作,也许网格视图可能无法工作。

    【讨论】:

    • 好主意我不确定它是否真的能解决问题,因为它是一系列 GridView(可能是每个 GridView 刷新),但我会做一些测试。由于它是遗产,我可能采取的行动有限,但似乎可行。
    • @Erick 关注 buffer=false,并关注 viewstate 以将其关闭。
    • 听起来很有效。页面已从 22Mb 变为 4.61MB(!)。这不是一个设置,而是对遗留软件的一种帮助。 :-)
    • @Erick 有些东西是我写的还是随机的?我失去了你:)
    • 停用 ViewState 和 Flushing 有帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-12-22
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多