2009-03-22 13 views
18

私はC#でかなり新しいです。私の英語はあまり良くありません。Sql Report Server 2008に資格情報を渡す

私はReportServiceコントロールを持つASP.NET Webサイトを構築しようとしました。ご存知のように、SSRS 2008は匿名ログインを許可していません。だから、SSRSに資格情報を渡そうとしましたが、私のWebページに保存され、ユーザーはログインせずにレポートを見ることができます。

私は以下のコードを見つけてWebFormに入れました。レポートパラメータに問題があります。

  • レポートパラメータのデフォルト値がある場合は、大丈夫作品 次のコード。

  • しかし、私はパラメータの値を変更しようとすると、ページ全体が
    更新され、私は、「レポートの表示」ボタンをクリックする前に、すべての
    のパラメータは、デフォルト値はnullにリセットされます。

ページ全体をリフレッシュしないようにする方法や、ログイン情報を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のAnonymous authを削除したことはありますか? 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();