我正在使用以下代码上传文件,它可以正常工作,但有时会引发此错误“底层连接已关闭:服务器违反了协议”,并停止了该过程,当我再次运行该文件时,它没有任何问题地上传文件.

我注意到的一件事是,如果我运行此过程来上传多个文件,则有时会收到此错误;如果我的文件少于5个,则说明工作正常,不知道我在哪里以及要查看的内容.

我在google上搜索时,找不到任何可靠的解决方案,甚至一个msdn博客都说这是FTPwebrequest中的错误,但不确定.

环境:C#4.0,IIS FTP服务器.

提前致谢

FileInfo fileInf = new FileInfo(filename);

FtpWebRequest reqFTP;

// Create FtpWebRequest object from the Uri provided

reqFTP = (FtpWebRequest)FtpWebRequest.Create

(new Uri(path + fileInf.Name));

// Provide the WebPermission Credintials

reqFTP.Credentials = new NetworkCredential(user, pwd);

// By default KeepAlive is true, where the control connection

// is not closed after a command is executed.

reqFTP.KeepAlive = false;

// Specify the command to be executed.

reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

// Specify the data transfer type.

reqFTP.UseBinary = true;

reqFTP.Timeout = -1;

reqFTP.UsePassive = true;

// Notify the server about the size of the uploaded file

reqFTP.ContentLength = fileInf.Length;

// The buffer size is set to 2kb

int buffLength = 4096;

byte[] buff = new byte[buffLength];

int contentLen;

// Opens a file stream (System.IO.FileStream) to read the file

// to be uploaded

FileStream fs = fileInf.OpenRead();

try

{

// Stream to which the file to be upload is written

Stream strm = reqFTP.GetRequestStream();

// Read from the file stream 2kb at a time

contentLen = fs.Read(buff, 0, buffLength);

// Till Stream content ends

while (contentLen != 0)

{

// Write Content from the file stream to the FTP Upload

// Stream

strm.Write(buff, 0, contentLen);

contentLen = fs.Read(buff, 0, buffLength);

}

// Close the file stream and the Request Stream

strm.Close();

fs.Close();

}

回答

reqFTP.KeepAlive = false;设为“ True”以消除我的情况下的错误.

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