2013-04-22 4 views
3

Я сделал пакетный класс, чтобы проверить FTP для файлов, загрузить их и удалить их на FTP.FTPWebRequest в партии

Когда я запускаю его вручную (не в пакетном режиме), он отлично работает и загружает все файлы на FTP и удаляет их при загрузке.

Проблема начинается, когда я пытаюсь запустить ее в пакетном режиме, я попробовал как серверные, так и клиентские партии.

Оба они дают ошибку timout:

System.Reflection.TargetInvocationException: Исключение было брошенный целью вызова. ---> System.Net.WebException: операция завершена.

на System.Net.FtpWebRequest.CheckError()

на System.Net.FtpWebRequest.GetResponse()

--- Конец внутренней трассировки стека исключений ---

ли кто-нибудь есть опыт загрузки файлов с FTP в пакетном режиме?

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

это код (примечание: DownloadFile и DeleteFile тот же код, чтобы сделать связь с differenct set_method():

permissionSet = new Set(Types::Class); 
files = new List(types::String); 
permissionset.add(new InteropPermission(InteropKind::DllInterop)); 
permissionset.add(new InteropPermission(InteropKind::ClrInterop)); 
CodeAccessPermission::assertMultiple(permissionset); 
ftpo = System.Net.WebRequest::Create(<ftp link>); 
request = ftpo; 
request.set_KeepAlive(false); 
request.set_UsePassive(false); 
request.set_UseBinary(true); 
request.set_Method("NLST"); 
credential = new System.Net.NetworkCredential(<user>,<pw>); 
request.set_Credentials(credential); 
try 
{ 
    //first get the filelist from FTP 
    response = request.GetResponse(); 
    reader = new System.IO.StreamReader(response.GetResponseStream()); 
    while(!reader.get_EndOfStream()) 
    { 
     text = reader.ReadLine(); 
     files.addStart(text); 
    } 
    reader.Close(); 
    response.Close(); 
    CodeAccessPermission::revertAssert(); 
    if(files.elements() >0) 
    { 
     it = New ListIterator(files); 
     while(it.more()) 
     { 
      filename = it.value(); 
      downloadfile(filename); 
      deleteFile(filename); 
      it.next(); 
     } 
    } 
} 

Это полное исключение:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Net.WebException: The operation has timed out. 
    at System.Net.FtpWebRequest.CheckError() 
    at System.Net.FtpWebRequest.GetResponse() 
    --- End of inner exception stack trace --- 
    at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
    at ClrBridgeImpl.InvokeClrInstanceMethod(ClrBridgeImpl* , ObjectWrapper* objectWrapper, Char* pszMethodName, Int32 argsLength, ObjectWrapper** arguments, Boolean* argsAreByRef, Boolean* isException)  
+0

Можете ли вы сохранить ошибку, сгенерированную в файл, например? http://dynamicsaxgyan.wordpress.com/2011/04/07/clrinterop-in-x-and-managing-exceptions-dynamics-ax/ –

+0

Полное исключение добавляется к сообщению. Это о всей информации, которую я могу получить. –

+0

Проверьте, видно ли с сервера, на котором выполняется служба Ax. Возможно, это не просто имя сервера, а метод транспорта (не может ftp от порта 20/21 на вашем сервере). Проверьте, разрешено ли следующее: http://stackoverflow.com/questions/16196195/dynamics-ax-ftp-x –

ответ

1

В мои опытные файловые операции не надежны при запуске в пакетном режиме.Если вы попытаетесь запустить его на клиенте и все еще не хватает времени, у вас может возникнуть другая проблема. По моему опыту вам может потребоваться открыть свойства для вашего FTP-сервера (скорее всего, это будет в IIS) и увеличить лимит времени. Я должен был сделать что-то подобное с веб-сервисом, который мы используем для создания налога с продаж. Если бы у нас был заказ на продажу с более чем 100 строками, это породило бы ту же ошибку. Когда мы увеличили время ожидания, ошибка исчезла.