Загрузить SSRS отчет из файла в C # в сервисе - PullRequest
2 голосов
/ 31 августа 2011

Мы собираемся заменить Crystal на SSRS.

Я хотел бы знать, возможно ли вообще загрузить файл .rdl или .rdl.data в C # и сгенерировать отчет в потоке памяти.

Я видел несколько примеров использования LocalReport , но, похоже, это часть сборок WinForms или WebForms.

Так что я хотел бы знать:

  • Можно ли загрузить отчет из файла как часть нашего сервиса.
  • Можем ли мы затем сгенерировать отчет в поток (скажем, память поток)
  • Могу ли я сделать это без использования сборок WebForms / WinForms в моем обслуживание
  • Можем ли мы достичь этого без использования веб-службы для SSRS

1 Ответ

7 голосов
/ 14 октября 2011

Я не уверен, что это ответ, но давайте назовем его вспомогательным материалом.

У меня есть этот пример кода из msdn, который показывает, как вы можете сделать это, создав клиент службы и вызвав данный отчет в формате PDF и сохранив его в файловом потоке.

http://msdn.microsoft.com/en-us/library/reportexecution2005.reportexecutionservice.render.aspx

Проблема, с которой я сталкиваюсь в настоящее время, заключается в том, чтобы найти правильный клиентский объект для взаимодействия после указания VS на службу SSRS. Объект, который я использую для взаимодействия со службой:

ReportExecutionServiceSoapClient rs = new ReportExecutionServiceSoapClient();

Однако интерфейс не соответствует моему примеру кода. Так что это немного ближе, но не ответ.

ОБНОВЛЕНИЕ: правильный генератор класса Proxy

Вот ссылка на то, как правильно создать прокси. Вам понадобится Windows SDK установлен (текущий 7.1). Вы можете найти это на microsoft.com, как и я. Выполните командную строку, и она сгенерирует файл для вас. Включить в проект:

http://msdn.microsoft.com/en-us/library/ms155134%28v=SQL.110%29.aspx

ОБНОВЛЕНИЕ: Работает

Мне просто нужно было создать правильный прокси. Итак, для SSRS 2010, очевидно, они разделили выполнение и управление отчетами на две службы. Единственное, что мне было нужно для генерации отчета из консольного приложения C #, - это служба выполнения. Может быть, это совершенно очевидно для всех, кроме меня :)?

Хорошо, так что откройте командную оболочку Windows SDK и поместите в нее этот материал для службы выполнения:

wsdl /language:CS /n:"Microsoft.SqlServer.ReportExecution" http://<Server Name>/reportserver/reportexecution2010.asmx?wsdl /o:"ReportExecution.cs"

Перейдите в C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 и выберите файл ReportExecution.cs. Скопируйте и вставьте его в свой проект.

Тогда вам просто нужно сказать это:

Microsoft.SqlServer.ReportExecution.ReportExecutionService rsExec = 
                new Microsoft.SqlServer.ReportExecution.ReportExecutionService();
            rsExec.Credentials = System.Net.CredentialCache.DefaultCredentials;
            rsExec.Url = @"http://<ServerName>/reportserver/ReportExecution2005.asmx";

Следуйте примеру из этой ссылки , которая аналогична приведенной выше, и вы должны генерировать довольно удивительные отчеты из вашего удобного приложения на C #.

...