2013-04-22 75 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/ – 2013-04-24 06:42:49

+0

完整例外情況已添加到帖子中。這是關於我可以從中獲得的所有信息。 – 2013-04-25 09:14:41

+0

檢查是否從執行Ax服務的服務器可見。也許它不只是服務器名稱,而是傳輸方法(不能從服務器上的20/21端口進行ftp)。 檢查出以下問題是否解決http://stackoverflow.com/questions/16196195/dynamics-ax-ftp-x – 2013-04-27 06:40:30

回答

1

在我的經驗文件操作在批量運行時是不可靠的,如果你嘗試在客戶端運行它,並且它仍然超時,那麼你可能會遇到另一個問題。根據我的經驗,你可能需要打開你的FTP服務器的屬性很可能會在IIS中)並增加超時限制。我必須做一些類似於我們用來產生銷售稅的網絡服務。如果我們有超過100行的銷售訂單,則會產生相同的錯誤。當我們增加超時時間時,錯誤就消失了。