2009-01-03 54 views
30

के माध्यम से एसएफटीपी या एफटीपीएस फ़ाइलों के लिए सर्वश्रेष्ठ तरीका यह सवाल मूल रूप से पूछा गया कि एसएसआईएस में एसएफटीपी या एफटीपीएस के माध्यम से फाइल अपलोड करने का सबसे अच्छा तरीका कौन सा है। अब यह सिर्फ प्रत्येक समाधान के पेशेवरों और विपक्ष की सूची देता है। मैं व्यक्तिगत रूप से इन दिनों CozyRoc की एसएफटीपी लाइब्रेरी का उपयोग करता हूं, लेकिन मैंने नीचे दिए गए प्रत्येक समाधान को एक बिंदु या दूसरे पर उपयोग किया है।एसएसआईएस

लघु उद्योगों घटक लाइब्रेरी

विधि: से एक लघु उद्योगों घटक पुस्तकालय स्थापित CozyRoc, Codeplex, BizCrypto, PragmaticWorks, या कुछ प्रत्येक विकास और उत्पादन सर्वर पर अन्य विक्रेता और फ़ाइलों को अपलोड करने SFTP कार्य का उपयोग करें।

पेशेवर: उपयोग करने में आसान। यह सामान्य एसएसआईएस कार्य की तरह दिखता है, गंध करता है, और महसूस करता है। एसएसआईएस पासवर्ड को संवेदनशील जानकारी के रूप में भी पहचानता है और आपको गैर-सुरक्षित तरीके से स्पष्ट टेक्स्ट में संग्रहीत करने के बजाय संवेदनशील जानकारी की सुरक्षा के लिए सभी सामान्य विकल्प की अनुमति देता है। फॉरएच लूप कंटेनर जैसे अन्य एसएसआईएस कार्यों के साथ अच्छी तरह से काम करता है। अपलोड और डाउनलोड विफल होने पर त्रुटियां निकलती हैं। जब आप दूरस्थ FTP साइट पर फ़ाइलों के नामों को डाउनलोड करने के लिए या जब आप रन-टाइम तक अपलोड करने के लिए फ़ाइल का नाम नहीं जानते हैं तो अच्छी तरह से काम करता है।

विपक्ष: कोडप्लेक्स समाधान के अपवाद के साथ, यह उत्पादन वातावरण में लाइसेंस के लिए धन खर्च करता है। प्रत्येक विकास और उत्पादन मशीन पर पुस्तकालय स्थापित करने की आवश्यकता है। यदि यह कोडप्लेक्स समाधान है, तो आप ऐसे सॉफ़्टवेयर का उपयोग कर रहे हैं जो किसी विशिष्ट विक्रेता द्वारा समर्थित नहीं है। यह आपको प्रत्येक संस्करण के बीच अपने पुस्तकालयों को अद्यतन करने के लिए विक्रेता पर निर्भर करता है। उदाहरण के लिए, 2008 आरटीएमएड से पहले, मैं 2008 के सीटीपी संस्करण पर एक नया सर्वर विकसित कर रहा था और कोजीरोक 2005 लाइब्रेरी इसके साथ असंगत थी। आखिरकार उन्होंने 2008 के संगत संस्करण को जारी किया, लेकिन मुझे इस मुद्दे के आसपास काम करने के लिए अस्थायी रूप से कमांड लाइन समाधान का उपयोग करना पड़ा।

कमांड लाइन SFTP कार्यक्रम

विधि: पोटीन और WinSCP के रूप में एक नि: शुल्क कमांड लाइन SFTP आवेदन स्थापित करें और यह या तो अमल एक बैच फ़ाइल या ऑपरेटिंग सिस्टम प्रक्रिया कार्य चल रहा है। WinSCP के माध्यम से ऐसा करने के लिए निर्देश here सूचीबद्ध हैं।

