2010-05-18 2 views
1

지원하는 응용 프로그램에서 문제를 해결하려고합니다. 코드를 작성하지 않았습니다. 이 코드는 SSRS 보고서를 받아서 pdf 형식으로 렌더링합니다. 사용자는 제목에 표시된 오류를 산발적으로보고 있습니다. 운이 없거나 오류가 발생하는 이유는 없습니다 (특정 보고서가 한 번 실행되어 다음 번에 오류가 발생 함). 코드는 다음과 같습니다.ASP.net의 HttpRequest 최대 길이 초과 문제

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가 넘는 보고서는 없습니다. 이 문제가 캐싱 문제로 인해 발생할 수 있는지 궁금합니다. 저는 전문가가 아니므로 문제를 해결하는 최선의 방법에 대한 지침이 필요합니다. 또한 문제가 왜 발생하는지 이해하고 싶습니다. 스 니펫에는 2 개의 보고서 만 표시되며 전체 하위 보고서에는 약 30 개 이상의 보고서가 있습니다.

도움 주셔서 감사합니다.

편집 - 제안 된 솔루션을 사용해 보았지만 도움이되지 않았습니다. (나는 또한 Fiddler 경로를 시도했지만 눈부신 것도 보지 못했습니다.) 나는 그것이 명확히하는 것이 가장 좋을 것이라고 생각했다. 보고서는 잠시 동안 정상적으로 실행되지만 응용 프로그램이 결국 오류를 표시 할 때까지 실행 시간이 서서히 느려집니다. 이것이 문제에 관해 밝혀 줍니까?

TIA

답변

1

좋아, 나는 그것을 알아 냈다 ... 마침내. 여기에 비슷한 문제가있는 사람의 원인이 있습니다. 문제는 viewstate입니다. 페이지의 reportviewer가 viewstate에 수백만 바이트를 추가하여 문제를 일으켰습니다. 나는 숨겨진 reportviewer에 대한 viewstate를 비활성화하고 더 이상 문제가 없습니다. 여러분의 도움과 제안에 감사드립니다.

3

시도 당신의 Web.config에서 다음 값을 증가 :

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

도움을 주셔서 감사합니다.하지만 왜 그런지 알고 싶습니다. 보고서 중 어느 것도 4MB 한도를 초과하지 않았기 때문에 (또는 심지어 가까이에), 더 큰 문제가 있다고 가정 할 수 있습니다. 최후의 수단으로 제안을 구현하고 답변에 대한 크레딧을 줄 것입니다. –

+0

나의 유일한 제안은 Fiddler 또는 그와 동등한 것을 사용하고 실제 크기와 부풀어 오를 수있는 것을보기 위해 응답을 조사하는 것입니다. – derek

0

당신은 그들이 성장하고 있는지 확인하기 위해 요청 URL을 로그인 시도? 어딘가에있는 "ReportsFolder"세션 값이나 어딘가에있는 확장 기능이 아마도 내 추측 일 것입니다.