webrequestmethods subir net conectar cliente archivos c# logging ftp ftpwebrequest

net - subir archivos ftp c#



Registro de salida usando FtpWebRequest (2)

Puedes hacer esto usando Network Tracing . Para configurarlo , cree (o modifique, si ya tiene) App.config archivo App.config , para que se vea así (si ya tiene el archivo, deberá agregarle la configuración):

<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.diagnostics> <sources> <source name="System.Net" tracemode="protocolonly" maxdatasize="1024"> <listeners> <add name="System.Net"/> </listeners> </source> </sources> <switches> <add name="System.Net" value="Information"/> </switches> <sharedListeners> <add name="System.Net" type="System.Diagnostics.TextWriterTraceListener" initializeData="network.log" /> </sharedListeners> <trace autoflush="true"/> </system.diagnostics> </configuration>

Si hace esto, su aplicación creará un archivo network.log , que podría verse más o menos así:

System.Net Information: 1 : [8892] FtpWebRequest#2383799::.ctor(ftp://test/) System.Net Information: 0 : [8892] FtpWebRequest#2383799::GetResponse(Method=LIST.) System.Net Information: 0 : [8892] Current OS installation type is ''Client''. System.Net Information: 0 : [8892] RAS supported: True System.Net Information: 0 : [8892] FtpControlStream#33675143 - Created connection from 192.168.1.1:51833 to 192.168.1.2:21. System.Net Information: 0 : [8892] Associating FtpWebRequest#2383799 with FtpControlStream#33675143 System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [220 This is the test FTP server. Authentication required.] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [USER svick] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [331 Password required for svick] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [PASS ********] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [230 Logged on] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [OPTS utf8 on] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [200 UTF8 mode enabled] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [PWD] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [257 "/" is current directory.] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [TYPE I] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [200 Type set to I] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [PASV] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [227 Entering Passive Mode (174,37,88,92,117,98)] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [LIST] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [150 Connection accepted] System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [226 Transfer OK] System.Net Information: 0 : [8892] FtpWebRequest#2383799::(Releasing FTP connection#33675143.)

Es bastante detallado, pero contiene la información que necesita. Si desea modificar cómo está escrito el archivo de registro, puede implementar su propio TraceListener y usarlo en el archivo de configuración en lugar de TextWriterTraceListener .

Me pregunto si es posible tener un registro de salida para mi cliente FTP usando FtpWebRequest .

Algo como esto:

[R] USER xxx [R] 331 Please specify the password. [R] PASS (hidden) [R] 230 Login successful. [R] SYST [R] 215 UNIX Type: L8 [R] FEAT [R] 211-Features: [R] EPRT [R] EPSV [R] MDTM [R] PASV [R] REST STREAM [R] SIZE [R] TVFS [R] 211 End [R] PWD [R] 257 "/" [R] CWD / [R] 250 Directory successfully changed. [R] PWD [R] 257 "/" [R] TYPE A [R] 200 Switching to ASCII mode. [R] PASV [R] 227 Entering Passive Mode (10,232,201,81,141,175) [R] Opening data connection IP: 10.232.201.81 PORT: 36271 [R] LIST -al [R] 150 Here comes the directory listing. [R] 226 Directory send OK.

Esta salida, por ejemplo, es cuando se conecta ...

Mi código actual solo hace lo siguiente:

// Get the object used to communicate with the server. FtpWebRequest request = (FtpWebRequest)WebRequest.Create(string.Format("ftp://{0}", addrEndPoint)); request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; request.Credentials = new NetworkCredential(_currentConnection.Username, _currentConnection.Password); FtpWebResponse response = (FtpWebResponse)request.GetResponse(); Stream responseStream = response.GetResponseStream(); StreamReader readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8); if (readStream != null) { Console.WriteLine(readStream.ReadToEnd()); }


revisa estos enlaces para referencia. si tiene IIS 7, entonces es posible implementar su propia funcionalidad.

implementando el método de registro de la interfaz IFtpLogProvider

using System; using System.IO; using Microsoft.Web.FtpServer; using System.Diagnostics; using System.Diagnostics.Eventing; namespace FtpLogging { public class FtpLogDemo : BaseProvider, IFtpLogProvider { void IFtpLogProvider.Log(FtpLogEntry loggingParameters) { .......

Árbitro:
Extensibilidad de IIS FTP 7.5 (IFtpLogProvider y registro de fallas de FTP en el registro de eventos)
Problema al escribir en un archivo (C #)