2013-04-24 3 views
2

У меня есть проблемы, чтобы отправить файл CSV на фтп, я использую следующий код найденный на AxaptaPedia:Dynamics AX FTP

object ftpo; 
object ftpResponse; 
System.Net.FtpWebRequest request; 
System.IO.StreamReader reader; 
System.IO.Stream requestStream; 
System.Byte[] bytes; 
System.Net.NetworkCredential credential; 
System.String xmlContent; 
System.Text.Encoding utf8; 

System.Net.FtpWebResponse response; 
; 
reader = new System.IO.StreamReader(strfmt("%1%2","\\\\Server\\directory\\","Export.csv")); 
utf8 = System.Text.Encoding::get_UTF8(); 
bytes = utf8.GetBytes(reader.ReadToEnd()); 
reader.Close(); 

ftpo = System.Net.WebRequest::Create(strfmt("%1%2","ftp://IP_Address/directory/","Export.csv")); 
request = ftpo; 

credential = new System.Net.NetworkCredential("user","password"); 
request.set_Credentials(credential); 
request.set_ContentLength(bytes.get_Length()); 
request.set_Method("STOR"); 

requestStream = request.GetRequestStream(); 
requestStream.Write(bytes,0,bytes.get_Length()); 
requestStream.Close(); 

ftpResponse = request.GetResponse(); 
response = ftpResponse; 
info(response.get_StatusDescription()); 

Нет компиляции ошибок, никаких ошибок выполнения, но файл не загружается на моем FTP, я думаю, проблема в кодировке файла пути, я пробовал другие решения без каких-либо результатов. Я хочу обработать файл отправки по FTP в пакетном режиме, он работает с использованием класса wininet, но wininet-класс не может быть запущен на стороне сервера, поэтому я должен использовать .NET-инфраструктуру. Любые идеи или решение приветствуется

спасибо за помощь

+0

Предполагаете, что вы изменили 'IP_Address' на правильный сервер или IP-адрес? –

+0

да, конечно, это пример –

+0

это синтаксис, который я использовал с классом wininet, который отлично работает, мне нужно найти рабочий синтаксис, который работает в System.IO.StreamReader (..) и System.Net.WebRequest :: create (..) –

ответ

1

Я имел этот вопрос с сохранением файлов в любой сетевой каталог, а не только FTP. Для меня работало создание отдельных переменных для сервера и имени файла и использование конкатенации вместо строкового формата (StrFmt). по какой-то причине строка форматирования просто молча не работает, в то время как конкатенация делает работу:

str server = "\\\\Server\\directory\\"; 
str fileName = "Export.csv"; 
Net.WebRequest::Create(server + fileName); 

Также наилучшая практика не будет жестко закодировать любого из этих значений. вы должны либо создать таблицу параметров, чтобы сохранить эти значения, и сделать вызов в таблицу, чтобы найти значения и назначить их своим переменным, либо использовать диалоговое окно для получения ввода от пользователя во время выполнения. Это позволяет избежать того, что в будущем кому-либо придется изменить код, если FTP-сервер изменится, а также избежать проблем с изменением имени файла.