Я сделал пакетный класс, чтобы проверить 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)
Можете ли вы сохранить ошибку, сгенерированную в файл, например? http://dynamicsaxgyan.wordpress.com/2011/04/07/clrinterop-in-x-and-managing-exceptions-dynamics-ax/ –
Полное исключение добавляется к сообщению. Это о всей информации, которую я могу получить. –
Проверьте, видно ли с сервера, на котором выполняется служба Ax. Возможно, это не просто имя сервера, а метод транспорта (не может ftp от порта 20/21 на вашем сервере). Проверьте, разрешено ли следующее: http://stackoverflow.com/questions/16196195/dynamics-ax-ftp-x –