[英]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.