2010-05-18 43 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多个报告。

感谢您的帮助。

编辑 - 我尝试了建议的解决方案,但它没有帮助(我也尝试了提琴手路线,但没有看到任何耀眼的东西)。我认为这可能是最好的澄清。报告运行良好一段时间,但执行时间逐渐变慢,直到应用程序最终显示错误。这是否揭示了这个问题?在你的web.config

TIA

回答

1

好吧,我想通了......最后。原因如下(对于任何有类似问题的人)。问题是视图状态。该页面上的报表查看器将数百万字节添加到查看状态,导致该问题。我禁用了隐藏的reportviewer的视图状态,不再有问题。感谢大家的帮助和建议。

3

尝试增加以下值:

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

感谢您的帮助,但我想知道为什么会发生这种情况。由于没有任何报告超过4MB的限制(甚至接近),我只能假设手头有更大的问题。作为最后的手段,我会实施您的建议并给予您答案。 – 2010-05-18 18:17:11

+0

我唯一的建议是使用Fiddler或其他等价物,并尝试检查响应以查看它的实际大小以及可能膨胀的大小。 – derek 2010-05-18 18:25:07

0

您是否尝试过记录的请求的URL,看看他们正在成长?也许这是在某个地方,“ReportsFolder”会话值或错误的地方是我的猜测。