2016-07-31 6 views
0

Ich möchte Dateien übertragen, die meine Azure Web App auf einem FTP-Server außerhalb des Azure-Netzwerks erstellt. Alles, was ich bekomme, ist eine 0-Byte-Datei auf dem FTP-Server und ein "425 Kann keine Datenverbindung öffnen" Fehler in der Web App."425 Datenverbindung kann nicht geöffnet werden" beim Hochladen von Datei von der Azure-Website nach FTP

Gibt es eine Einstellung, die ich auf Azure Web App oder FTP Server vermisse? Die gleiche Web App auf meinem lokalen IIS Express funktioniert einwandfrei. Die Web App verwendet ASP .NET MVC 5.

EDIT 1:

Dies ist der Code, den ich mit der Datei senden:

FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(ftp + fileName); 
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile; 
ftpRequest.Credentials = new NetworkCredential(uid, pwd); 
ftpRequest.ContentLength = fileBytes.Length; 

Stream requestStream = ftpRequest.GetRequestStream(); 
requestStream.Write(fileBytes, 0, fileBytes.Length); 
requestStream.Close(); 

FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse(); 
var status = response.StatusCode; 
response.Close(); 

Acording to the MSDN der Passiv-Modus ist die Standardeinstellung ein.

EDIT 2:

Enabling-Server anmeldet dies die Ausgabe lautet:

System.Net Information: 0 : [60572] FtpControlStream#51898079 - Created connection from <origin_ip> to <destination_ip>. 
System.Net Information: 0 : [60572] Associating FtpWebRequest#23597360 with FtpControlStream#51898079 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Received response [220 Microsoft FTP Service] 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Sending command [USER <user>] 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Received response [331 Password required for <user>.] 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Sending command [PASS *] 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Received response [230 User <user> logged in.] 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Sending command [OPTS utf8 on] 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Received response [501 option not supported] 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Sending command [PWD] 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Received response [257 "/" is current directory.] 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Sending command [TYPE I] 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Received response [200 Type set to I.] 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Sending command [PASV] 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Received response [227 Entering Passive Mode (12,106,237,74,4,255).] 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Sending command [STOR <file>] 
System.Net Information: 0 : [60572] FtpControlStream#51898079 - Received response [425 Can't open data connection.] 
System.Net Information: 0 : [60572] FtpWebRequest#23597360::(Releasing FTP connection#51898079.) 
System.Net Error: 0 : [60572] Exception in FtpWebRequest#23597360::GetRequestStream - The remote server returned an error: (425) Can't open data connection.. 
    at System.Net.FtpWebRequest.SyncRequestCallback(Object obj) 
    at System.Net.FtpWebRequest.RequestCallback(Object obj) 
    at System.Net.CommandStream.Dispose(Boolean disposing) 
    at System.IO.Stream.Close() 
    at System.IO.Stream.Dispose() 
    at System.Net.ConnectionPool.Destroy(PooledStream pooledStream) 
    at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse) 
    at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage) 
    at System.Net.FtpWebRequest.GetRequestStream() 

EDIT 3:

Ein weiterer Versuch:

System.Net Information: 0 : [58636] FtpWebRequest#9144495::.ctor(<ftp_address_and_file>) 
System.Net Information: 0 : [58636] FtpWebRequest#9144495::GetRequestStream(Method=STOR.) 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Created connection from <origin_ip> to <destination_ip>. 
System.Net Information: 0 : [58636] Associating FtpWebRequest#9144495 with FtpControlStream#57089836 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Received response [220 Microsoft FTP Service] 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Sending command [USER <user>] 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Received response [331 Password required for <user>.] 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Sending command [PASS *] 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Received response [230 User <user> logged in.] 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Sending command [OPTS utf8 on] 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Received response [501 option not supported] 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Sending command [PWD] 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Received response [257 "/" is current directory.] 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Sending command [TYPE I] 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Received response [200 Type set to I.] 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Sending command [PASV] 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Received response [227 Entering Passive Mode (12,106,237,74,5,4).] 
System.Net Information: 0 : [58636] FtpControlStream#57089836 - Sending command [STOR <file>] 
System.Net Information: 0 : [58636] FtpWebRequest#9144495::(Releasing FTP connection#57089836.) 
System.Net Error: 0 : [58636] Exception in FtpWebRequest#9144495::GetRequestStream - The operation has timed out.. 
    at System.Net.FtpWebRequest.SyncRequestCallback(Object obj) 
    at System.Net.FtpWebRequest.RequestCallback(Object obj) 
    at System.Net.CommandStream.Dispose(Boolean disposing) 
    at System.IO.Stream.Close() 
    at System.IO.Stream.Dispose() 
    at System.Net.ConnectionPool.Destroy(PooledStream pooledStream) 
    at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse) 
    at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage) 
    at System.Net.FtpWebRequest.GetRequestStream() 
+0

Zeigen Sie uns Ihren Code. Welchen FTP-Client/welche Bibliothek verwenden Sie? –

+0

Ist der FTP-Server im selben Netzwerk wie "Ihr lokaler IIS Express"? Oder ist es anderswo? –

+0

Nein. Der FTP-Server befindet sich im Internet mit einer IP-Adresse. –

Antwort

0

Versuchen Sie, FTP Passiv-Modus Umschalten in dein Klient.

0

Die "Kann Datenverbindung nicht öffnen" ist eine Nachricht, die von FileZilla FTP-Server ausgegeben wird, wenn es Datenverbindung für eine Übertragung nicht öffnen kann.

Was passiert normalerweise, wenn der Client einen aktiven FTP-Modus hinter einer NAT oder Firewall verwendet und seine interne IP-Adresse an den Server meldet, ohne zu wissen, dass der Server nicht auf diese IP-Adresse zugreifen kann.

Die einfachste (und im Allgemeinen korrekte) Lösung ist die Verwendung eines passiven FTP-Modus anstelle eines aktiven Modus.

Sehen Sie meine article on FTP connection modes zu verstehen, was der aktive und passive Modus bedeutet, und warum jeder heutzutage den passiven Modus verwendet.

Verwandte Themen