LocalReport (WebForms) и частичное доверие для создания PDF-файлов

Моя цель - создать PDF-файл для отображения на веб-странице в виде aspx или с помощью универсального обработчика. (Это будет ссылка со страницы Silverlight, но это не имеет отношения к проблеме.)

Проблема в том, что LocalReport (Microsoft.Reporting.WebForms; Microsoft.ReportViewer.WebForms.dll) требует полного доверия, а наш хостинг-сервер не допускает полного доверия. Я знаю, что ReportViewer имеет удаленный режим, который позволяет ему работать с частичным доверием, но для этого мне нужен URL-адрес сервера отчетов, который, вероятно, также должен иметь полное доверие, что ничего не решает.

Итак, как мне создать PDF-файлы из WebForms (отчетов RDLC) в среде с частичным доверием?

РЕДАКТИРОВАТЬ: Я использую C # 3.5 с VS 2008.


person Peet Brits    schedule 30.12.2010    source источник


Ответы (3)


Вам следует сначала уточнить у своей хостинговой компании, что у них есть библиотека для создания PDF-файлов, установленная в их системе, и использовать ее.

Я не тестировал себя со средним доверием, но некоторые люди добились успеха со средним доверием с этим проектом с открытым исходным кодом: http://sourceforge.net/projects/itextsharp/

Привет, Стефан

Обновить

private LocalReport CreateReport()
{
    LocalReport myReport = new LocalReport();
    myReport.ReportPath = "Report1.rdlc";

    // Insert parameters if needed
    ReportParameter myParam = new ReportParameter("MyParamName", "myParamValueAsString");

    myReport.SetParameters(new ReportParameter[] { myParam });

    return myReport;
}
You can call the function to create the PDF:



//Create new pdf file
Byte[] mybytes = CreateReport().Render("PDF", Nothing, mimeType, encoding, extension, streamids, warnings);

А с помощью Response for download можно выписать mybytes ..

person StefanE    schedule 30.12.2010
comment
Проблема в том, что LocalReport требует полного доступа, поэтому сервер выдает исключение безопасности. - person Peet Brits; 30.12.2010
comment
Вот ссылка, чтобы заставить iText работать с частичным доверием: Instantdevelopment.blogspot.com/2009/10/ - person Peet Brits; 30.12.2010
comment
Привет, я думаю, что это поддерживается только в Windows Server 2008, но я думаю, что большинство хостинговых компаний предлагает это в наши дни. - person StefanE; 30.12.2010

Если я не получу больше ответов для решения проблемы, это будет лучшим решением:

Я связался с сервером хостинга, и у них есть отдельный сервер, который позволяет получить доступ к Microsoft.ReportViewer (вероятно, с полным доверием), но за дополнительную плату.

person Peet Brits    schedule 04.01.2011

Вы используете .NET 4 на сервере или предыдущую версию? Я считаю (на основании этой справочной страницы в MSDN: http://msdn.microsoft.com/en-us/library/microsoft.reporting.webforms.localreport.executereportinsandboxappdomain.aspx), который элемент управления ReportViewer всегда выполняется в изолированном домене приложения. Однако для предыдущих версий (или когда вы используете LegacySecurityPolicy) вам необходимо явно указать, что средство просмотра отчетов должно делать это, вызвав метод ExecuteReportInSandboxAppDomain для объекта LocalReport. Я не знаю наверняка, но это может решить вашу проблему.

person Chris Anderson    schedule 03.01.2011
comment
Я использую 3.5 с VS 2008. Итак, где и когда мне это вызывать? Проблема в том, что когда я использую LocalReport (со средним уровнем доверия) в своем коде, он даже не вводит вызывающий метод на сервере, поэтому у меня никогда не будет возможности вызвать его. - person Peet Brits; 03.01.2011
comment
В ПОРЯДКЕ. Немного дальнейшего исследования, похоже, что у многих других была эта проблема. Из интереса, какой хост вы используете? Вы пытались связаться с ними, чтобы узнать, поддерживают ли они ReportViewer? В некоторых сообщениях на форуме указано, что если в GAC установлены библиотеки DLL ReportViewer, проблема исчезнет. Вы пробовали не развертывать библиотеки DLL ReportViewer в папке Bin, а вместо этого использовать версию GAC (если она доступна)? В этой статье базы знаний есть исправление для (этой?) Проблемы, которая тоже может помочь: support.microsoft.com/kb / 961594. Прочтите также эту ветку форума: bit.ly/fpsLsj. - person Chris Anderson; 03.01.2011
comment
Прочитав сообщение StefanE, я связался со своей хостинговой компанией, и у них есть альтернативная серверная среда, которая позволяет получить доступ к ReportViewer за дополнительную плату. - person Peet Brits; 04.01.2011
comment
Что касается ссылок, размещение библиотек DLL в папке bin мне не очень помогло (на моем локальном компьютере), и я не могу использовать исправление (не мой сервер). - person Peet Brits; 04.01.2011