asp.net和ssrs之间的用户模仿

时间:2013-09-30 12:54:36

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

我有一个使用域帐户配置应用程序池的Web应用程序。在SSRS中,域帐户被授予浏览器对该文件夹的访问权限,并且SSRS报告配置有适当的凭据。

我的问题是,如果从网络应用程序启动SSRS报告,SSRS报告是否会在域帐户或我的帐户下打开。目前,它提供错误消息,因为\没有足够的权限来访问报告位置。

1 个答案:

答案 0 :(得分:3)

您只需在Web配置中设置固定用户以及SSRS地址即可。这样,您可以设置要使用的站点的默认值,而不是取决于运行站点的用户:

来自WPF应用程序的示例,但与后面的代码中的ASP.NET非常相似。

<Button x:Name="btnGetViewerRemoteData" Content="Remote" Click="ReportViewerRemote_Load"/>

后面代码中元素的引用名称,确保为“Microsoft.Reporting.WinForms”(或ASP.NET等效项)导入名称空间。

    private void ResetReportViewer(ProcessingMode mode)
    {
        this.reportViewer.Clear();
        this.reportViewer.LocalReport.DataSources.Clear();
        this.reportViewer.ProcessingMode = mode;
    }


    private ICredentials giveuser(string aUser, string aPassword, string aDomain)
    {
        return new NetworkCredential(aUser, aPassword, aDomain);
    }

    private void ReportViewerRemoteWithCred_Load(object sender, EventArgs e)
    {
        ResetReportViewer(ProcessingMode.Remote);
        var user = giveuser("User", "Password", "Domain");
        reportViewer.ServerReport.ReportServerCredentials.ImpersonationUser = (System.Security.Principal.WindowsIdentity)user;
        ;

        reportViewer.ServerReport.ReportServerUrl = new Uri(@"http:// (server)/ReportServer");

        reportViewer.ServerReport.ReportPath = "/Test/ComboTest";

        DataSourceCredentials dsCrendtials = new DataSourceCredentials();
        dsCrendtials.Name = "DataSource1";
        dsCrendtials.UserId = "User";
        dsCrendtials.Password = "Password";
        reportViewer.ServerReport.SetDataSourceCredentials(new DataSourceCredentials[] { dsCrendtials });

        reportViewer.RefreshReport();
    }

我对我的示例进行了硬编码,但您可以将服务器,用户和密码放在配置文件中。虽然密码的安全性可能是一个问题,因此取决于您的组织,因此最好先对其进行硬编码或掩盖它。