Reportserver mit SSIS HTTP-Download starten

Ein Problem, was immer die ersten Anwender trifft, ist dass sich der ReportingService nach einiger Zeit des Müßiggangs dann endgültig schlafen legt. Ein erstmaliger Aufruf der Web-Site dauert bei mir dann ca. 30 Sekunden. Die Folgeaufrufe sind hingegen praktisch sofort erfolgreich.

Eine immer mal wieder beschriebene Möglichkeit den Dienst aufzuwecken, ist ein automatisierter HTTP-Download. Dafür gibt es auch entsprechende Hinweise in andereren blogs. Ich möchte dies aber lieber mit den eigenen Tools lösen und bediene mich hierzu eines Skript-Task, den ich bei Berthold Neumann gefunden habe.

Den Code habe ich für SQLServer2008 angepasst und stelle ihn hier zur Verfügung:

Imports System.Net

  
Public Sub Main()
      
'

        
Dim myWebClient As WebClient
        
Dim WebUrl As String
        Dim
Dateiname As String
        Dim
fireagain As Boolean

        
Try
            myWebClient
= New WebClient()
            
' Variable füllen
            
WebUrl = CStr(Dts.Variables("WebUrl").Value)
            
Dateiname = CStr(Dts.Variables("Dateiname").Value)

            
' Ereignismeldung senden (nur zur Information des Anwenders)

            
Dts.Events.FireInformation(0, String.Empty, String.Format _
                
("Downloading '{1}' from '{0}'", WebUrl, Dateiname), _
                  
String.Empty, 0, fireagain)

            
' Download durchführen
            
myWebClient.Credentials = CredentialCache.DefaultCredentials
            myWebClient.DownloadFile
(WebUrl, Dateiname)

            
Dts.TaskResult = ScriptResults.Success

        Catch ex
As Exception
            
' Fehlermeldung senden

            
Dts.Events.FireError(0, String.Empty, ex.Message, String.Empty, 0)
            
Dts.TaskResult = ScriptResults.Failure
        End Try
    
End Sub

End Class

Damit das ganze entsprechend konfigurierbar ist, habe ich die WebUrl in eine Variable gepackt und über die Paketkonfiguration änderbar gemacht. Das Ziel des Downloads ist bei mir ein Verzeichnis auf dem Reportserver selber, um keine weiteren Abhängigkeiten ins Spiel zu bringen. Nun kann ich ohne grosse Änderung eine auf dem Reportserver vorhandene Datei (ich lade immer ein dort vorhandenes PDF herunter) zeitgesteuert herunterladen und damit dem Reportserver für den Tagesbetrieb aufwecken.