C# 通过POST传递报告参数,仍然达到长度限制

C# 通过POST传递报告参数,仍然达到长度限制,c#,silverlight,post,reporting-services,C#,Silverlight,Post,Reporting Services,我有一个Silverlight应用程序,可以在浏览器中运行,允许用户从一个大列表中选择任意多的SSRS子报告。选定的子报表聚合为一个大报表,并在新窗口中启动此报表。 每个子报表都有自己的一组参数。因此,参数值列表可能非常长。以前,应用程序将使用GET方法传递参数值,例如: http://<serverName>/_vti_bin/ReportServer/Pages/ReportViewer.aspx?http://<reportPath>&rs:Command=

我有一个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方法传递参数,正如中所述。上面的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&...
i、 e.无论如何,这些值都会被设置为GET参数。我不明白这一点,因为我看到了很多建议,当您有很多报告参数时,可以使用POST绕过URL长度限制-如果它重定向到GET URL有什么意义

那么,有没有办法传播发布的参数?还是用另一种方法来解决这个问题


我对所涉及的大多数技术都缺乏经验,因此对于我没有包括的任何相关细节,我深表歉意-请让我知道哪些信息可能有用。

您连接的报表服务器正在重定向到页面,并将子报表指定为URL参数。这是报表服务器中的一个问题,您无法在Silverlight应用程序中解决。

您要连接的报表服务器正在重定向到页面并将子报表指定为URL参数。这是报表服务器中的一个问题,您无法在Silverlight应用程序中解决。

首先,不管是POST还是GET,通过uri传递参数,它被称为uri隧道,它有一个预定义的长度限制,如果我没记错的话,我想大约有2000个字符,因此,无论您是否使用POST或GET,您都不会看到任何差异。又名 首先,不管它是POST还是GET,通过uri传递参数,它被称为uri隧道,它有一个预定义的长度限制,如果我没记错的话,我想大约有2000个字符,因此无论使用POST还是GET,您都不会看到任何区别。又称作好的,谢谢。我确实有机会访问报告服务器,所以我愿意考虑这个解决方案。好的,谢谢。我确实有机会访问报表服务器,所以我愿意从这个角度考虑一个解决方案。
// TODO: doc.CreateElement("input");
// TODO: SetAttribute("type", "hidden");
// TODO: SetAttribute("name", someName);
// TODO: SetAttribute("value", someValue);
// TODO: newForm.AppendChild()
doc.CreateElement("input");
SetAttribute("type", "hidden");
SetAttribute("name", "FacilityUniqueValues");
SetAttribute("value", "A");
newForm.AppendChild()

doc.CreateElement("input");
SetAttribute("type", "hidden");
SetAttribute("name", "WorkWeek");
SetAttribute("value", 0);
newForm.AppendChild()