[상단] ReportingService WebService Form 인증
10768 단어 report
SDN에 언급된 바와 같이 Reporting Services 웹 서비스는 Report Manager와 보고 서버가 창 인증을 할 수 있도록 사용자 정의 인증을 제공합니다.Reporting Services Web Services의 LogonUser 방법은 인증서를 보고서 서버에 제출하여 인증하는 데 사용됩니다.웹 서비스는 인증된 로그인 요청에 응답하기 위해 HTTP 헤더를 사용하여 인증 어음(Cookie)을 서버에서 클라이언트로 전달합니다.
인증 프로세스는 다음과 같습니다.
웹 서비스가 보안 확장을 통해 사용자 인증에 성공하면 다음 요청에 사용할 쿠키가 생성됩니다.보고 서버에 보안 장치가 없기 때문에 이 쿠키는 사용자 정의 보안 장치에 계속 저장되지 않습니다.쿠키는 웹 서비스 방법인 LogonUser에서 되돌아와 다음 웹 서비스 방법 호출과 URL 접근에 사용됩니다.
구체적인 용도:
웹 서비스를 사용자 정의 보안 검증에 사용합니다. 웹 서비스 API를 창 인증에 사용할 수 있습니다. 마치 Windows Authentication을 창 인증에 사용하는 것과 같습니다.단, 웹 서비스 코드의 LogonUser를 호출하여 현재 사용자의 증빙서류를 전달해야 합니다.또한 웹 서비스 클라이언트는 Internet Explorer나 다른 웹 브라우저에서 제공하는 자동 쿠키 관리 기능을 갖추지 못할 것입니다.Reporting Service 에이전트 클래스를 확장하여 Cookie 관리를 포함해야 합니다.이를 위해 웹 서비스 클래스의 GetWebRequest 및 GetWebResponse 방법을 덮어쓸 수 있습니다.
프로젝트를 만들고 Report Service 2005를 참조하십시오.asmx의 웹 서비스.
protected void Page_Load(object sender, EventArgs e)
{
RenderReport report = new RenderReport();
byte [] result = report.RenderReportToPDF();
//To display the PDF in web browser, set the right content type.
Response.ContentType = “Application/pdf”;
//Write the byte array to the default output stream.
Response.OutputStream.Write(result, 0, result.Length);
//Flush the contents to be displayed in the browser.
Response.Flush();
}
//Clash to take care of report rendering
public class RenderReport : ReportingService2005
{
//Change to point to your report.
private string ReportPath = “/Test”;
private string m_authCookieName;
private Cookie m_authCookie;
public RenderReport()
{
// Set the server URL. You can pull this from a config file or what ever way you want to make it dynamic.
base.Url = http://kaneco1/reportserver2008/reportservice2005.asmx;
// Calling the LogonUser method defined in the ReportService2005.asmx end point.
// The LogonUser method authenticates the specified user to the Report Server Web Service when custom authentication has been configured.
// This is to authenticate against the FBA code and then store the cookie for future reference.
try
{
base.LogonUser(“FBA username”, “password”, null);
}
catch (Exception
)
{
}
}
/// <summary>
/// Overriding the method defined in the base class.
/// </summary>
/// <param name=”uri”></param>
/// <returns></returns>
protected override WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest request;
request = (HttpWebRequest)HttpWebRequest .Create(uri);
request.Credentials = base .Credentials;
request.CookieContainer = new CookieContainer ();
if (m_authCookie != null
)
{
request.CookieContainer.Add(m_authCookie);
}
return request;
}
/// <summary>
/// Overriding the method defined in the base class.
/// </summary>
/// <param name=”request”></param>
/// <returns></returns>
protected override WebResponse GetWebResponse(WebRequest request)
{
WebResponse response = base .GetWebResponse(request);
string cookieName = response.Headers[“RSAuthenticationHeader”];
if (cookieName != null)
{
m_authCookieName = cookieName;
HttpWebResponse webResponse = (HttpWebResponse )response;
Cookie authCookie = webResponse.Cookies[cookieName];
// save it for future reference and use.
m_authCookie = authCookie;
}
return response;
}
/// <summary>
///Simplified implementation from http://msdn.microsoft.com/en-us/library/reportexecution2005.reportexecutionservice.render.aspx
/// Additionaly it is autheticating against the custom security extension. In our case it is FBA.
/// </summary>
/// <returns>Byte array containing the rendered report in PDF format </returns>
public byte [] RenderReportToPDF()
{
//Create a proxy object for ReportExecution2005.asmx referenced in the project.
//You can pull this from a config file or what ever way you want to make it dynamic.
ReportExecutionService rs = new ReportExecutionService ();
rs.Url = “http://kaneco1/ReportServer2008/ReportExecution2005.asmx”;
//Simplified code from http://msdn.microsoft.com/en-us/library/reportexecution2005.reportexecutionservice.render.aspx
byte[] result = null;
string reportPath = “/SimpleSelect” ;
string format = “PDF”
string historyID = null;
string devInfo = “”;
string encoding;
string mimeType;
string extension;
//Since warning is definied in both ReportService2005 and ReportExecution2005 endpoints,
//qualifying it with the appropriate namespace.
WebServiceFBARenderMethod.RE2K5.Warning[] warnings = null;
string[] streamIDs = null;
//Attaching the cookie received from the LogonUser method in the constructor.
//Only when autheticated, it will proceed further with ReportExecution2005.asmx end point calls.
if (null != m_authCookie)
{
//Store the cookie in the cookie container within ReportExecutionService object.
//So any subsequent call will make use of this authenticated cookie and will be succeeding.
rs.CookieContainer = new CookieContainer();
rs.CookieContainer.Add(m_authCookie);
ExecutionInfo execInfo = new ExecutionInfo();
ExecutionHeader execHeader = new ExecutionHeader();
rs.ExecutionHeaderValue = execHeader;
execInfo = rs.LoadReport(reportPath, historyID);
try
{
result = rs.Render(format, devInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);
}
catch (SoapException e)
{
}
}
else
{
//Logic to recall the LogonUser code with proper username / password.
}
//Byte array containing the rendered report in PDF.
return result;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fortinet FortiWeb Web Application Firewall Policy BypassFrom: Geffrey Velasquez Date: Wed, 2 May 2012 20:33:23 -0500...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.