1

ファイルをアップロードして ftp サーバーに転送しようとしていますが、メソッドを実行すると、2 つのファイルしかアップロードされず、停止します。この線で止まる

Stream uploadStream = reqFTP.GetRequestStream();

最初の 2 回この行に到達すると、プログラムは証明書をチェックしてから続行しますが、3 回目は停止し、証明書のチェックを続行しません。

完全なコードは次のとおりです。

public void UploadLocalFiles(string folderName)
        {
            try
            {

                string localPath = @"\\localFolder\" + folderName;
                string[] files = Directory.GetFiles(localPath);
                string path;            

                foreach (string filepath in files)
                {
                    string fileName = Path.GetFileName(filepath);
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://serverIP/inbox/"+fileName));
                    reqFTP.UsePassive = true;
                    reqFTP.UseBinary = true;
                    reqFTP.Credentials = new NetworkCredential("username", "password");
                    reqFTP.EnableSsl = true;
                    ServicePointManager.ServerCertificateValidationCallback = Certificate;
                    reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

                    FileInfo fileInfo = new FileInfo(localPath +@"\"+ fileName);
                    FileStream fileStream = fileInfo.OpenRead();

                    int bufferLength = 2048;
                    byte[] buffer = new byte[bufferLength];

                    Stream uploadStream = reqFTP.GetRequestStream();
                    int contentLength = fileStream.Read(buffer, 0, bufferLength);

                    while (contentLength != 0)
                    {
                        uploadStream.Write(buffer, 0, bufferLength);
                        contentLength = fileStream.Read(buffer, 0, bufferLength);
                    }
                }

            }
            catch (Exception e)
            {
                Console.WriteLine("Error in GetLocalFileList method!!!!!" + e.Message);
            }

        }

私が言ったように、uloadStreamコードに到達すると、証明書がチェックされます。これが私の証明書メソッドです

 public bool Certificate(Object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors errors)
        {
            { return cert.Issuer == "myCertificate"; }
        }

FTPサーバーに1回だけ接続し、証明書を1回実行してセッションを保持する方法はありますか?? ファイルをアップロードまたはダウンロードするたびに、接続して各ファイルの証明書を確認します..

4

2 に答える 2

2

アプリのエントリ ポイントに次の行を追加するだけです。

System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
于 2012-09-20T07:08:44.430 に答える
1

おそらく、ServicePoint.ConnectionLimitプロパティのデフォルトの接続制限である。に達しています2。にFtpWebRequestは、ServicePoint調整可能なプロパティがあります。uploadStreamアップロードが完了したらすぐに閉じる必要があります。

于 2012-09-20T07:00:45.433 に答える