2009-03-22 3 views
18

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

Я попытался создать веб-сайт ASP.NET с помощью элемента управления ReportService. Как вы уже знаете, SSRS 2008 не разрешает анонимный вход в систему. Таким образом, я попытался передать учетные данные в SSRS, которые будут храниться на моей веб-странице, чтобы пользователи могли видеть отчет без входа.

Я нашел код, указанный ниже, и поместил его на свой WebForm, m имеет проблему с параметрами отчета.

  • Если есть значения по умолчанию для параметров отчета, приведенный ниже код работает нормально.

  • Но, если я пытаюсь изменить значение параметра, вся страница
    обновляется и, прежде чем я нажмите кнопку «Просмотреть отчет», все
    параметры сбрасываются по умолчанию или нулевые значения.

Любое предложение о том, как избежать обновления всей страницы или другого способа передать информацию для входа в 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; 
    } 
} 
+0

Вы уверены, что выбрали Анонимный аут из SSRS 2008? Вам просто нужно настроить его в IIS? – RobS

+0

От: http://blogs.msdn.com/jameswu/archive/2008/07/15/anonymous-access-in-sql-rs-2008.aspx Итак, что случилось с доброй старой анонимной аутентификацией - RS 2005? Короткий ответ заключается в том, что он больше не поддерживается. – adopilot

ответ

16

Я действительно не перепутались с 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

Я пытаюсь вырезать строку ReportViewer1.ServerReport.Refresh(), но, к сожалению, подобное произошло снова. – adopilot

+0

Вы обернули его в проверку IsPostBack? –

+3

ReportViewer1.ServerReport.ReportServerCredentials не имеет сеттера – dcarneiro

0

Я создал новую функцию и поднял ее в представлении дизайна по свойствам, событиям, 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) 
    { 

    } 
0

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

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

Я нашел решение для этого. , вы должны сначала установить учетные данные, тогда вы должны установить параметр для 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(); 
Смежные вопросы