2011-10-18 2 views
1

AX에서 FTP 파일을 검색하는 방법을 많이 찾은 후, 필자는 WinInet 클래스를 발견하게되어 기뻤습니다. 같은 이름의 DLL. 내 문제가 해결되었다고 생각 했어! 그러나 나는 클래스가 주요 Achilles 발 뒤꿈치을 가지고 있다는 것을 알지 못했습니다. 서버에서 일괄 적으로 실행되지 않습니다.Dynamics AX 2009 : AOS의 배치 작업에서 FTP하는 방법

아무도 올바른 방향으로 나를 가리킬 수 있습니까? 특히, 서버 실행 배치 작업 (문제의 파일에 대한 관리자 권한이있는 서비스 사용자로 실행)에서 다른 서버로 파일을 업로드 (FTP 넣기)하고 싶습니다. 아무도?

답변

2

FTP 용 .NET 클래스를 Axaptapedia에 사용하는 또 다른 예제가 있습니다. 그것은 모양을 취할 10p의 예제 코드에서 충분히 다릅니다 ...

내 자신의 경험에 나는 우리가 특별한 FTP를 사용해야 할 때 명령 줄에서 ftp 명령을 전달하기 위해 bat 파일을 호출하는 것을 끝내었다. 고객! 다음은 쉘 스크립팅을 사용하는 두 가지 예입니다. Net Time & & Run a Process.

+0

** 프로세스 실행 ** 접근법을 사용하려고 시도했지만 모든 것이 _more 이하로 작동하는 것을 볼 수는 있지만 FTP 명령 파일은 수동으로 실행할 때 작동하지만 어떤 이유로 ** 파일 **을 가져 오지 않습니다 배치에서 실행될 때 서버에서. ftp 클라이언트에 -g 스위치를 추가하면 조금 도움이되었지만 이제는 서버의 파일을 ** PUT **하려고 시도하지만 결국에는 0 바이트 파일로 끝납니다. _기묘한_. 그러나 이것들은 위대한 트릭을 알고 있지만, 나는 .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 명령의 예제 코드를 구현 (또는 추가)하는 것이 얼마나 어렵습니까? 서버에 어떤 로컬 포트에서 파일을 보내길 원하는지 궁금합니다 (사용 가능한 포트를 선택하는 방법이 있습니까? 아니면 어둠 속에서 촬영하고 있습니까?) 그리고 어떻게 파일을 보내나요? 보내는 파일은 작고 (~ 50k) ASCII 인코딩 .CSV 텍스트 파일입니다. –