Рендеринг SSRS в консольном приложении C #;где найти SSRS ReportExecutionService? - PullRequest
0 голосов
/ 09 октября 2018

В консольном приложении C # я пытаюсь отобразить отчет SSRS на нашем сервере отчетов, затем перенаправлю его в файл PDF.Я нашел несколько фрагментов документации, но я сталкиваюсь с препятствиями ... как мне добавить ссылку на Службу выполнения отчетов?

Я смог выполнить первый шаг в примерах кода ... Я добавляюСсылка на службу / нажмите Добавить веб-ссылку, набрав http://ServerName/ReportServer_XXX/reportservice2010.asmx, (где я получил «ReportServer_XXX» путем удаленного взаимодействия с сервером и запуска RS Config Manager).Тогда я могу сделать: var rs = new ReportingService.ReportingService2010 ();rs.Credentials = System.Net.CredentialCache.DefaultCredentials;etc

Следующим шагом является аналогичное добавление веб-ссылки к ReportExecutionService, которая имеет метод .Render () для фактического вывода PDF в виде массива байтов.Однако, когда я набираю URL: http://ServerName/ReportServer_XXX/reportexecutionservice2010.asmx
(или… 2005.asmx ”), он вызывает заголовок ServerName / ReportServer_XXX - / и под этим папками на нашем сайте SSRS (главы, финансы, маркетинг), так далее).Кнопка «Добавить ссылку» неактивна.

Что я делаю, сутулость?Спасибо!

1 Ответ

0 голосов
/ 08 мая 2019

Вы не делаете ничего глупого вообще.Однако вы можете изменить этот URL-адрес на что-то вроде этого.

ReportExecutionService rexec = new ReportExecutionService();
rexec.Credentials = System.Net.CredentialCache.DefaultCredentials;
rexec.Url = "http://<your report `enter code here`
    server>/reportserver/ReportExecution2005.asmx?";

Я знаю, что это нелогично.Я использую SSRS 2017 и VS 2017, и это все еще "2005".

    // The following is SSRS boiler-plate from Microsoft
string encoding = null;
Warning[] warnings = null;
string[] streamIDs = null;
ExecutionInfo execInfo = new ExecutionInfo();
ExecutionHeader execHeader = new ExecutionHeader();
rexec.ExecutionHeaderValue = execHeader;
execInfo = rexec.LoadReport(reportPath, historyID);
rexec.SetExecutionParameters(parameters, "en-us");
Console.WriteLine("SessionID: {0}", rexec.ExecutionHeaderValue.ExecutionID);
try
{
     Console.WriteLine(reportName.ToString());
     result = rexec.Render(format, devInfo, out string extension, out string 
        mimeType, out encoding, out warnings, out streamIDs);
execInfo = rexec.GetExecutionInfo(); Console.WriteLine("Execution date and time: 
        {0}", execInfo.ExecutionDateTime);
}

catch (SoapException e)
{
    Console.WriteLine(e.Detail.OuterXml);
    Dts.Events.FireError(0, "Error ",e.Message+ "\r" + e.StackTrace, String.Empty,0);
    Dts.TaskResult = (int)ScriptResults.Failure;
 }
...