【问题标题】:HttpRequest maximum length exceeded issue in ASP.netASP.net 中的 HttpRequest 最大长度超出问题
【发布时间】:2010-05-18 18:11:28
【问题描述】:

我正在尝试解决我支持的应用程序的问题(我没有编写代码)。该代码采用 SSRS 报告并以 pdf 格式呈现。用户偶尔会收到标题中指示的错误。生成错误的时间没有规律或原因(特定报告将运行一次并在下一次抛出错误)。代码如下。

  Public Sub OpenReport()
        Dim MyParms As New Generic.List(Of ReportParameter)
        Dim mimeType As String = Nothing
        Dim encoding As String = Nothing
        Dim extension As String = Nothing
        Dim deviceInfo As String = Nothing
        Dim streamids() As String = Nothing
        Dim warnings As Microsoft.Reporting.WebForms.Warning() = Nothing
        Dim bytes() As Byte 
        Dim format As String = "PDF" ''#to open the report in pdf; report viewer invisible

        Try
            If dropReports.SelectedItem.Value = "1" Then

                If Session("IsBDAP") = True Then
                    MyParms.Add(New ReportParameter("SCAId", dropSCA.SelectedItem.Value, False))
                Else
                    MyParms.Add(New ReportParameter("SCAId", Server.UrlEncode(Session("SCAId")), False))
                End If
                MyParms.Add(New ReportParameter("ProviderId", dropProvider.SelectedItem.Value, False))
                If dropVisit.Visible = True Then
                    MyParms.Add(New ReportParameter("VisitId", dropVisit.SelectedItem.Value, False))
                End If
                MyParms.Add(New ReportParameter("FY", dropContractFY.SelectedItem.Value, False))

                ReportViewer1.ProcessingMode = ProcessingMode.Remote
                ReportViewer1.ServerReport.ReportServerUrl = New Uri(System.Configuration.ConfigurationManager.AppSettings("ReportServerURI"))
                ReportViewer1.ServerReport.ReportPath = Session("ReportsFolder") & "MReport"
                ReportViewer1.ServerReport.ReportServerCredentials = New MyReportServerCredentials()
                ReportViewer1.ServerReport.SetParameters(MyParms)
                ''#Code to convert the report to pdf 
                deviceInfo = "<DeviceInfo>" + "<SimplePageHeaders>True</SimplePageHeaders>" + "</DeviceInfo>"
                bytes = ReportViewer1.ServerReport.Render(format, deviceInfo, mimeType, encoding, extension, streamids, warnings)
                Dim size As Integer = bytes.Length
                ReportViewer1.ServerReport.Refresh()
                Response.Buffer = True
                Response.Clear()
                Response.ContentType = mimeType
                Response.AddHeader("content-disposition", "attachment; filename=MReport." + extension)
                Response.BinaryWrite(bytes)


            ElseIf dropReports.SelectedItem.Value = "2" Then

                If Session("IsBDAP") = True Then
                    MyParms.Add(New ReportParameter("SCAId", dropSCA.SelectedItem.Value, False))
                Else
                    MyParms.Add(New ReportParameter("SCAId", Server.UrlEncode(Session("SCAId")), False))
                End If
                MyParms.Add(New ReportParameter("ProviderId", dropProvider.SelectedItem.Value, False))
                If dropVisit.Visible = True Then
                    MyParms.Add(New ReportParameter("FollowUpVisitId", dropVisit.SelectedItem.Value, False))
                End If
                MyParms.Add(New ReportParameter("FY", dropContractFY.SelectedItem.Value, False))

                ReportViewer1.ProcessingMode = ProcessingMode.Remote
                ReportViewer1.ServerReport.ReportServerUrl = New Uri(System.Configuration.ConfigurationManager.AppSettings("ReportServerURI"))
                ReportViewer1.ServerReport.ReportPath = Session("ReportsFolder") & "FReport"
                ReportViewer1.ServerReport.ReportServerCredentials = New MyReportServerCredentials()
                ReportViewer1.ServerReport.SetParameters(MyParms)
                ''#Code to convert the report to pdf 
                deviceInfo = "<DeviceInfo>" + "<SimplePageHeaders>True</SimplePageHeaders>" + "</DeviceInfo>"
                bytes = ReportViewer1.ServerReport.Render(format, deviceInfo, mimeType, encoding, extension, streamids, warnings)
                ReportViewer1.ServerReport.Refresh()
                Response.Buffer = True
                Response.Clear()
                Response.ContentType = mimeType
                Response.AddHeader("content-disposition", "attachment; filename=FReport." + extension)
                Response.BinaryWrite(bytes)

我读到默认长度限制是 4MB。没有一个报告本身甚至超过 350K。我想知道这是否可能是由缓存问题引起的。我不是专家,所以我需要一些关于如何最好地解决问题的指导。我也想了解为什么会出现这个问题。请注意,sn-p 中只显示了 2 份报告 - 完整的 sub 中大约有 30 多份报告。

感谢您的帮助。

编辑 - 我尝试了建议的解决方案,但没有帮助(我也尝试了 Fiddler 路线,但没有看到任何明显的东西)。我认为最好澄清一下。报告会在一段时间内正常运行,但执行时间会逐渐变慢,直到应用程序最终显示错误。这能说明问题吗?

TIA

【问题讨论】:

    标签: asp.net vb.net httprequest


    【解决方案1】:

    尝试在您的 web.config 中增加以下值:

    <httpRuntime maxRequestLength="204800" requestLengthDiskThreshold="204800" />
    

    【讨论】:

    • 感谢您的帮助,但我想知道为什么会这样。由于没有任何报告超过 4MB 限制(甚至接近),我只能假设手头有一个更大的问题。作为最后的手段,我会实施您的建议,并为您的回答表示感谢。
    • 我唯一的建议是使用 Fiddler 或类似的东西,并尝试检查响应以查看它的实际大小以及可能导致它膨胀的原因。
    【解决方案2】:

    好的,我想通了……终于。这是原因(对于任何有类似问题的人)。问题是视图状态。页面上的报告查看器正在向视图状态添加数百万字节,从而导致问题。我为隐藏的报表查看器禁用了视图状态,并且不再有问题。感谢大家的帮助和建议。

    【讨论】:

      【解决方案3】:

      您是否尝试过记录请求 URL 以查看它们是否在增长?也许它在那个“ReportsFolder”会话值中的某个地方,或者我猜想在某个地方错失的扩展名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-09
        • 1970-01-01
        • 1970-01-01
        • 2011-04-20
        • 2015-10-03
        • 2012-10-08
        相关资源
        最近更新 更多