У нас нет 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.