पेशेवर: नि: शुल्क, नि: शुल्क और मुफ्त। आप सुनिश्चित कर सकते हैं कि यदि आप पुटी का उपयोग कर रहे हैं तो यह सुरक्षित है क्योंकि कई जीयूआई एफ़टीपी क्लाइंट कवर के तहत पुट्टी का उपयोग करने के लिए दिखाई देते हैं। आप निश्चित रूप से जानते हैं कि आप एसएसएच 2 का उपयोग कर रहे हैं और एसएसएच नहीं।

विपक्ष: मैंने कोशिश की दो कमांड लाइन उपयोगिताओं (पुटी और सिगविन) को एक सुरक्षित स्थान में एसएफटीपी पासवर्ड संग्रहित करने की आवश्यकता है। फ़ाइलों को अपलोड करते समय मुझे असफलताओं या त्रुटियों को पकड़ने का एक अच्छा तरीका नहीं मिला है। प्रक्रिया एसएसआईएस की तरह दिखती है और गंध नहीं करती है। अधिकांश कोड एसएसआईएस के बजाय टेक्स्ट फाइलों में encapsulated है। यदि आप फ़ाइल अपलोड या डाउनलोड कर रहे हैं तो उस सटीक नाम को नहीं जानते हैं, तो इसका उपयोग करना मुश्किल है।

एक 3 पार्टी C# या VB.NET लाइब्रेरी

विधि: एक SFTP या FTPS पुस्तकालय स्थापित करें और एक स्क्रिप्ट टास्क पुस्तकालय संदर्भ फ़ाइलों को अपलोड करने का उपयोग करें। (मैंने कभी यह कोशिश नहीं की है, इसलिए मैं पेशेवरों और विपक्षों पर अनुमान लगाने जा रहा हूं)

पेशेवर: त्रुटियों को कैप्चर करने में शायद आसान है। चर के साथ अच्छी तरह से काम करना चाहिए, इसलिए जब आप अपलोड या डाउनलोड कर रहे फ़ाइल के सही नाम को नहीं जानते हैं तो भी इसका उपयोग करना आसान होगा।

विपक्ष: यह एक स्क्रिप्ट कार्य है जो .NET पुस्तकालयों के साथ संयुक्त है। यदि आप एसएसआईएस का उपयोग कर रहे हैं, तो शायद आप एसएसआईएस कार्यों के साथ अधिक आरामदायक हैं तो .NET कोड। स्क्रिप्ट कार्यों को समस्या निवारण करना भी मुश्किल होता है क्योंकि उनके पास नियमित .NET प्रोजेक्ट्स के समान डीबगिंग टूल और सुविधाएं नहीं होती हैं।तृतीय पक्ष कोड पर निर्भरता बनाता है जो SQL सर्वर के विभिन्न संस्करणों के बीच काम नहीं कर सकता है। निष्पक्ष होने के लिए, संभवतः किसी तृतीय पक्ष SSIS कार्य पुस्तकालय की तुलना में SQL सर्वर के विभिन्न संस्करणों के बीच काम करने की अधिक संभावना है। एक और बड़ी बात - मुझे एक मुफ्त सी # या वीबी.नेट पुस्तकालय नहीं मिला है जो अभी तक ऐसा करता है। तो अगर कोई एक के बारे में जानता है, तो कृपया मुझे बताएं!

उत्तर

9

निम्नलिखित प्रश्न काम का हो सकता:

What would be a recommended choice of SSIS component to perform SFTP or FTPS task?

Cozyroc:

यह सर्वर की स्थापना द्वारा SSH प्रोटोकॉल उपलब्धता परीक्षण करने के लिए और परीक्षण "केवल SSHv2 अनुमति देते हैं" करने के लिए आसान होना चाहिए । क्या आपने कोजी की बिक्री विभाग से पूछने की कोशिश की है?

कमांड लाइन SFTP:

अज्ञात फ़ाइल नाम समस्या हल किया जा सकता सरल स्क्रीप्टिंग/वाइल्डकार्ड के उपयोग (कम से कम Cygwin के तहत)।

