Проблема аутентификации служб отчетов - PullRequest
4 голосов
/ 18 апреля 2011

Я пытаюсь программно отобразить PDF с помощью служб отчетов Azure. Я подозреваю, что фактическое получение PDF в порядке, но я не могу найти способ аутентификации соединения перед запросом отчета (через URL). Я работаю в слое служб моего веб-приложения и не могу использовать веб-ссылку (может не работать с 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();

Ответы [ 3 ]

1 голос
/ 11 декабря 2011

Ознакомьтесь с разделом «Программный доступ к конечной точке управления SOAP»: http://msdn.microsoft.com/en-us/library/windowsazure/771e88b6-ab0f-4910-a5fa-5facd8d56767#SOAPManagement. В нем объясняется, как проходить проверку подлинности с использованием контейнера cookie без элемента управления ReportViewer.

0 голосов
/ 06 сентября 2013

Я пытался выполнить ту же задачу ... но использование веб-запроса было невозможно.Я изменил подход, используя класс 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 здесь .

0 голосов
/ 18 апреля 2011

Я не думаю, что это сработает. Служба отчетов Azure использует проверку подлинности с помощью форм, и, насколько я понимаю, вы не сможете сопоставить файл cookie проверки подлинности с помощью Forms и MachineKey для шифрования.

...