QA@IT

アクティブモードでFTPにファイルを転送できない

6615 PV

Windows2012サーバ、C#.NETで開発したバッチでファイルをFTPでアップロードしようとしています。
VisualStudio2015で .NET Framework4を使用しています。

        public ResponseInfo UploadFile(string Uri, string localFile)
        {
            // FTP Request
            FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(Uri);
            if (ftpCredential != null) ftpRequest.Credentials = ftpCredential;
            ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
            ftpRequest.KeepAlive = false;
            ftpRequest.UseBinary = true;
            ftpRequest.UsePassive = false;
            ftpRequest.Proxy = null;

            // Upload Data
            using (var rs = ftpRequest.GetRequestStream())
            {
                using (var fs = new FileStream(localFile, FileMode.Open, FileAccess.Read))
                {
                    Console.WriteLine(DateTime.Now + "byte");
                    byte[] buffer = new byte[1024];
                    while (true)
                    {
                        int rSize = fs.Read(buffer, 0, buffer.Length);
                        if (rSize == 0) break;
                        rs.Write(buffer, 0, rSize);
                    }
                }
            }

            // Response
            ResponseInfo Status = new ResponseInfo();
            using (var res = (FtpWebResponse)ftpRequest.GetResponse())
            {
                Status.Code = res.StatusCode;
                Status.Description = res.StatusDescription;
            }
            return Status;
        }

上記のメソッドを呼び出してバッチを起動させていますが、
「using (var rs = ftpRequest.GetRequestStream())」
のところで、下記のExceptionが出ます。

2018/06/20 15:19:00操作はタイムアウトになりました。 場所 System.Net.FtpWebRequ
est.SyncRequestCallback(Object obj)
場所 System.Net.FtpWebRequest.RequestCallback(Object obj)
場所 System.Net.CommandStream.Dispose(Boolean disposing)
場所 System.IO.Stream.Close()
場所 System.IO.Stream.Dispose()
場所 System.Net.ConnectionPool.Destroy(PooledStream pooledStream)
場所 System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Objec
t owningObject, Int32 creationTimeout, Boolean canReuse)
場所 System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
場所 System.Net.FtpWebRequest.GetRequestStream()
場所 SentFaxFile.FTPUtils.FtpRequest.UploadFile(String Uri, String localFile)

場所 SentFaxFile.FTPUtils.FtpRequest.b__21_0(SendFileInfo inf)
場所 System.Collections.Generic.List1.ForEach(Action1 action)
場所 SentFaxFile.FTPUtils.FtpRequest.Execute(String localDirectory)
場所 SentFaxFile.subclass.PWReminder.SendByFTP.Process(OdbcCommand cm)

同じサーバにインストールしているFFFTPクライアントツールからだと、アクティブモードでファイルのアップロードができますが、
コマンドプロンプトで下記コマンドを実行しようとすると、「7」でずっと止まりっぱなしでファイルがアップロードされません。

1.ftp
2.open 10.30..
3.fax
4.pwd
5.cd /PW_Reminder
6.bin
7.put D:\domain\faxpdf\save#F=050-1234-5678#S=20180619160509833-03299.pdf

この場合どういったところに問題がありますでしょうか?

ご教授のほどよろしくお願いいたします。

回答

本件解決しました。バッチを配置しているサーバのFireWallのポート番号が空いていなかったからでした。
あけたらFTPファイル転送できました。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。