2011-10-18 15 views
1

AXでFTPファイルを検索する方法をかなり調べた結果、WinInetクラスが見つかりました。同じ名前のDLL。私は問題が解決したと思った!しかし、クラスに主要なアキレス腱がありました - それはバッチで(サーバー上で)実行されません。Dynamics AX 2009:AOSでのバッチジョブからFTPにする方法

誰かが正しい方向に向けることができますか?具体的には、サーバー実行のバッチジョブ(問題のファイルに対する管理者権限を持つサービスユーザーとして実行)内の別のサーバーにファイルをアップロード(FTP put)します。誰ですか?

答えて

2

AxaptapediaのFTPに.NETクラスを使用した別の例があります。これは、10pのサンプルコードから見ても十分です...

私自身の経験では、コマンドラインからバットファイルを呼び出して、特別なFTPを使用する必要があるため、ftpコマンドを渡すことになりましたクライアント!シェルスクリプトを使用する2つの例を以下に示します。Net Time & & Run a Process

+0

私は**プロセスを実行する**アプローチを使用しようとしましたが、すべてが動作していることがわかりましたが、手動で実行するとFTPコマンドファイルは機能しますが、何らかの理由で** PUT **ファイルバッチで実行されるときにサーバー上で実行されます。 ftpクライアントに-gスイッチを追加することは少し助けになりましたが、現在はサーバー上のファイルを** PUT **しようとしますが、結局は0バイトのファイルになります。 _Weird_。しかし、これらは知っておくべき素晴らしいトリックですが、私は上記の.NETアプローチを試してみて、それがどうなるかを見なければならないと思います。すべてが解決されるまでに、あなたにビールを贈るつもりです! :) –

+0

Nevermind、Axaptapediaのリンクは完璧です!ありがとう、ian_scho! –

2

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

これは一例であるが、わずかにこのコードをmpdifying任意の標準のFTPコマンドを使用して自由に感じます。そのコンセプトが不明な場合はお知らせください。

+0

ファイルを送信するためのPORTコマンドのサンプルコードを実装(または追加)するのがどれだけ難しいですか?どのローカルポートにファイルを送信したいのか(どのポートを使用するか、暗闇の中で撮影しているのか)をサーバーに伝える方法を教えてください。ファイルを送信するにはどうしたらいいですか?送信しているファイルはASCIIでエンコードされた.CSVテキストファイル(〜50k)です。 –

関連する問題