Передача учетных данных в Sql Report Server 2008 - PullRequest
18 голосов
/ 23 марта 2009

Я довольно новичок в C #, и мой английский не очень хорош - заранее извините, если я пропустил пункт.

Я пытался создать веб-сайт ASP.NET с элементом управления ReportService. Как вы, возможно, уже знаете, SSRS 2008 не разрешает анонимный вход. Поэтому я попытался передать учетные данные в 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;
     }
}

Ответы [ 4 ]

16 голосов
/ 23 марта 2009

Я действительно не перепутал с 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();
    }
}
0 голосов
/ 09 октября 2017

Я нашел решение для этого. сначала нужно установить учетные данные, а затем установить параметр для Reportviewer.

 rvCommon.ProcessingMode = ProcessingMode.Remote;
        rvCommon.ServerReport.ReportServerUrl = new System.Uri("SSRSReportServerURL");
        rvCommon.ServerReport.ReportPath = "/Report Parts/CustomerMainReport2" ;

        Microsoft.Reporting.WebForms.ReportParameter[] RptParameters = new Microsoft.Reporting.WebForms.ReportParameter[1];
         rvCommon.ServerReport.ReportServerCredentials = new ReportCredentials("username", "password", "");

        RptParameters[0] = new Microsoft.Reporting.WebForms.ReportParameter("CustomerId", "1");
        rvCommon.ServerReport.SetParameters(RptParameters);
        rvCommon.ServerReport.Refresh();
0 голосов
/ 23 сентября 2015

Вы можете использовать следующий код в событии загрузки страницы, чтобы задать параметры

ReportParameter[] reportParameterCollection = new ReportParameter[1]; //Array size describes the number of paramaters.
reportParameterCollection[0] = new ReportParameter();
reportParameterCollection[0].Name = "ACCMGR";   //Give Your Parameter Name
reportParameterCollection[0].Values.Add("12"); //Pass Parametrs's value here.
ReportViewer1.ServerReport.SetParameters(reportParameterCollection);
ReportViewer1.ServerReport.Refresh();

Я надеюсь, что это работает для вас

0 голосов
/ 16 апреля 2009

Я сделал новую функцию и поднял ее в режиме конструктора для свойств, событий, reportViewer. (В выборе INIT i)

После этого страница работает нормально, и я могу изменить значения параметров.

Default.aspx теперь выглядит так:

    </head>
      <body>
        <form id="form1" runat="server">
         <div>
            <rsweb:ReportViewer ID="ReportViewer1" runat="server" onload="Admir">
            </rsweb:ReportViewer>
         </div>
       </form>
    </body>

И Default.aspx.cs выглядит так

 public void Admir(object sender, EventArgs e)
    {
        ReportViewer1.Width = 800;
        ReportViewer1.Height = 600;
        ReportViewer1.ProcessingMode = ProcessingMode.Remote;
        IReportServerCredentials irsc = new CustomReportCredentials("administrator", "mypass", "domena");
        ReportViewer1.ServerReport.ReportServerCredentials = irsc;
        ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://192.168.0.1/ReportServer/");
        ReportViewer1.ServerReport.ReportPath = "/autonarudzba/listanarudzbi";
        ReportViewer1.ServerReport.Refresh();

    }
    protected void Page_Load(object sender, EventArgs e)
    {

    }
...