2009-03-22 37 views
18

Tôi khá mới trong C# và tiếng Anh của tôi không tốt lắm - xin lỗi trước nếu tôi bỏ lỡ một điểm.Gửi thông tin xác thực đến Sql Report Server 2008

Tôi đã cố tạo một trang web ASP.NET có điều khiển ReportService. Như bạn đã biết, SSRS 2008 không cho phép đăng nhập vô danh. Vì vậy, tôi đã cố gắng để vượt qua Credentials để SSRS sẽ được lưu trữ bên trong trang web của tôi để người dùng sẽ có thể xem báo cáo mà không đăng nhập.

Tôi tìm thấy mã dưới đây và đặt nó trên WebForm của tôi, nhưng tôi ' m gặp sự cố với thông số báo cáo.

  • Nếu có giá trị mặc định cho thông số báo cáo, mã bên dưới sẽ hoạt động tốt.

  • Nhưng, nếu tôi cố gắng thay đổi giá trị của một tham số, toàn bộ trang là
    làm mới và trước khi tôi nhấp vào nút "Xem báo cáo", tất cả
    thông số được đặt lại để mặc định hoặc giá trị null.

Bất kỳ đề xuất nào về cách tránh làm mới toàn bộ trang hoặc cách khác để chuyển thông tin đăng nhập vào SSRS? Cảm ơn rất nhiều trước.

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

Bạn có chắc là họ đã hủy xác thực ẩn danh từ SSRS 2008 không? Bạn có thể chỉ cần cấu hình nó trong IIS? – RobS

+0

Từ: http://blogs.msdn.com/jameswu/archive/2008/07/15/anonymous-access-in-sql-rs-2008.aspx Vì vậy, điều xảy ra với xác thực ẩn danh cũ tốt là RS 2005? Câu trả lời ngắn gọn là nó không còn được hỗ trợ nữa. – adopilot

Trả lời

16

tôi thực sự đã không sai lầm với SSRS - nhưng ASP.NET mũ của tôi nói với tôi bạn có thể muốn quấn thứ mà trong một khối if (!IsPostBack) để giữ cho nó chạy trên làm mới trang. Tôi đoán là ReportViewer1.ServerReport.Refresh() sẽ kéo lại các giá trị mặc định.

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

Tôi cố gắng cắt ra dòng ReportViewer1.ServerReport.Làm mới() nhưng tiếc là điều tương tự đã xảy ra một lần nữa. – adopilot

+0

Bạn đã bọc nó trong một kiểm tra IsPostBack? –

+3

ReportViewer1.ServerReport.ReportServerCredentials không có setter – dcarneiro

0

Tôi đã thực hiện chức năng mới và chọn nó trong chế độ xem thiết kế trên thuộc tính, sự kiện, reportViewer. (Trong lựa chọn INIT i)

Sau đó, trang hoạt động bình thường và tôi có thể thay đổi giá trị cho tham số.

Default.aspx bây giờ trông giống như:

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

Và Default.aspx.cs trông như thế này

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

bạn có thể sử dụng đoạn mã sau trong trường hợp tải trang để cung cấp cho thông số

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(); 

Tôi hy vọng điều này phù hợp với bạn

0

tôi đã tìm ra giải pháp cho việc này. bạn phải đặt thông tin đăng nhập trước tiên, sau đó bạn phải đặt thông số cho 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(); 
Các vấn đề liên quan