2010-05-18 4 views
1

Я пытаюсь исправить проблему с приложением, которое я поддерживаю (я не писал код). Код принимает отчет SSRS и отображает его в формате pdf. Пользователи спорадически получают ошибку, указанную в названии. При возникновении ошибки нет рифмы или причины (конкретный отчет будет запускаться один раз и затем выпустить ошибку). Код ниже.HttpRequest максимальная длина превышена в ASP.net

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 отчетов.

Благодарим за помощь.

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

ТИА

ответ

1

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

3

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

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

Спасибо за помощь, но я хотел бы знать, ПОЧЕМУ это происходит. Поскольку ни один из отчетов не превышает лимит 4 МБ (или даже приближается), я могу только предположить, что есть большая проблема. В крайнем случае, я воспользуюсь вашим предложением и дам вам кредит на ответ. –

+0

Мое единственное предложение - использовать Fiddler или некоторый эквивалент и попытаться проверить ответ, чтобы увидеть его фактический размер и что может быть вздутие его. – derek

0

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

Смежные вопросы