【问题标题】:SSRS PDF report downloaded from code using HTTPCLIENT is corrupted使用 HTTPCLIENT 从代码下载的 SSRS PDF 报告已损坏
【发布时间】:2017-12-18 17:14:48
【问题描述】:

SSRS 报告托管在 Azure 中启用了 Windows 身份验证的虚拟机上。我可以通过提供凭据在浏览器中点击 url 来下载 PDF,但同样不适用于代码。我可以下载 PDF,但说它已损坏。 当我在浏览器中点击 url 时,它下载的 PDF 大小为 900KB,但从代码中下载的大小为 120kb 的 PDF 和它的说法是损坏的。这是下载较少字节的任何安全问题吗?

下面是示例代码:

var handler = new HttpClientHandler { Credentials = new NetworkCredential("username", "Password", "domain") }; HttpClient 客户端 = 新的 HttpClient(handler); HttpResponseMessage 结果 = client.PostAsync(requestConnection, content).Result; var responseData = result.Content.ReadAsByteArrayAsync().Result;

【问题讨论】:

  • 这有帮助吗?如果您需要更多信息,我可能会提供帮助。

标签: azure reporting-services virtual-machine


【解决方案1】:

如果您尝试将 SSRS 报告导出为 PDF,我会使用一些代码将报告生成到 MemoryStream 中,但如果您愿意,可以将其保存到文件中

所有变量都以“VAR”结尾并且是字符串

希望对你有帮助

                            Dim ServerUrl As New Uri(ReportServerUrlVAR)
                            Dim ReportViewer1 As New ReportViewer
                            ReportViewer1.ServerReport.ReportServerUrl = ServerUrl
                            ReportViewer1.ServerReport.ReportPath = "/" & ReportsPathNameVAR & "/" & ReportNameVAR
                            ReportViewer1.ServerReport.ReportServerCredentials.NetworkCredentials = New Net.NetworkCredential(ReportServiceUserNameVAR, m_Datamanager.Settings.ReportServicePasswordVAR)

                            ReportViewer1.RefreshReport()

                            Dim mimeType As String = String.Empty
                            Dim encoding As String = String.Empty
                            Dim extension As String = String.Empty
                            Dim deviceInfo As String = String.Empty
                            Dim streamids As String() = Nothing
                            Dim warnings As Warning() = Nothing
                            Dim format As String = "PDF"
                            deviceInfo = "<DeviceInfo>" + "<SimplePageHeaders>True</SimplePageHeaders>" + "</DeviceInfo>"
                            Dim bytes As Byte() = ReportViewer1.ServerReport.Render(format, deviceInfo, mimeType, encoding, extension, streamids, warnings)

                            Dim ms As New MemoryStream(bytes)

                            'Create Email
                            Dim SmtpServer As New SmtpClient
                            Dim mail As New MailMessage
                            If EmailUserNameVAR <> String.Empty Then
                                SmtpServer.Credentials = New Net.NetworkCredential(EmailUserNameVAR, EmailPasswordVAR)
                            End If
                            SmtpServer.Port = EmailServerPortVAR
                            SmtpServer.Host = EmailServerVAR
                            mail = New MailMessage()
                            mail.From = New MailAddress(EmailFromAddressVAR)
                            mail.To.Add(m_EmailAddress)
                            Dim NewAttach As New Attachment(ms, ReportNameVAR & ".pdf")
                            mail.Attachments.Add(NewAttach)
                            mail.Subject = "Automatic Email Report: " & ReportNameVAR
                            mail.Body = "This message is an Automatic Email Report: " & ReportNameVAR & vbCrLf & "Please Check the Attached File."
                            SmtpServer.Send(mail)
                            Application.ExitThread()

【讨论】:

  • 这有帮助吗?如果您需要更多信息,我可能会提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多