2010-05-18 38 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」會話值或錯誤的地方是我的猜測。