[GELÖST]DotNet FtpWebRequest funktioniert nicht wie erwartet

25. Mai 2014 13:06

Ich versuche aktuell einen Code von C#.net zu C/AL zu übersetzen. Dabei geht es um das Löschen einer Datei auf einem FTP-Server. Dieser läuft außerdem im aktiven Modus (Weiß nich genau was das heißt aber man muss beim FtpWebRequest UsePassive := False setzen)

Bisheriger C/AL Code:

Code:
//Jetzt wird die Datei gelöscht
ftpWebRequest := FtpWebRequest.Create('URL');
ftpWebRequest.Credentials := Credentials.NetworkCredential('Username', 'Pass');
ftpWebRequest.UsePassive := FALSE;

ftpWebRequest.Method := 'DELE';
ftpWebRequest.GetResponse();


Die Fehlermeldung taucht jetzt bei ftpWebRequest.UsePassive := FALSE; auf. Ich bin auch immer offen für komplett neue Ansätze oder vllt. ist es ja auch möglich .Net Bibliotheken direkt aus C/AL aufzurufen :) Hat jemand eine Idee wieso das mit dem UsePassive nicht klappt?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Telcrome am 8. Juni 2014 12:44, insgesamt 1-mal geändert.

Re: DotNet FtpWebRequest funktioniert nicht wie erwartet

25. Mai 2014 13:36

Hallo Telcrome,

zunächst einmal herzlich willkommen im Forum.

Zu deiner Frage: Hast du diesen Link (mibuso) schon mal probiert?

Gruß, Fiddi

Re: DotNet FtpWebRequest funktioniert nicht wie erwartet

25. Mai 2014 14:12

Danke schonmal :) Ich weiß leider nicht wie ich das jetzt in meine Entwicklungsumgebung einbinde, aber ich hab schon den Code ausprobiert der dadrin steht.

Code:
      FTPRequest := FTPRequest.Create('URI direkt zur Datei');
      Credentials := Credentials.NetworkCredential('Name', 'PASS');
      FTPRequest.Credentials := Credentials;
      FTPRequest.KeepAlive := TRUE;
      FTPRequest.Method := 'DELE';
      FTPRequest.UsePassive := TRUE;
      FTPRequest.UseBinary := TRUE;
      //StatusCode := FTPResponse.StatusCode;
      FTPResponse := FTPRequest.GetResponse;
      //IF FTPResponse.StatusCode.ToString() = StatusCode.FileActionOK.ToString() THEN BEGIN
        //Deleted := TRUE;
      //END;
      FTPResponse.Close;


Ergibt leider die gleiche Fehlermeldung, aber ist ja im Prinzip auch das gleiche was ich selber geschrieben habe, nur ein paar Default Werte werden nochmal gesetzt wie z.B. KeepAlive := True.

Ich hab wirklich noch absolut keine Ahnung von Dynamics NAV und hab gerade erst damit angefangen :/

Re: DotNet FtpWebRequest funktioniert nicht wie erwartet

25. Mai 2014 22:11

So wie ich die Fehlermeldung verstehe, liegt es an
Code:
ftpWebRequest.UsePassive := FALSE; // (oder TRUE, der eigentliche Wert ist irrelevant)  

Ruf mal ftpWebRequest.UsePassive mit Hilfe von F5 auf und vergleiche dort die Position und Typ der erwarteten Parameter.

Re: DotNet FtpWebRequest funktioniert nicht wie erwartet

25. Mai 2014 22:42

Hab ich schon gemacht, auch wenn ich aus der C/AL Syntax an dieser Stelle nicht ganz schlau geworden bin. Müsste meiner Meinung eig. richtig sein^^
Der Typ (bool) is ja richtig und wenn die Syntax nicht ganz stark von Pascal abweicht sollte das klappen^^ Interessanterweise wird der Aufruf
Code:
ftpRequest.UsePassive(False);

