ReportViewer 컨트롤을 통해 DMZ의 ASP.NET 응용 프로그램에서 SQL Server 2005 Reporting Services 보고서를 볼 수 있어야합니다. SQL 및 SSRS 서버는 방화벽 뒤에 있습니다.DMZ의 ReportViewer 컨트롤에서 SQL Server 2005 Reporting Services 보고서를 보는 방법
0
A
답변
3
`ASP.NET 2.0 응용 프로그램에서 보고서를보고하는 방식을 변경해야했습니다. 원래 JavaScript를 사용하여 새 창을 열었습니다.
ViewCostReport.OnClientClick = "window.open('" + Report.GetProjectCostURL(_PromotionID) + "','ProjectCost','resizable=yes')";
내가 가진 문제는 window.open 호출은 클라이언트 네트워크 내에서가 아니라 자신의 DMZ에 위치한 새로운 웹 서버에서 작동 것이라고했다. 보고서를 볼 수있는 ReportViewer 컨트롤이 포함 된 새 보고서 WebForm을 만들어야했습니다.
내가 겪었던 다른 문제는 보고서 서버가 보고서 용으로 다른 응용 프로그램에서 사용되고 있었고 보고서 액세스를 위해 응용 프로그램 역할을 사용했기 때문에 Windows 인증을 사용하여 액세스해야한다는 것이 었습니다. 그래서 떨어져서 내 ReportViewer 컨트롤을 사용하여 Windows 사용자로 가장하게되었습니다. 이 솔루션은 다음과 같습니다.
보고서에 액세스하기위한 Microsoft.Reporting.WebForms.IReportServerCredentials 인터페이스를 구현하는 새 클래스를 만듭니다.
protected void btnReport_Click(object sender, EventArgs e)
{
ReportParameter[] parm = new ReportParameter[1];
parm[0] =new ReportParameter("PromotionID",_PromotionID);
ReportViewer.ShowCredentialPrompts = false;
ReportViewer.ServerReport.ReportServerCredentials = new ReportCredentials("Username", "Password", "Domain");
ReportViewer.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;
ReportViewer.ServerReport.ReportServerUrl = new System.Uri("http://ReportServer/ReportServer");
ReportViewer.ServerReport.ReportPath = "/ReportFolder/ReportName";
ReportViewer.ServerReport.SetParameters(parm);
ReportViewer.ServerReport.Refresh();
}
:
public class ReportCredentials : Microsoft.Reporting.WebForms.IReportServerCredentials
{
string _userName, _password, _domain;
public ReportCredentials(string userName, string password, string domain)
{
_userName = userName;
_password = password;
_domain = domain;
}
public System.Security.Principal.WindowsIdentity ImpersonationUser
{
get
{
return null;
}
}
public System.Net.ICredentials NetworkCredentials
{
get
{
return new System.Net.NetworkCredential(_userName, _password, _domain);
}
}
public bool GetFormsCredentials(out System.Net.Cookie authCoki, out string userName, out string password, out string authority)
{
userName = _userName;
password = _password;
authority = _domain;
authCoki = new System.Net.Cookie(".ASPXAUTH", ".ASPXAUTH", "/", "Domain");
return true;
}
}
은 그 때 나는 보고서를 호출하는 버튼에 대한 이벤트를 생성