Frage

Diese Frage ursprünglich gefragt, welche die beste Methode für das Hochladen von Dateien über SFTP oder FTPS in SSIS ist. Es listet nun nur die Vor- und Nachteile jeder Lösung. Ich persönlich CozyRoc SFTP-Bibliothek in diesen Tagen, aber ich habe jede der folgenden Lösungen an einem Punkt oder einem anderen verwendet.

SSIS COMPONENT BIBLIOTHEK

Methode: Installieren Sie ein SSIS-Komponenten-Bibliothek von CozyRoc , Codeplex , BizCrypto , PragmaticWorks oder ein anderer Anbieter auf jedem Server Entwicklung und Produktion und die SFTP Aufgabe verwenden, um die Dateien zu laden.

Vorteile: Einfach zu bedienen. Es sieht aus, riecht und fühlt sich an wie eine normale SSIS Aufgabe. SSIS erkennt das Kennwort auch als sensible Informationen und ermöglicht es Ihnen, alle normalen Optionen für die sensiblen Daten zu schützen, anstatt nur in Klartext in einem nicht sicheren Weise zu speichern. Funktioniert gut mit anderen SSIS Aufgaben wie foreach-Schleife Container. Fehler, wenn Up- und Downloads scheitern. Funktioniert gut, wenn Sie nicht wissen, die Namen der Dateien auf der Website entfernten FTP oder herunterladen, wenn Sie den Namen der Datei kennen, werden erst zur Laufzeit laden.

Nachteile: Mit Ausnahme der Codeplex-Lösung, dieses Geld kostet in einer Produktionsumgebung zu lizenzieren. Erfordert die Bibliotheken auf jeder Entwicklungs- und Produktionsmaschine installiert wird. Wenn es die Codeplex-Lösung ist, dann verwenden Sie Software, die nicht von einem bestimmten Anbieter unterstützt. Das macht Sie auch abhängig von den Lieferanten ihre Bibliotheken zwischen jeder Version zu aktualisieren. Zum Beispiel vor 2008 RTM'd, ich auf einer CTP-Version von 2008 einen neuen Server wurde entwickelt und die CozyRoc 2005 Bibliothek war damit unvereinbar. Schließlich gaben sie eine 2008 kompatible Version, aber ich hatte vorübergehend die Befehlszeile Lösung zu verwenden, um dieses Problem zu umgehen.

COMMAND LINE SFTP PROGRAMM

Methode: Installieren Sie eine kostenlose Kommandozeilen-SFTP-Anwendung wie Putty und WinSCP und führen Sie es entweder durch eine Batch-Datei oder das Betriebssystem Prozess-Task ausgeführt wird. Anweisungen, dies zu tun via WinSCP werden hier .

Pros: Frei, frei und kostenlos. Sie können sicher sein, es ist sicher, wenn Sie Putty verwenden, da zahlreiche Kunden GUI FTP erscheinen Putty unter der Decke zu verwenden. Sie DEFINATELY wissen Sie verwenden, SSH2 und nicht SSH.

Nachteile: Die beiden Befehlszeilenprogramme Ich habe versucht (Putty und Cygwin) erforderlich, um das SFTP-Passwort in einem nicht sicheren Ort zu speichern. Ich habe nicht eine gute Art und Weise zu erfassen Ausfälle oder Fehler beim Hochladen von Dateien gefunden. Das Verfahren sieht nicht so aus und riecht wie SSIS. Der meiste Code wird in Textdateien anstelle von SSIS eingekapselt selbst. Schwer zu verwenden, wenn Sie nicht wissen, den genauen Namen der Datei, die Sie oder Herunterladen hochladen.

Ein 3RD PARTY C # oder VB.NET BIBLIOTHEK

Methode: eine SFTP oder FTPS-Bibliothek installieren und eine Skripttask verwenden, die die Bibliothek verweist auf die Dateien zu. (Ich habe nie versucht, dies, so werde ich auf die Vor-und Nachteile erraten)

Pros: Wahrscheinlich leicht Fehler zu erfassen. Sollte funktioniert gut mit Variablen, so wäre es wahrscheinlich einfach zu bedienen, auch wenn Sie nicht wissen, den genauen Namen der Datei, die Sie hochladen oder Herunterladen bereit.

Nachteile: Es ist eine Skript-Task mit .NET-Bibliotheken kombiniert. Wenn Sie SSIS verwenden, dann sind Sie wahrscheinlich besser mit SSIS Aufgaben dann Code .NET. Script Aufgaben sind auch schwierig zu beheben, da sie nicht die gleichen Debugging-Tools und Features als reguläre .NET-Projekte haben. Erzeugt eine Abhängigkeit von 3rd-Party-Code, der nicht zwischen den verschiedenen Versionen arbeiten könnenvon SQL Server. Um fair zu sein, ist es wohl eher zwischen verschiedenen Versionen von SQL Server arbeiten, als eine dritte Partei SSIS Task-Bibliothek. Ein weiterer großer con - Ich habe keine freien C # oder VB.NET-Bibliothek gefunden, die dies als die noch den Fall ist. Also, wenn jemand weiß, dann lass es mich wissen!

War es hilfreich?

Lösung

Die folgende Frage könnte von Nutzen sein:

