Wie verwenden Sie Passiv-Modus in FtpWebRequest & fix PASV-Fehler in .Net 3.5 & Definieren Sie die port-range von codes
finden Sie in meinem windows-form-codes erste :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace my_prog
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string ftp_username = "goodzilla_user";
string ftp_password = "goodzilla_pass";
string ftp_remote_host = @"ftp://11.11.111.11";
private void Form1_Load(object sender, EventArgs e)
{
UploadFile("d:\\test.txt", ftp_remote_host + @"/test.txt", ftp_username, ftp_password);
}
#region UploadFile Method
///<summary>
///Methods to upload file to FTP Server
///</summary>
///<param name="_FileName">local source file name</param>
///<param name="_UploadPath">Upload FTP path including Host name</param>
///<param name="_FTPUser">FTP login username</param>
///<param name="_FTPPass">FTP login password</param>
///
public void UploadFile(string _FileName, string _UploadPath, string _FTPUser, string _FTPPass)
{
System.IO.FileInfo _FileInfo = new System.IO.FileInfo(_FileName);
//Create FtpWebRequest object from the Uri provided
System.Net.FtpWebRequest _FtpWebRequest = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(new Uri(_UploadPath));
//Provide the WebPermission Credintials
_FtpWebRequest.Credentials = new System.Net.NetworkCredential(_FTPUser, _FTPPass);
//By default KeepAlive is true, where the control connection is not closed
//after a command is executed.
_FtpWebRequest.KeepAlive = false;
//set timeout for 20 seconds
_FtpWebRequest.Timeout = 20000;
//Specify the command to be executed.
_FtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
//Specify the data transfer type.
_FtpWebRequest.UseBinary = true;
//Notify the server about the size of the uploaded file
_FtpWebRequest.ContentLength = _FileInfo.Length;
//The buffer size is set to 2kb
int buffLength = 2048;
byte[] buff = new byte[buffLength];
//Opens a file stream (System.IO.FileStream) to read the file to be uploaded
System.IO.FileStream _FileStream = _FileInfo.OpenRead();
try
{
//Stream to which the file to be upload is written
System.IO.Stream _Stream = _FtpWebRequest.GetRequestStream();
//Read from the file stream 2kb at a time
int contentLen = _FileStream.Read(buff, 0, buffLength);
//Till Stream content ends
while (contentLen != 0)
{
//Write Content from the file stream to the FTP Upload Stream
_Stream.Write(buff, 0, contentLen);
contentLen = _FileStream.Read(buff, 0, buffLength);
}
//Close the file stream and the Request Stream
_Stream.Close();
_Stream.Dispose();
_FileStream.Close();
_FileStream.Dispose();
MessageBox.Show("Done");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Upload Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
#endregion
}
}
ich bin mit UploadFile Methode zum hochladen meiner Daten auf meinem windows server 2008 r2 server.
diese codes in .net 4 funktioniert perfekt, und mein problem ist, über .net 3.5.
in .net 3.5 bekam ich diese Fehlermeldung :
"Der server lieferte eine Adresse in der Antwort auf den PASV-Befehl, der
ist anders als die Adresse, auf die der FTP-Verbindung hergestellt wurde."
folgenden Gründen Mach ich n ' T verwenden möchten active mode
:
-
wie Sie wissen passiv-Modus ist besser, die active-Modus für
Konnektivität... -
wenn ich mit aktiv-Modus .net 3.5 und
drehen Sie den Proxy-Software auf bekam ich den folgenden Fehler :
"Die zugrunde liegende Verbindung wurde geschlossen: Der server verpflichtet, ein Protokoll
Verletzung."
aber .net 4 kein problem damit hat, dass Proxy-Software und passiven Modus und ich kann nicht wechseln .net 4, weil meine Benutzer...
so wie ich das beheben kann passiv-Modus-Fehler in .net 3.5?
in jedem thread in stack Leute sagen, verwenden Sie einfach :
_FtpWebRequest.UsePassive = false;
und das ist nicht meine Antwort!
Hinweis : firewall in server und client ist aus
Die ANDERE FRAGE IST :
ist es möglich, zu definieren, port-range von pssive Modus durch codes?
ich habe diese Frage in diesem thread, weil ich dachte, dadurch, dass wir das beheben können, die PASV-Fehler und helfen passiv-Modus zu tun, ist es Arbeit schneller...
EDIT :
ich fand den thread unten & ich glaube, ich habe die situation in Antwort #2,
ftp-problem
ich habe zwei Netzwerkkarten in meinem server und die ip der einzelnen innen-server ist wie 192.168.5.?? & 192.168.5.??
aber meine zwei öffentliche ip-Adressen unterschiedlich sind.
so wie ich das beheben kann, dass Fehler durch ändern etwas in meine codes oder in meinem windows-server-2008-r2 VPS und warum dieser Fehler erscheint nur in .net 3.5 und .net 4 wir haben Sie nicht?
ich habe vollen Zugriff auf meinen server und ändern können, alles, was notwendig ist.
vielen Dank im Voraus
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist Ihre Antwort :
es scheint, dass problem hat nichts zu tun mit .net 3.5 und .net 4
Sie können das problem beheben in server-wie unten
Konfiguration-ftp-firewall-Einstellungen-im-iis-7
für die proxy-software-Fehler : ändern Sie Port-Bereiche.
für passive error : change External IP-Adresse der Firewall, um Ihre öffentliche ip-Adresse.
EDIT :
wäre wirklich dankbar dafür, dass andere Menschen lernen uns ist es möglich zu definieren, port-Bereiche im code-behind oder nicht?