3 पार्टी lib:

तुम क्यों FTPS के लिए एक तीसरी पार्टी lib की ज़रूरत है? .NET ने 2.0 या उसके बाद से इस प्रोटोकॉल का समर्थन किया है।

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

+0

मुफ्त समाधान के लिए, जब मुझे एसएफटीपी का उपयोग करना है तो एफटीपीएस अच्छा दिखता है।चूंकि मैं दोनों परिदृश्यों को संभालने के लिए एक आर्किटेक्चर करना पसंद करूंगा, इसलिए शायद मैं कमांड लाइन sftp पर भरोसा करूँगा। समाधान के लिए भुगतान के लिए, कोज़ीरोक, सिक्योरब्लैकबॉक्स, और रेबेक्स सभी बहुत अच्छे लगते हैं। धन्यवाद! –

2

मैं सिर्फ हम वास्तव में लघु उद्योगों में SFTP मुद्दों को हल करने के लिए क्या करने का निर्णय लिया क्या अपडेट प्रदान करना चाहता था। यहाँ क्या हुआ के टूटने है:

  1. मैं शुरू में फ़ाइलों को अपलोड करने पोटीन और कुछ बैच फ़ाइलों का उपयोग करने की कोशिश की है, लेकिन यह त्रुटियों पर कब्जा करने के लिए मुश्किल था। साथ ही, मैं स्पष्ट टेक्स्ट फ़ाइलों में हमारे एसएफटीपी प्रमाण-पत्रों को संग्रहीत कर रहा था क्योंकि यह पुट्टी अपलोड स्क्रिप्ट का हिस्सा था।

  2. हमने सालाना कुछ सौ डॉलर के लिए हमारे एसएसआईएस सर्वर के लिए एक कोजीरोक लाइसेंस खरीदा है और मैं अपने उत्पाद का उपयोग करने के परिणामों से पूरी तरह से संतुष्ट हूं। CozyRoc के उत्पाद के साथ, अपलोड प्रवाह के साथ कोई समस्या होने पर नियंत्रण प्रवाह कार्य त्रुटियों को बढ़ाता है। चूंकि मेरे पास मेरी टीम पर कई जूनियर एसएसआईएस प्रोग्रामर भी हैं, इसलिए यह समझना आसान था कि पुट्टी स्क्रिप्ट विधि का उपयोग करने के बजाय नियंत्रण प्रवाह कार्य को कैसे सेट किया जाए। और अंत में, पासवर्ड संवेदनशील डेटा की सुरक्षा के लिए एसएसआईएस के मूल एन्क्रिप्शन का उपयोग करके एन्क्रिप्ट किया गया है। मेरे पास अब मेरे सर्वर पर स्पष्ट पाठ में कोई पासवर्ड नहीं है।

मुझे लगता है कि इस सवाल का में सिफारिश कर रहे थे अन्य 3 पार्टी पुस्तकालयों में से कुछ की समीक्षा किया था, लेकिन ऐसा लगता है CozyRoc विक्रेताओं का सबसे सस्ता था और वे भी कुछ अन्य लघु उद्योगों कार्यों है कि मैं का उपयोग करने में सक्षम है था मेरी बीआई टीम में। धन्यवाद, CozyRoc!

-3

मैं इस SSIS SFTP component की अनुशंसा करता हूं। उनके पास एसएसआईएस

+2

टूटा लिंक - क्या इसका नाम था? – PeterX

-3

घटक के बिना इसका उपयोग करने का एक लेख है, आप स्क्रिप्ट कार्य का उपयोग कर सकते हैं। this 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 
+4

बस एक एसएफटीपी उपसर्ग के साथ अपने चर नामकरण यह sftp नहीं बनाता है ... –

2

निम्नलिखित script बजाय WinSCP के साथ एक स्पष्ट पाठ फ़ाइल में पहुंच प्रमाणिकता यह बचत का एक विकल्प हो सकते हैं।

संबंधित मुद्दे