auch vom Compiler akzeptiert... (Gibt aber die gleiche Fehlermeldung)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: DotNet FtpWebRequest funktioniert nicht wie erwartet

26. Mai 2014 00:18

Hallo,

welche .Net- Framework- Version benutzt du denn? Die CU aus dem Link verwendet die Version 4.

Gruß, Fiddi

Re: DotNet FtpWebRequest funktioniert nicht wie erwartet

26. Mai 2014 11:47

Ich werde es gleich mal mit anderen Versionen ausprobieren, bisher habe ich auch 4.0 verwendet
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: DotNet FtpWebRequest funktioniert nicht wie erwartet

26. Mai 2014 11:59

Hm, bei anderen scheints zu funktionieren: http://www.mibuso.com/forum/viewtopic.php?f=32&t=51988 - das kann doch unmöglich an der Großschreibung des Boolean-Wertes liegen??
Brauchst du das UsePassive überhaupt? Siehe http://nav-magno.be/index.php/2013/11/u ... tp-server/

Außerdem gibts schon etwas Fertiges für NAV 2013: http://www.mibuso.com/dlinfo.asp?FileID=1539.

Und hier (der Vollständigkeit halber) die Verwendung in C#-Projekten: http://www.vcskicks.com/csharp_ftp_upload.php

Re: DotNet FtpWebRequest funktioniert nicht wie erwartet

1. Juni 2014 11:17

Hm, bei anderen scheints zu funktionieren

Bringt mich auch zum Verzweifeln

das kann doch unmöglich an der Großschreibung des Boolean-Wertes liegen??

Nein, daran liegt es nicht. Ich habe sogar ausprobiert ob es klappt wenn ich direkt den Boolean-Datentyp aus mscorlib nehme, dann sagt der Compiler aber: "Boolean /= DotNet". (Wobei ich auch nicht genau weiß wie ich das mit der C/AL Syntax ausdrücken soll^^)

Brauchst du das UsePassive überhaupt?

Ja, brauche ich. Aber selbst wenn nicht würde das das Problem selbst nicht beheben. Ich versuche einen .Net C# Sourcecode, den ich selbst geschrieben habe, direkt zu übersetzen. (Und der Server gibt eben nur was zurück wenn ich UsePassive=False drin hab)

Außerdem gibts schon etwas Fertiges für NAV 2013

Steht genau das gleiche was ich schon selbst geschrieben habe.

Vllt. ist die Methode mit den DotNet Variablen wie früher nicht mit 2013 R2 kompatibel? Ist es möglich direkt die Methoden aus meinem C# Programm (.Net 2.0 - 4.0) mit C/Al aufzurufen? Kann ich noch auf andere Weise UsePassive setzen?

Re: DotNet FtpWebRequest funktioniert nicht wie erwartet

8. Juni 2014 12:43

Ich hab jetzt eine kleine Übergangslösung geschrieben. Die Funktion erstellt eine Datei ("DeleteNow.txt") in einem Verzeichnis und ein .Net Programm überwacht dieses Verzeichnis und löscht auf dem Server dann automatisch die eigentlich zu löschende Datei. Ist zwar eine Verschwendung von Rechenkraft, aber besser als nichts^^ Funktioniert zuverlässig.

Re: [GELÖST]DotNet FtpWebRequest funktioniert nicht wie erwa

21. Juli 2014 09:28

Hallo,

ist zwar schon eine weile alt der Fred, aber ich wollte nur kurz eine Anmerkung loswerden. ;)

Es gab einen größeren Bug in der .NET Implementierung mit den .Net Typen.
Das Ganze ist jetzt gelöst und jetzt funktionieren auch wieder die Code Zeilen aus den ersten Beiträgen mit dem NAV Boolean.

Dazu muss nur das Platform Build per Hotfix/CU geupdated werden.

MS bietet dazu Fixes von Crete(2015) bis runter zu 2013 an.

MfG