簡體   English   中英

Dynamics AX 2009:如何從AOS上的批處理作業進行FTP

[英]Dynamics AX 2009: How to FTP from a batch job on an AOS

經過幾次搜索AX中FTP文件的方法后,我很高興發現WinInet類,它或多或少只是同名.DLL的包裝器。 我以為我的問題已經解決了! 然而,我並不知道該課程有一個主要的致命弱點 - 它不是批量運行(在服務器上)。

任何人都能指出我正確的方向嗎? 具體來說,我想將文件上傳(FTP put)到服務器運行的批處理作業中的另一台服務器(作為具有相關文件管理員權限的服務用戶運行)。 任何人?

在AX中使用.NET類,例如,將代碼登錄到FTP服務器並在那里重命名文件:

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));

這只是一個例子,但可以隨意使用任何標准FTP命令稍微加密此代碼。 如果概念不清楚,請告訴我。

Axaptapedia中還有另一個在FTP中使用.NET類的例子 它與10p的示例代碼有所不同,可以看看...

根據我自己的經驗,我最終編寫,然后從命令行調用bat文件傳入ftp命令,因為我們需要使用特殊的FTP客戶端! 以下是使用shell腳本的兩個示例 - Net Time && Run a Process

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM