Ошибка максимальной длины HttpRequest в ASP.net - PullRequest
1 голос
/ 18 мая 2010

Я пытаюсь решить проблему с приложением, которое поддерживаю (я не писал код). Код принимает отчет 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)

Я прочитал, что ограничение длины по умолчанию составляет 4 МБ. Ни один из отчетов сам по себе не превышает 350K. Мне интересно, может ли это быть вызвано проблемой кеширования. Я не эксперт, поэтому мне нужно несколько советов о том, как лучше всего решить проблему. Я также хочу понять, почему проблема происходит. Обратите внимание, что во фрагменте отображаются только 2 отчета - в полной подпункте более 30 отчетов.

Спасибо за вашу помощь.

edit - я попробовал предлагаемое решение, но оно не помогло (я также попробовал маршрут Fiddler, но не увидел ничего вызывающего). Я подумал, что лучше всего уточнить. Некоторое время отчеты будут работать нормально, но время выполнения постепенно будет становиться все медленнее и медленнее, пока приложение в конечном итоге не отобразит ошибку. Это проливает свет на проблему?

1010 * ТИА *

Ответы [ 3 ]

3 голосов
/ 18 мая 2010

попробуйте увеличить следующие значения в вашем файле web.config:

<httpRuntime maxRequestLength="204800" requestLengthDiskThreshold="204800" />
1 голос
/ 25 июня 2010

Хорошо, я понял это ... наконец-то. Вот причина (для тех, у кого похожая проблема). Проблема заключается в состоянии просмотра. Средство просмотра отчетов на странице добавляет миллионы байтов к состоянию просмотра, вызывая проблему. Я отключил viewstate для скрытого средства просмотра отчетов, и проблема больше не возникает. Спасибо всем за вашу помощь и предложения.

0 голосов
/ 20 мая 2010

Вы пытались войти в URL-адреса запросов, чтобы увидеть, растут ли они? Возможно, это где-то в этом значении сеанса «ReportsFolder» или в расширении, которое где-то смещается, я бы предположил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...