Ich habe dieses ASP.NET gemacht, aber nicht VB.NET. Es ging darum, hinter den Kulissen eine Anfrage an den Berichtsserver unter Verwendung von URL Access zu senden, wo Sie den Render-Typ des Berichts (in diesem Fall PDF) angeben könnten. Mein Code-Behind würde die Datei herunterladen und auf dem Webserver speichern und sie dann serversichern Sichern Sie den Benutzer als PDF-Datei. Alles, was der Benutzer tun musste, war seine Parameter einzugeben und den Submit Button zu drücken.
Ich könnte mir vorstellen, dass Sie ziemlich genau die gleichen Schritte ausführen können, die ich bis zur Bereitstellung der Datei durchlaufen habe. In einer Formularumgebung müssten Sie ihnen nicht die Download-Aufforderung geben, da sie bereits aktiv war Die Maschine und alles, was Sie tun müssten, ist die Datei öffnen (die in Ihrem Standard-PDF-Viewer geladen werden soll).
AKTUALISIEREN: Hier ist ein Teil des Codes, das meiste davon basiert auf einem CodeProject-Tutorial, aber ich kann mich nicht erinnern, wie ich dazu gekommen bin. Einige kleinere Änderungen wurden vorgenommen:
Public Sub ServeReport(ByVal URL As String, _
ByVal Directory As String, ByVal Filename As String)
Dim f As New FileIOPermission(PermissionState.None)
Dim fs As FileStream
If Not System.IO.Directory.Exists(Directory) Then
System.IO.Directory.CreateDirectory(Directory)
End If
DownloadWebFile(URL, Directory & Filename)
fs = File.Open(Directory & Filename, FileMode.Open)
Dim bytBytes(fs.Length) As Byte
fs.Read(bytBytes, 0, fs.Length)
fs.Close()
Response.AddHeader("Content-disposition", _
"attachment; filename=" & Filename)
Response.ContentType = "application/octet-stream"
Response.BinaryWrite(bytBytes)
f.AllLocalFiles = FileIOPermissionAccess.AllAccess
File.Delete(Directory & Filename)
End Sub
Hier ist die DownloadWebFile Unter, die tatsächlich den Bericht Serveranfrage machen und die Datei herunterzuladen und auf der lokalen Festplatte speichern.
Public Shared Sub DownloadWebFile(ByVal URL As String, _
ByVal DestFilename As String)
'Create a web request to attach to the remote file
Dim WebFile As System.Net.WebRequest
'Create a file stream for writing the file to the local filename
Dim LocalFile As System.IO.FileStream
'Create some working variables for the copy process
Dim Buffer(16384) As Byte
Dim BytesRead As Long
'Open a WebRequest stream to the source file
WebFile = System.Net.WebRequest.Create(URL)
'Credentials are required, pass the defaults
WebFile.Credentials = System.Net.CredentialCache.DefaultCredentials
'Create the local file
LocalFile = New IO.FileStream(DestFilename, IO.FileMode.Create)
'Download the file in 16k chunks
With WebFile.GetResponse.GetResponseStream
Do
BytesRead = .Read(Buffer, 0, 16384)
LocalFile.Write(Buffer, 0, BytesRead)
Loop Until BytesRead = 0
.Close()
End With
WebFile = Nothing
'Force all data out of memory and into the file before closing
LocalFile.Flush()
LocalFile.Close()
LocalFile = Nothing
End Sub
Schließlich, hier ist ein Beispiel für die Nutzung:
Dim URL As String
URL = reporturl & "&rs%3aCommand=Render&rs%3AFormat=PDF"
ServeReport(URL, "C:\Temp\", "MyReport.PDF")
ich die Unfähigkeit hasse es richtig VB.NET Kommentare zu erkennen – TheTXI