I was develop simple Function for Connect SFTP Server and Put File via VB6. Also, I was confirm that my code works fine.
After a few months, I receive E-mail from my clients that said too many SFTP connection were encountered.
Their request is below :
Polling of Directories and File Transfer Rate
- SFTP Users may not poll their directories more than once per minute.
- Maximum number of file transfers per account per hour not to exceed 300.(They told to me that Our Connection per hour is 800.)
My Function is called by Program 4 times per every day. So It is impossible that Our Connection per hour is almost 800. But It is happend.
Unfortunately, I couldn't find the cause of the Problem from My Function.
I would be grateful if you could check my Code and Find the problem if you could.
Here is my CODE below :
Public Function SendSFTP_By_WINSCP(Addr As String, _ Uid As String, _ Attach As String, _ FileName As String, _ HostKey As String, _ sPPK As String, _ Optional Pwd As String = "", _ Optional remotePath As String = "", _ Optional mkdirDirectory As String = "") As Boolean On Error GoTo err ' Connection Option Dim session Dim sessionOptions Set session = New session Set sessionOptions = CreateObject("WinSCP.SessionOptions") Dim myTransferOptions As New TransferOptions If sPPK <> "" Then With sessionOptions .SshPrivateKeyPath = App.path & "\SSH_PPK\" & sPPK .PortNumber = 22 .Protocol = Protocol_Sftp .HostName = Addr .UserName = Uid .SshHostKeyFingerprint = HostKey End With ElseIf Pwd <> "" Then With sessionOptions .PortNumber = 22 .Protocol = Protocol_Sftp .HostName = Addr .UserName = Uid .Password = Pwd .SshHostKeyFingerprint = HostKey End With Else GoTo err End If ' Binary Mode로 고정 myTransferOptions.TransferMode = TransferMode_Binary ' Connect session.DisableVersionCheck = True session.Open (sessionOptions) If mkdirDirectory <> "" Then If (session.FileExists(mkdirDirectory) = False) Then session.CreateDirectory (mkdirDirectory) End If End If ' UpLoad File Dim transferResult As TransferOperationResult Set transferResult = session.PutFiles(Attach, remotePath & FileName, False, myTransferOptions) ' Throw on Any Error If transferResult.check Then SendSFTP_By_WINSCP = False Else SendSFTP_By_WINSCP = True End If ' Dissconnect, Clean Up session.dispose Set sessionOptions = Nothing Set session = Nothing Exit Function err: ' Exception Error SendSFTP_By_WINSCP = False session.dispose Set sessionOptions = Nothing Set session = Nothing End Function
The dubious part that I think is ' Dissconnect, Clean Up Section. In my opinion, session.Close should be added before session.dispose.
But I confused Because I don't know about difference between session.close and session.dispose.