我正在尝试使用Azure Reporting Services以编程方式呈现PDF。我怀疑实际的PDF检索很好,但在请求报告之前我无法找到验证连接的方法(通过URL)。我在我的Web应用程序的服务层工作,我不能使用Web引用(可能无法与Azure一起使用),并且使用ReportViewer控件没有意义(因为它是服务层方法)。
我有连接的所有细节,但我怀疑我需要cookie进行身份验证,我不知道如何手动创建它。任何建议/解决方案?
到目前为止,这是我的代码:
string userName = BJConfigurationManager.GetSetting("ReportingServiceUsername");
string password = BJConfigurationManager.GetSetting("ReportingServicePassword");
NetworkCredential networkCredential = new NetworkCredential(userName, password);
Domain.Report report = GetReportById(id);
int timeout = 30; //seconds
string url = "https://bleh.ctp.reporting.database.windows.net/ReportServer/Pages/ReportViewer.aspx?...";
string destinationFileName = "@C:\\Temp.pdf";
// Create a web request to the URL
HttpWebRequest MyRequest = (HttpWebRequest)WebRequest.Create(url);
MyRequest.PreAuthenticate = true;
MyRequest.Credentials = networkCredential;
MyRequest.Timeout = timeout * 1000;
try
{
// Get the web response -- THE RESPONSE COMES BACK AS UNAUTHENTICATED...
HttpWebResponse MyResponse = (HttpWebResponse)MyRequest.GetResponse();
答案 0 :(得分:1)
查看标题为“SOAP Management Endpoint Programmatic Access”的部分: http://msdn.microsoft.com/en-us/library/windowsazure/771e88b6-ab0f-4910-a5fa-5facd8d56767#SOAPManagement。 它解释了如何使用没有ReportViewer控件的cookie容器进行身份验证。
答案 1 :(得分:0)
我认为这不会起作用。 Azure报告使用表单身份验证,据我所知,您无法将Forms Auth cookie与MachineKey进行匹配以进行加密。
答案 2 :(得分:0)
我试图完成相同的任务......但是使用WebRequest是不可能的。 我使用像这样的ServerReport类改变了方法:
ServerReport report;
report = new ServerReport();
report.ReportServerUrl = new Uri(reportServerName + "/ReportServer");
report.ReportPath = "/ReportPath";
report.ReportServerCredentials = new ReportServerCredentials();
report.SetParameters(new Microsoft.Reporting.WebForms.ReportParameter("param1", param1));
report.SetParameters(new Microsoft.Reporting.WebForms.ReportParameter("param2", param1));
return report.Render(reportParams.OutputFormat);
ReportServerCredentials类必须实现IReportServerCredentials接口,如this。
有关IReportServerCredentials界面和实现here的更多信息。