将凭据传递给Sql Report Server 2008

ado*_*lot 19 c# asp.net reporting-services ssrs-2008

我在C#中很新,我的英语不太好 - 如果我错过了一点,请提前抱歉.

我试图用ReportService控件构建一个ASP.NET网站.您可能已经知道,SSRS 2008不允许匿名登录.因此,我尝试将Credentials传递给SSRS,SSRS将存储在我的网页中,以便用户无需登录即可查看报告.

我找到了下面的代码并将其放在我的上面WebForm,但是我的报告参数有问题.

  • 如果报告参数有默认值,则以下代码可以正常工作.

  • 但是,如果我尝试更改参数的值,则会
    刷新整个页面,在单击"查看报告"按钮之前,所有
    参数都将重置为默认值或空值.

有关如何避免刷新整个页面的任何建议,或将登录信息传递给SSRS的其他方法?非常感谢提前.

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Net;
using Microsoft.Reporting.WebForms;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ReportViewer1.Width = 800;
        ReportViewer1.Height = 600;
        ReportViewer1.ProcessingMode = ProcessingMode.Remote;
        IReportServerCredentials irsc =new CustomReportCredentials("administrator", "MYpassworw", "domena");
        ReportViewer1.ServerReport.ReportServerCredentials = irsc;
        ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://192.168.0.1/ReportServer/");
        ReportViewer1.ServerReport.ReportPath = "/autonarudzba/listanarudzbi";
        ReportViewer1.ServerReport.Refresh();
    }
}

public class CustomReportCredentials : IReportServerCredentials
{
     private string _UserName;
     private string _PassWord;
     private string _DomainName;

     public CustomReportCredentials(string UserName, string PassWord, string DomainName)
     {
        _UserName = UserName;
        _PassWord = PassWord;
        _DomainName = DomainName;
     }

     public System.Security.Principal.WindowsIdentity ImpersonationUser
     { 
        get { return null; } 
     } 

     public ICredentials NetworkCredentials
     {
        get { return new NetworkCredential(_UserName, _PassWord, _DomainName); }
     }

     public bool GetFormsCredentials(out Cookie authCookie, out string user,
      out string password, out string authority)
     {
        authCookie = null;
        user = password = authority = null;
        return false;
     }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ett 17

我真的没有搞乱SSRS - 但我的ASP.NET帽子告诉我你可能想把这些东西包装在一个if (!IsPostBack)块中以防止它在页面刷新时运行.我的猜测是ReportViewer1.ServerReport.Refresh()再次拉出默认值.

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack) 
    {
        ReportViewer1.Width = 800;
        ReportViewer1.Height = 600;
        ReportViewer1.ProcessingMode = ProcessingMode.Remote;
        IReportServerCredentials irsc =new CustomReportCredentials("administrator", "MYpassworw", "domena");
        ReportViewer1.ServerReport.ReportServerCredentials = irsc;
        ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://192.168.0.1/ReportServer/");
        ReportViewer1.ServerReport.ReportPath = "/autonarudzba/listanarudzbi";
        ReportViewer1.ServerReport.Refresh();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • ReportViewer1.ServerReport.ReportServerCredentials没有setter (3认同)