Вызов SSRS из SSIS: некоторые файлы PDF повреждены - PullRequest
0 голосов
/ 08 мая 2018

Я звоню SSRS из SSIS Script task и хранит отчет в формате 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.Create, 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 = 7200
        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

Public Sub Main()
    Dim url, destination, Todaydate, FolderName, DestinationError As String
    Try

        Todaydate = Dts.Variables("TodayDate").Value.ToString

        FolderName = Dts.Variables("FolderName").Value.ToString

        destination = Dts.Variables("DestFolder").Value.ToString + "\" + Todaydate + "\" + FolderName + "\" + Dts.Variables("CurrentReport").Value.ToString + "_" + Dts.Variables("CurrentParamID").Value.ToString + "_" + Format(Now, "yyyyMMdd") + ".pdf"
        url = "http://server-name/ReportServer?/ReportPath/AUTOMATED/" + Dts.Variables("CurrentReport").Value.ToString + "&rs:Command=Render&Param=" + Dts.Variables("CurrentParamID").Value.ToString + "&rs:Format=PDF"   

        Dts.Variables("User::GeneratedPDFpath").Value = destination

        SaveFile(url, destination)

    End Try
    Dts.TaskResult = ScriptResults.Success

End Sub

Этот код отлично работает и генерирует отчет в формате PDF. Но иногда он генерирует PDF-файл размером 0 КБ. При открытии этого PDF-файла отображается ошибка для поврежденного файла.

P.S. Я использовал задачу «Выполнение SQL», которая хранит набор результатов. Используя этот набор результатов в контейнере Foreach Loop, он изначально создал папку для текущей даты и сохраняет соответствующий PDF-файл в папке.

Был бы признателен, если бы кто-то мог помочь с этим.

...