Was für eine empfohlene Wahl von SSIS-Komponente würde ausführen SFTP oder FTPS Aufgabe?

CozyRoc:

Es sollte einfach sein, indem der Server SSH-Protokoll die Verfügbarkeit zu prüfen und Tests „nur SSHv2 erlauben“. Lassen Sie Ihr versucht Cozy die Verkaufsabteilung zu fragen?

Kommandozeilen-SFTP:

Das unbekannte Dateiname Problem einfache Skript / Verwendung von Wildcards werden könnte (zumindest unter Cygwin) gelöst.

3rd-Party-lib:

Warum brauchen Sie einen Dritten lib für FTPS? .NET unterstützt hat dieses Protokoll seit 2.0 oder so.

http://msdn.microsoft.com /en-us/library/system.net.ftpwebrequest.enablessl.aspx

Andere Tipps

Ich wollte nur auf ein Update geben, was wir beschlossen, tatsächlich zu tun, um die SFTP Probleme in SSIS zu lösen. Hier ist die Aufschlüsselung von dem, was passiert ist:

  1. Ich versuchte zunächst mit Putty und einige Batch-Dateien, Dateien hochzuladen, aber es war schwierig, Fehler zu erfassen. Auch ich wurde Speicherung unsere SFTP-Anmeldeinformationen im Klartext-Dateien, da es Teil der Putty Upload-Skripten war.

  2. Wir kauften eine CozyRoc Lizenz für unseren SSIS-Server für ein paar hundert Dollar pro Jahr und ich bin völlig satisified mit den Ergebnissen ihres Produktes. Mit CozyRoc Produkt hebt die Steuerflusstask Fehler, wenn es irgendwelche Probleme mit dem Upload sind. Da ich auch mehrere Junior-SSIS-Programmierer in meinem Team haben, war es einfacher für sie, wie für das Verständnis der Steuerungsablauf Aufgabe Setup als die Putty-Skripte Methode zu verwenden. Und schließlich wird das Passwort verschlüsselt zum Schutz sensibler Daten SSIS native Verschlüsselung. Ich habe nicht mehr alle Passwörter im Klartext auf meinem Server gespeichert.

habe ich einige der anderen 3rd-Party-Bibliotheken überprüfen, die in dieser Frage empfohlen wurden, aber es scheint CozyRoc die billigste der Anbieter war, und sie hatten auch ein paar andere SSIS Aufgaben, die ich in der Lage gewesen, in meinem BI Team nutzen . Danke, CozyRoc!

Ohne Komponente können Sie Skript-Task verwenden. Siehe diesen Link

Imports System
Imports Microsoft.SqlServer.Dts.Runtime
Imports Ftp
Imports System.IO

Public Class ScriptMain

    Public Sub Main()

        Try

            Dim cm As ConnectionManager = Dts.Connections.Add("FTP")
            cm.Properties("ServerName").SetValue(cm, Dts.Variables("SFTPServerName").Value.ToString)
            cm.Properties("ServerUserName").SetValue(cm, Dts.Variables("SFTPLogin").Value.ToString)
            cm.Properties("ServerPassword").SetValue(cm, Dts.Variables("SFTPPassword").Value.ToString)
            cm.Properties("ServerPort").SetValue(cm, Dts.Variables("SFTPPortNumber").Value.ToString)
            cm.Properties("Timeout").SetValue(cm, "0")
            cm.Properties("ChunkSize").SetValue(cm, "0") '1000 kb
            cm.Properties("Retries").SetValue(cm, "0")
            Dts.Variables("Continue").Value = 0

            Dim ftp As FtpClientConnection = New FtpClientConnection(cm.AcquireConnection(Nothing))
            Dim FilesList() As String
            Dim FolderName() As String

            Dim Separator As String = ";"
' \\ServerName\Share1;\\ServerName\Share2 : Local copy
            Dim FolderLocalListSrc As String = Dts.Variables("FolderLocalListSrc").Value.ToString
            Dim FolderLocalListDst() As String = Split(FolderLocalListSrc, Separator)
            Dim Counter As Integer

            ftp.Connect()
            ftp.GetListing(FolderName, FilesList)

            If FilesList IsNot Nothing Then

                Dim FileName As String

                For Each FileName In FilesList

                    Dim FileToProcess(0) As String
                    Dim FileToMove(0) As String

                    For Counter = 0 To FolderLocalListDst.GetUpperBound(0)

                        FileToProcess(0) = FileName
                        FileToMove(0) = FolderLocalListDst(Counter) + FileName

                        If (File.Exists(FileToMove(0)) = False) Then

                            ' Téléchargement en local
                            ftp.ReceiveFiles(FileToProcess, FolderLocalListDst(Counter), True, True)

                        End If

                    Next

                    ' Upload du fichier dans les archives du FTP
                    ftp.SendFiles(FileToMove, "/Archives", True, False)

                    ' Suppression du fichier à la racine du FTP
                    ftp.DeleteFiles(FileToProcess)

                Next

            End If

            ftp.Close()

            Dts.TaskResult = Dts.Results.Success
        Catch ex As Exception
            Dts.TaskResult = Dts.Results.Failure
        End Try

    End Sub

End Class
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top