Ошибка при сохранении файла в формате PDF из отчета SSRS, вызываемого в пакете сценариев SSIS - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь загрузить отчет SSRS в формате PDF, используя соединение HTTP, которое вызывается в задаче сценария SSIS. Я получаю сообщение об ошибке «не удалось открыть, потому что это не поддерживаемый тип файла или файл поврежден». Конечная цель - сохранить отчет SSRS в папке, которая хранится в переменной «AEIOutputStagingFileFullPath» в виде файла PDF. Вот фактический код задачи скрипта служб SSIS

   protected void SaveFile(string url, string localpath)
    {
        System.Net.HttpWebRequest loRequest;
        System.Net.HttpWebResponse loResponse;
        System.IO.Stream loResponseStream;
        System.IO.FileStream loFileStream = new System.IO.FileStream(localpath, System.IO.FileMode.Create, System.IO.FileAccess.Write);
        byte[] laBytes = new byte[257];
        int liCount = 1;
        try
        {
            loRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
            loRequest.Credentials = System.Net.CredentialCache.DefaultCredentials;
            loRequest.Timeout = 600000;
            loRequest.Method = "GET";
            loResponse = (System.Net.HttpWebResponse)loRequest.GetResponse();
            loResponseStream = loResponse.GetResponseStream();
            while (liCount > 0)
            {
                liCount = loResponseStream.Read(laBytes, 0, 256);
                loFileStream.Write(laBytes, 0, liCount);
            }
            loFileStream.Flush();
            loFileStream.Close();
        }
        catch (Exception ex)
        {
        }
    }

    public void Main()
    {
        ConnectionManager conn = Dts.Connections["AccountSTP_HTTPCon"];
        HttpClientConnection httpConn = new HttpClientConnection(conn.AcquireConnection(null));
        string outputSTPpdf = Dts.Variables["User::AEIOutputStagingFileFullPath"].Value.ToString();
        string pdfUrl = httpConn.ServerURL = @"http://vwdsrsdba0001/reports/report/TGAP/AccountChanges_STP&rs:Command=Render&rs:Format=PDF&rc:Toolbar=False";

        SaveFile(pdfUrl, outputSTPpdf);



        Dts.TaskResult = (int)ScriptResults.Success;
    }

1 Ответ

1 голос
/ 24 марта 2020

Я использую webClient для этого:

        using (WebClient wc = new WebClient())
        {
            bool retry = true;
            int retryCt = 0;

            wc.Credentials = new System.Net.NetworkCredential([insert user],[insert password]);

            while (retry)
            {
                try
                {
                    wc.DownloadFile(@"http://[insert server]/Reportserver?/[insert folder]/[insert report name]&rs:Command=Render&rs:Format=PDF&rc:Toolbar=False&[query string of params are optional]"
                                    , filepathName);
                    retry = false;
                }
                catch
                {
                    retryCt++;
                    if (retryCt >= 10) { retry = false; }
                }
            }
        }
...