如何通过URL访问SSRS报告时传递凭据

时间:2013-04-04 16:07:20

标签: asp.net reporting-services ssrs-2008 ssrs-2008-r2

我正在尝试使用以下网址访问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 request中发送凭证。

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

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

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

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

谢谢, 拉维

3 个答案:

答案 0 :(得分:2)

我会尝试:

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

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

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

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

这来自HTML Device Settings page(强调我的):

  

工具栏

     

指示是否显示或隐藏工具栏。 此默认值   参数为true。如果此参数的值为false,则全部为   其余选项(文档图除外)将被忽略。如果省略   此参数,工具栏会自动显示以进行渲染   支持它的格式。

     

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

答案 1 :(得分: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";
    }
    

答案 2 :(得分:1)

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

  

DSU:的的datasourcename = <强>的userName &安培; DSP:的的datasourcename = 密码

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

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