Dart Home | PowerTCP FTP for .NET | Custom Development | Reply | PowerTCP FTP for .NET Topics | Forums |
Author | Forum: PowerTCP FTP for .NET Topic: FTP from mainframe stays in EBCDIC |
tssats From: Madison, WI USA Posts: 7 Member Since: 09/30/11 |
posted September 30, 2011 9:25 AM We just upgraded to 4.4.1.0. Prior versions, although you had to manually put it in passive mode when dwonloading from the mainframe, would automatically be converted from EBCDIC to ASCII. This no longer happens with version 4.4.1.0. Using Microsoft's ftp from a DOS command prompt works just fine (the exact same mainframe file gets downloaded as ASCII). We have tried .Site("SBD=(IBM-1047,ISO8859-1)") which is accepted, but makes no difference. The response to the Connect command is "TCPIPFTP IBM FTP CS V1R11" |
Nick B (Admin) From: Utica, NY USA Posts: 619 Member Since: 05/25/10 Extra Support Options Custom Application Development |
posted September 30, 2011 10:08 AM Hello, The old version defaulted to ASCII for transfers, while the new version uses binary by default, unless the file's extension is listed in Ftp.Session.AsciiExtensions. You can either add the remote file's extension to this collection, or set AsciiExtensions.Enabled to false, and call Ftp.SetType(FileType.Ascii) prior to sending. |
tssats From: Madison, WI USA Posts: 7 Member Since: 09/30/11 |
posted September 30, 2011 10:26 AM Neither of those have any affect. Here is the code: Dim Host As String = "thehost" Dim User As String = "theuser" Dim Passwd As String = "thepassword" Dim RemoteFile As String = "'M5618.D092211'" Dim LocalFile As String = "C:\ftpfiles\mfdown.txt" Dim myDart As New Dart.Ftp.Ftp Dim myDartSession As New Dart.Ftp.FtpSession myDartSession.RemoteEndPoint = New Dart.Ftp.IPEndPoint(Host, 21) myDartSession.Username = User myDartSession.Password = Passwd myDartSession.AsciiExtensions.Enabled = False myDart.Session = myDartSession Dim PutGetResponse As Dart.Ftp.CopyResult Dim Response As Dart.Ftp.Response If Not myDart.Connected Then Response = myDart.Connect() myDart.Authenticate() 'Response = myDart.SetType(Dart.Ftp.FileType.Ascii) 'Response = myDart.Site("SBDATACONN=(IBM-1047,ISO8859-1)") PutGetResponse = myDart.Get(RemoteFile, LocalFile, Dart.Ftp.Synchronize.Off) myDart.Close() |
Nick B (Admin) From: Utica, NY USA Posts: 619 Member Since: 05/25/10 Extra Support Options Custom Application Development |
posted September 30, 2011 11:11 AM Hello, (I'm assuming "'Response = myDart.SetType(Dart.Ftp.FileType.Ascii)" was uncommented for the test?) Please reply with a log of the transfer; hook up the Ftp.Connection.Log event, and in it write (e.Data.Direction == DataDirection.In ? "< " : "> ") + e.Data.ToString() to a file, or textbox. |
tssats From: Madison, WI USA Posts: 7 Member Since: 09/30/11 |
posted September 30, 2011 12:47 PM How do I hook up the Ftp.Connection.Log event? |
Nick B (Admin) From: Utica, NY USA Posts: 619 Member Since: 05/25/10 Extra Support Options Custom Application Development |
posted September 30, 2011 1:12 PM Hello, One way is to use the AddHandler method. Another is the 'Handles' keyword. You may want to look up a tutorial for more information. |
tssats From: Madison, WI USA Posts: 7 Member Since: 09/30/11 |
posted September 30, 2011 1:17 PM What am I supposed to "Handle"? If I dim it withevents, this is what is available: Private Sub myDart_Copy(ByVal sender As Object, ByVal e As Dart.Ftp.CopyEventArgs) Handles myDart.Copy End Sub Private Sub myDart_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles myDart.Disposed End Sub Private Sub myDart_Error(ByVal sender As Object, ByVal e As Dart.Ftp.ErrorEventArgs) Handles myDart.Error End Sub Private Sub myDart_Listing(ByVal sender As Object, ByVal e As Dart.Ftp.ListingEventArgs) Handles myDart.Listing End Sub Private Sub myDart_Progress(ByVal sender As Object, ByVal e As Dart.Ftp.ProgressEventArgs) Handles myDart.Progress End Sub Private Sub myDart_UserState(ByVal sender As Object, ByVal e As Dart.Ftp.UserStateEventArgs) Handles myDart.UserState End Sub |
Nick B (Admin) From: Utica, NY USA Posts: 619 Member Since: 05/25/10 Extra Support Options Custom Application Development |
posted September 30, 2011 1:27 PM Hello, Exactly like that, yes, but for the Ftp.Connection.Log event. Something like: Private Sub myComponent_Log(ByVal sender As Object, ByVal e As DataEventArgs) Handles Ftp.Connection.Log. It may help to examine some tutorials on the subject. |
tssats From: Madison, WI USA Posts: 7 Member Since: 09/30/11 |
posted September 30, 2011 2:24 PM Actually, it would help if you fixed your assembly. It doesn't expose the Connect event, so MyDart.Connection.Log isn't avalable (as I demonstrated in an earlier post). Without your code, I wouldn't have known it was an available event. Here is my code and the output fromit (I have no idea where the SIZE command is coming from) Dim sOutput As String = String.Empty Dim WithEvents myDart As Dart.Ftp.Ftp Private Sub MyDart_Connection_Log(ByVal sender As System.Object, ByVal e As Dart.Ftp.DataEventArgs) Handles myDart.connection.log sOutput += IIf(e.Data.Direction = Dart.Ftp.DataDirection.In, "< ", "> ") & e.Data.ToString() End Sub Private Sub DoGet() myDart = New Dart.Ftp.Ftp Dim myDartSession As New Dart.Ftp.FtpSession myDartSession.RemoteEndPoint = New Dart.Ftp.IPEndPoint(Host, 21) myDartSession.Username = User myDartSession.Password = Passwd myDart.Session = myDartSession Dim PutGetResponse As Dart.Ftp.CopyResult Dim Response As Dart.Ftp.Response If Not myDart.Connected Then Response = myDart.Connect() myDart.Authenticate() Response = myDart.SetType(Dart.Ftp.FileType.Ascii) PutGetResponse = myDart.Get(RemoteFile, LocalFile, Dart.Ftp.Synchronize.Off) Debug.Print(sOutput.ToString) myDart.Close() End Sub < 220-TCPIPFTP IBM FTP CS V1R11 at AHOST, 13:16:53 on 2011-09-30. < 220 Connection will close if idle for more than 60 minutes. > USER usr < 331 Send password please. > PASS pswd < 230 USR is logged on. Working directory is "USR.". > TYPE A < 200 Representation type is Ascii NonPrint > SIZE 'M5618.D092211' < 501 command aborted -- FTP server not configured for SIZE > TYPE I < 200 Representation type is Image > PASV < 227 Entering Passive Mode (198,150,235,249,197,213) > RETR 'M5618.D092211' < 125 Sending data set M5618.D092211 FIXrecfm 120 < 250 Transfer completed successfully. |
Nick B (Admin) From: Utica, NY USA Posts: 619 Member Since: 05/25/10 Extra Support Options Custom Application Development |
posted September 30, 2011 2:51 PM Hello, Connect/Connection isn't an event; Log is an event on the TcpBase object exposed by the Connection property. We do it like this for consistency between products, and because it exposes the content sent over the TCP connection, but I have added your comment as a feature request. You need to set myDartSession.AsciiExtensions.Enabled = False as well. Otherwise AsciiExtensions will be used to determine which transfer type to use when you call Get(). Please send in a log after you have added that code if it does not resolve your issue. |
tssats From: Madison, WI USA Posts: 7 Member Since: 09/30/11 |
posted September 30, 2011 3:16 PM Setting the ASCIIExtensions to false did not help. As a matter of fact, if I look at the value after setting it to false, it still says it is true. Step into: Stepping over method without symbols 'Dart.Ftp.AsciiExtensions.Enabled.set' myDartSession.AsciiExtensions.Enabled = False ? myDartSession.AsciiExtensions.Enabled True myDart = New Dart.Ftp.Ftp Dim myDartSession As New Dart.Ftp.FtpSession myDartSession.RemoteEndPoint = New Dart.Ftp.IPEndPoint(Host, 21) myDartSession.Username = User myDartSession.Password = Passwd myDartSession.AsciiExtensions.Enabled = False myDart.Session = myDartSession Dim PutGetResponse As Dart.Ftp.CopyResult Dim Response As Dart.Ftp.Response If Not myDart.Connected Then Response = myDart.Connect() myDart.Authenticate() Response = myDart.SetType(Dart.Ftp.FileType.Ascii) myDart.Session.AsciiExtensions.Enabled = False PutGetResponse = myDart.Get(RemoteFile, LocalFile, Dart.Ftp.Synchronize.Off) Debug.Print(sOutput.ToString) myDart.Close() < 220-TCPIPFTP IBM FTP CS V1R11 at AHOST, 13:59:07 on 2011-09-30. < 220 Connection will close if idle for more than 60 minutes. > USER usr < 331 Send password please. > PASS pswd < 230 USR is logged on. Working directory is "USR.". > TYPE A < 200 Representation type is Ascii NonPrint > SIZE 'M5618.D092211' < 501 command aborted -- FTP server not configured for SIZE > TYPE I < 200 Representation type is Image > PASV < 227 Entering Passive Mode (198,150,235,249,230,99) > RETR 'M5618.D092211' < 125 Sending data set M5618.D092211 FIXrecfm 120 < 250 Transfer completed successfully. |
tssats From: Madison, WI USA Posts: 7 Member Since: 09/30/11 |
posted September 30, 2011 3:25 PM I tried it without a separate session, that won't allow setting it to False either, it stays True. myDart = New Dart.Ftp.Ftp myDart.Session.RemoteEndPoint = New Dart.Ftp.IPEndPoint(Host, 21) myDart.Session.Username = User myDart.Session.Password = Passwd myDart.Session.AsciiExtensions.Enabled = False Dim PutGetResponse As Dart.Ftp.CopyResult Dim Response As Dart.Ftp.Response If Not myDart.Connected Then Response = myDart.Connect() myDart.Authenticate() Response = myDart.SetType(Dart.Ftp.FileType.Ascii) PutGetResponse = myDart.Get(RemoteFile, LocalFile, Dart.Ftp.Synchronize.Off) Debug.Print(sOutput2.ToString) myDart.Close() < 220-TCPIPFTP IBM FTP CS V1R11 at AHOST, 14:21:36 on 2011-09-30. < 220 Connection will close if idle for more than 60 minutes. > USER usr < 331 Send password please. > PASS pswd < 230 USR is logged on. Working directory is "USR.". > TYPE A < 200 Representation type is Ascii NonPrint > SIZE 'M5618.D092211' < 501 command aborted -- FTP server not configured for SIZE > TYPE I < 200 Representation type is Image > PASV < 227 Entering Passive Mode (198,150,235,249,230,99) > RETR 'M5618.D092211' < 125 Sending data set M5618.D092211 FIXrecfm 120 < 250 Transfer completed successfully. |
Nick B (Admin) From: Utica, NY USA Posts: 619 Member Since: 05/25/10 Extra Support Options Custom Application Development |
posted September 30, 2011 5:02 PM Hello, I've sent a download link to your email address for a beta dll that fixes this. I'm sorry for the inconvenience. |
SGCornerStone From: Troy, NY USA Posts: 6 Member Since: 10/31/12 |
posted October 31, 2012 10:45 AM Nick - I recently had to re-purchase the FTP control after our server crashed. The purchased version is 4.5.2.1. Previously we were using 4.4.2.3. With 4.4.2.3 the files were downloading correctly in ASCII format with the appropriate carriage returns and line feeds. With 4.5.2.1 they are coming down in EBCDIC format. Thoughts? |
Nick B (Admin) From: Utica, NY USA Posts: 619 Member Since: 05/25/10 Extra Support Options Custom Application Development |
posted October 31, 2012 11:14 AM Hello, I'll be replying in your new thread: http://support.dart.com/postings?topicid=8490 |
Reply | PowerTCP FTP for .NET Topics | Forums |
This site is powered by PowerTCP WebServer for ActiveX |