Pregunta

Después de bastantes búsquedas de formas de archivos FTP en AX, me alegró descubrir la clase Wininet, que es más o menos un envoltorio para el .dll del mismo nombre. ¡Pensé que mis problemas estaban resueltos! Sin embargo, no sabía que la clase tenía un Heel Major Aquiles - No se ejecuta en lotes (en un servidor).

¿Alguien puede señalarme en la dirección correcta? Específicamente, quiero cargar (FTP Put) un archivo a otro servidor en un trabajo por lotes administrado por el servidor (que se ejecuta como usuario de servicio con derechos de administración al archivo en cuestión). ¿Cualquiera?

¿Fue útil?

Solución

Hay otro ejemplo de usar clases de .NET para FTP en Axaptapedia. Es lo suficientemente diferente del código de ejemplo de 10p para echar un vistazo ...

En mi propia experiencia terminé escribiendo y luego llamando a un archivo BAT desde la línea de comandos para pasar en comandos FTP, ya que necesitábamos usar un cliente FTP especial. Aquí hay dos ejemplos de uso de scripting de shell - Tiempo neto && Ejecutar un proceso.

Otros consejos

Use las clases de .NET en AX, por ejemplo, los siguientes registros de código en el servidor FTP y renombra el archivo allí:

str ftpHostName = 'ftp.microsoft.com'; // without "ftp://", only name
str username    = 'myloginname';
str password    = 'mypassword';
str oldname     = 'oldfilename';
str newname     = 'newfilename';

System.Net.Sockets.Socket socket;
System.Net.Dns dns;
System.Net.IPHostEntry  hostEntry;
System.Net.IPAddress[] addresses;
System.Net.IPAddress    address;
System.Net.IPEndPoint endPoint;

void sendCommand(str _command)
{
    System.Text.Encoding ascii;
    System.Byte[] bytes;
    ;

    ascii = System.Text.Encoding::get_ASCII();
    bytes = ascii.GetBytes(_command + '\r\n');
    socket.Send(bytes, bytes.get_Length(), System.Net.Sockets.SocketFlags::None);
}
;

socket = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily::InterNetwork, System.Net.Sockets.SocketType::Stream, System.Net.Sockets.ProtocolType::Tcp);
hostEntry = System.Net.Dns::GetHostEntry(ftpHostName);

addresses = hostEntry.get_AddressList();
address = addresses.GetValue(0);

info(address.ToString());

endPoint = new System.Net.IPEndPoint(address, 21);
socket.Connect(endPoint);

sendCommand(strfmt("USER %1", username));
sendCommand(strfmt("PASS %1", password));
sendCommand(strfmt("RNFR %1", oldname));
sendCommand(strfmt("RNTO %1", newname));

Este es solo un ejemplo, pero no dude en usar cualquier comando FTP estándar ligeramente mpdificando este código. Avíseme si el concepto no está claro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top