Когда SSIS сохраняет PDF-файл из SSRS, PDF-файл поврежден

У нас нет SSRS Enterprise, и я разрабатываю все это в VS2017. У меня есть отчет SSRS, загруженный на сервер и работающий отлично. Я могу скопировать/вставить URL-адрес в IE, и он запустит отчет с указанными параметрами, поэтому я считаю, что URL-адрес правильный.

На веб-странице SQL Reporting Services я могу щелкнуть «Экспорт» и выбрать PDF, и он правильно сохранит его в формате PDF. То же самое с Excel, он правильно экспортирует его как Excel.

Однако, когда я пытаюсь создать PDF-файл через SSIS, он создает файл с правильным именем в правильной папке, поэтому он выглядит хорошо, но это не так.

Если я попытаюсь открыть PDF-файл, он вернется как поврежденный.

Я нашел кое-что (SSRS PDF Export. При открытии этого документа произошла ошибка. Это файл поврежден и не может быть восстановлен), в котором говорилось об изменении разрешений для некоторых DLL, чтобы иметь полный доступ, а не только чтение/запись, поэтому я пошел и изменил разрешения для домена \ администраторов, чтобы иметь полный доступ к двум библиотекам DLL и это не имело значения

Вот URL, который передается коду:

http://XXXX/Reports/report/ScheduledReports/WeeklySalesInvoiced_PDF?StartDate=07%2F08%2F2019&EndDate=07%2F12%2F2019&TerritoryID=101&rs:Command=Render&rs:Format=PDF

Вот код, который должен создать PDF:

Protected Sub SaveFile(ByVal url As String, ByVal localpath As String)
Dim loRequest As System.Net.HttpWebRequest
Dim loResponse As System.Net.HttpWebResponse
Dim loResponseStream As System.IO.Stream
Dim loFileStream As New System.IO.FileStream(localpath, System.IO.FileMode.CreateNew, System.IO.FileAccess.Write)
Dim laBytes(256) As Byte
Dim liCount As Integer = 1
Try

    loRequest = CType(System.Net.WebRequest.Create(url), System.Net.HttpWebRequest)
    loRequest.Credentials = System.Net.CredentialCache.DefaultCredentials
    loRequest.Timeout = 600000
    loRequest.Method = "GET"
    loResponse = CType(loRequest.GetResponse, System.Net.HttpWebResponse)
    loResponseStream = loResponse.GetResponseStream
    Do While liCount > 0
        liCount = loResponseStream.Read(laBytes, 0, 256)
        loFileStream.Write(laBytes, 0, liCount)
    Loop

    loFileStream.Flush()
    loFileStream.Close()

Catch ex As Exception

End Try
End Sub

Когда я открываю PDF-файл в notepad++, я вижу вот что (что не похоже на то, что в отчете):

<!DOCTYPE html>
<html id="portal" ng-controller="MainController as main" lang="{{main.getLanguage()}}" ng-class="{'flex':main.needsCssFlex}" ng-strict-di resizer>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=ed

Я попытался сохранить его в формате Excel, и в итоге получилось то же самое. Он будет поврежден, и Excel все равно попросит его открыть, я говорю «да», просто откройте его, и я вижу то же самое, что и в PDF.


person user3868304    schedule 24.07.2019    source источник


Ответы (1)


Предполагая установку SSRS по умолчанию, вы переходите к http://server/Reports, и это выглядит примерно так

Домашняя страница SSRS 2016

Это веб-портал, с помощью которого пользователи могут управлять всеми функциями SSRS.

Существует второй сайт, связанный с SSRS, и это тот, на который вам следует указать, так как он обрабатывает «фактические» работы http://server/ReportServer Это должно выглядеть примерно так

Веб-сервер SSRS

Перестройте свой URL-адрес, используя местоположение ReportServer, и я подозреваю, что вы получите жизнеспособный документ PDF/Excel. Прямо сейчас вы просто загружаете страницу-оболочку с веб-портала.

person billinkc    schedule 24.07.2019