我有一个 Silverlight 应用程序(打算在浏览器中运行),它允许用户从一个大列表中选择尽可能多的 SSRS(子)报告。选定的子报表聚合成一个大报表,该报表在新窗口中启动。每个子报表都有自己的一组参数。因此,参数值列表可能会变得很长。以前,应用程序会使用 GET 方法来传递参数值,例如:
http://<serverName>/_vti_bin/ReportServer/Pages/ReportViewer.aspx?http://<reportPath>&rs:Command=Render&rs:ClearSession=true&rc:Parameters=false&rc:Toolbar=true&rc:Zoom=100&FacilityUniqueValues=A&WorkWeek=0&...
但是对于长参数值列表,URL 很容易超过 2000 个字符。在这个长度或更长的时候,报告会失败——浏览器只会给出一个 HTTP 404 页面。我认为这是由于沿线某处的 URL 长度限制,因此,在查找解决方案后,我让它使用 POST 方法来传递参数,完全按照这个 SO answer中的描述。上面的 URL 现在看起来像:
http://<serverName>/_vti_bin/ReportServer/Pages/ReportViewer.aspx?<reportPath>
但是,当参数值列表很长时,问题仍然存在。
我注意到,当列表较短并且报告显示成功时,浏览器会重定向到表单中的 URL:
http://<serverName>/_layouts/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl=<relativeReportPath>&rv%3aParamMode=Hidden&rv%3aZoom=100&rp%3aFacilityUniqueValues=A&rp%3aWorkWeek=0&...
即这些值无论如何都会被制成GET参数。我不明白这一点,因为当您有很多报告参数时,我已经看到许多使用 POST 绕过 URL 长度限制的建议——如果它重定向到 GET URL 有什么意义?
那么,有没有办法传播 Posted 参数?或者解决这个问题的另一种方法?
我对所涉及的大多数技术都非常缺乏经验,因此对于我未包含的任何相关细节,我深表歉意——请让我知道哪些信息可能会有所帮助。