2016-09-27 4 views
0

UPDATE: I found out that it is not an issue with azure rather the other party who are actually doing white-listing on incoming connection.Upload-Datei mit FtpWebRequest von einem azur gehostete Anwendung auf eine externe FTP-Site

ich implementiert einen Service, der offen und FTP-Verbindung, eine Datei auf einen FTP-Server hochladen. Der Code funktioniert perfekt (!) Auf meinem Desktop, aber wenn ich ihn in der azure hosting cloud veröffentliche und mit genau den gleichen Parametern ausführe bekomme ich WebException mit der Nachricht 'Der entfernte Server hat einen Fehler zurückgegeben: (530) Nicht eingeloggt . " Ich habe keine relevante Einstellung in der azurblauen Konsole gefunden. Ich habe auch verschiedene Einstellungen wie On/Off Keep-Alive und Passiv versucht, aber das Ergebnis ist das gleiche. Habt ihr eine Idee, was könnte das Problem sein?

Der Code als Referenz:

  Dim request As FtpWebRequest 

      request = TryCast(WebRequest.Create($"ftp://{_host}/inventory/{_uploadFilename}"), FtpWebRequest) 
      request.Method = WebRequestMethods.Ftp.UploadFile 
      request.Credentials = New NetworkCredential(_username, _password) 
      request.UsePassive = True 
      request.UseBinary = True 
      request.KeepAlive = False 

      Using fs As FileStream = File.OpenRead(_fileName) 
       Dim buffer As Byte() = New Byte(fs.Length - 1) {} 
       fs.Read(buffer, 0, buffer.Length) 
       fs.Close() 
       Dim requestStream As Stream = request.GetRequestStream() 
       requestStream.Write(buffer, 0, buffer.Length) 
       requestStream.Flush() 
       requestStream.Close() 


       Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse) 
       Return Ok($"Remote server response: {response.StatusDescription}") 

      End Using 
+0

[Aktivieren Sie die Protokollierung] (http://StackOverflow.com/q/9664650/850848) und zeigen Sie uns ein Protokoll sowohl von Ihrem Desktop und dem Azure. –

Antwort

0

Ich fand heraus, dass es kein Problem mit azure eher die andere Partei, die tatsächlich White-Listing auf eingehende Verbindung tun.

1

Wo ist NetworkCredential immer Anmeldeinformationen aus?

Windows-Authentifizierung (Kerberos/NTLM) wird in Azure nicht funktionieren. Sie müssen FTP-Login verwenden (wie in USER und PASS FTP-Befehle).

Verwenden Sie immer PASSIVE Modus beim Versuch FTP-Übertragung von Azure.

Imports System.IO 
Imports System.Net 

Module Module1 

    Sub Main() 
     Dim request As FtpWebRequest 
     Dim _host = "remote.ftpserver.com" 
     Dim _uploadFilename = "file.txt" 
     Dim _filename = "file.txt" 
     Dim _username = "Username" 
     Dim _password = "PaSsw0rD" 

     request = TryCast(WebRequest.Create($"ftp://{_host}/path/{_uploadFilename}"), 
      FtpWebRequest) 
     request.Method = WebRequestMethods.Ftp.UploadFile 
     request.Credentials = New NetworkCredential(_username, _password) 
     request.UsePassive = True 
     request.UseBinary = True 
     request.KeepAlive = False 

     Using fs As FileStream = File.OpenRead(_filename) 
      Dim buffer As Byte() = New Byte(fs.Length - 1) {} 
      fs.Read(buffer, 0, buffer.Length) 
      fs.Close() 
      Dim requestStream As Stream = request.GetRequestStream() 
      requestStream.Write(buffer, 0, buffer.Length) 
      requestStream.Flush() 
      requestStream.Close() 
      Dim response As FtpWebResponse = DirectCast(request.GetResponse(), 
       FtpWebResponse) 
      Console.WriteLine($"Remote server response: {response.StatusCode}, 
       {response.StatusDescription}") 
     End Using 
    End Sub 

End Module 

Entschuldigung, wenn die Formatierung überall ist. Dies ist mein erster Versuch, VB zu schreiben.

Ausführen dieser in Kudu's DebugConsole für Klarheit - gleiche Sandbox wie der Web App:

Run-in-Kudu

Auf dem FTP-Server:

ftp> ls file.txt 
200 PORT command successful. 
125 Data connection already open; Transfer starting. 
file.txt 
226 Transfer complete. 
ftp: 13 bytes received in 0.02Seconds 0.81Kbytes/sec. 

ftp> bin 
200 Type set to I. 

ftp> get file.txt 
200 PORT command successful. 
125 Data connection already open; Transfer starting. 
226 Transfer complete. 
ftp: 24 bytes received in 0.18Seconds 0.14Kbytes/sec. 

ftp> !type file.txt 
Upped with FtpWebRequest 
+0

Vielen Dank für ein Blick auf mein Problem, aber ich denke, es ist nicht eine Kerberos-Authentifizierung. Es ist nur ein einfacher Grund. Ich starte den Code auf einem lokalen FTP-Server, und hier werden die relevanten Befehle ausgeführt: 2016-09-28 19:16:48 :: 1 - :: 1 21 USER anonymous 331 0 0 72cfd8e0-20c5-48ad-af21 -df2443de8605 - 2016-09-28 19:16:48 :: 1 - :: 1 21 PASS [email protected] 230 0 0 72cfd8e0-20c5-48ad-AF21-df2443de8605/ Allerdings bin ich irgendwie interessiert Wie hast du getestet? Hast du irgendwie eine vb Konsolenanwendung auf azur hochgeladen? – kexx

+0

Ja. Drag & Drop in die Kudu-Konsole. Link in meiner Antwort. – evilSnobu

Verwandte Themen