5

我正在尝试使用如下 URL 访问 SSRS 报告

http://MyServerIP/ReportServer?/FolderName/ReportName&Param1=ParamValue&rs:Command=Render&rs:Format=HTML4.0&rc:Toolbar=false

当我尝试访问 Url 上方时,系统会要求我提供网络凭据,然后我会在浏览器窗口中呈现 SSRS 报告的所有页面。

现在我想在我的 webApp 内的弹出窗口中显示这些内容。为此,我尝试发出 jquery 请求并获取内容,但这样做我得到 401 未经授权的错误。所以我想知道是否有办法在 jquery ajax get 请求中发送凭据。

作为一个转机,我尝试使用下面的 C# 代码来检索数据,但它也没有帮助并给出相同的 401 错误

WebClient client = new WebClient();
client.Credentials = new NetworkCredential("username", "password", "domain");
divContents.InnerText = client.DownloadString(my report path);

我正在使用 SSRS 2008 R2,我的要求是在弹出窗口中显示报告的所有页面。因此,欢迎所有指向这个方向的指针。

最后添加一点,我的 Web 应用程序和报告可能驻留在同一个域中,也可能不驻留在同一个域中。

谢谢,拉维

4

3 回答 3

2

我会尝试什么:

  • 创建一个新页面。在 C# 端,使用ReportExecution2005Web 服务将报表呈现为 HTML。然后将结果泵出到窗口。

  • 在您的弹出窗口中,通过 Ajax 调用新的 C# 页面(以获取 HTML)并将输出注入您的 jQuery 窗口,或者将页面本身作为单独的浏览器窗口弹出。

如果您需要,我可以提供一些示例代码。

ETA:我发现了一条可能有价值的信息:

这是来自HTML 设备设置页面(强调我的):

工具栏

指示是显示还是隐藏工具栏。此参数的默认值为 true。如果此参数的值为 false,则忽略所有剩余选项(文档映射除外)。如果省略此参数,则工具栏会自动显示支持它的呈现格式。

当您使用 URL 访问呈现报表时,呈现报表查看器工具栏。工具栏不是通过 SOAP API 呈现的。但是,工具栏设备信息设置会影响使用 SOAP Render 方法时报告的显示方式。如果在使用 SOAP 呈现为 HTML 时此参数的值为 true,则仅呈现报表的第一部分。如果值为 false,则整个 HTML 报告将呈现为单个 HTML 页面

于 2013-04-05T13:13:08.533 回答
2

您在查询字符串中传递这样的凭据:

dsu:数据源名称=用户名&dsp:数据源名称=密码

将粗体元素替换为报告中的值,例如:

http://MyServerIP/ReportServer?/FolderName/ReportName&Param1=ParamValue&rs:Command=Render&rs:Format=HTML4.0&rc:Toolbar=false&dsu:Data=reportreader&dsp:Data=password1
于 2014-11-20T16:39:20.207 回答
1

如果您希望允许公共访问安全报告而不要求提供凭据,则可以使用报告查看器控件。

  1. 创建一个新.aspx页面并ReportViewer像这样使用控件:

    <rsweb:ReportViewer ID="MainReportViewer" runat="server" BackColor="White" 
        Font-Names="Verdana" Font-Size="8pt" InteractiveDeviceInfos=" (Collection)" 
        ProcessingMode="Remote" ShowBackButton="False" ShowFindControls="False" 
        ShowPageNavigationControls="False" SizeToReportContent="True" 
        ToolBarItemBorderColor="White" ToolBarItemHoverBackColor="White" 
        WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Width="100%">
            <ServerReport ReportServerUrl="" />
    </rsweb:ReportViewer>
    
  2. 下面的代码可以在您的.aspx页面的代码隐藏中使用,以在您的报告查看器中配置报告服务器、用户名和密码,[etc..]

    protected void Page_Init(Object sender, EventArgs e)
    {
        string UserName = ConfigurationManager.AppSettings["SsrsUserName"];
        string Password = ConfigurationManager.AppSettings["SsrsPassword"];
        string Domain = ConfigurationManager.AppSettings["SsrsDomain"];
        string ReportServerRoot = ConfigurationManager.AppSettings["SsrsServerRoot"];
        string ReportServerPath = ConfigurationManager.AppSettings["SsrsReportServerPath"];
        MainReportViewer.ProcessingMode = ProcessingMode.Remote;
        IReportServerCredentials irsc = new CustomReportCredentials(UserName, Password, Domain);
        MainReportViewer.ServerReport.ReportServerCredentials = irsc;
        MainReportViewer.ServerReport.ReportServerUrl = new Uri(ReportServerRoot);
        MainReportViewer.ServerReport.ReportPath = ReportServerPath + "YourReportFileName";
    }
    
于 2014-08-29T08:39:53.593 回答