2016-11-03 23 views
0

私は20秒ごとにFTPフォルダをチェックし、ファイルをローカルにコンピュータにコピーする簡単なWindowsサービスを作成しました。私はC#Windowsのタイムアウトは、リリースモードのFtpWebRequest.GetResponse()で行われます。

using (response = reqFTP.GetResponse()) 

FTPエラーを呼び出すときに、私は次のエラーをキャッチします。installutil ... System.Net.WebExceptionを使用してリリースをインストールするときにデバッグモードで

は、それはしかし、完璧に動作します:操作は時間指定ありアウト System.IO.Stream.Closeで System.Net.CommandStream.Disposeで System.Net.FtpWebRequest.RequestCallback(オブジェクトobj)で System.Net.FtpWebRequest.SyncRequestCallback(オブジェクトobj)(ブール処分)(で)at System.IO.Stream.Dispose()at System.Net.Connecti System.Net.FtpWebRequest でSystem.Net.FtpWebRequest.FinishRequestStage(RequestStageステージ)で System.Net.ConnectionPool.PutConnection(PooledStream pooledStream、 オブジェクトowningObject、のInt32 creationTimeout、ブールcanReuse)でonPool.Destroy(PooledStream pooledStream)完全な要求は以下の通りであるに....

FileMan.Service1.GetFileListで.GetResponse()();

string[] downloadFiles; 
      StringBuilder result = new StringBuilder(); 
      WebResponse response = null; 
      StreamReader reader = null; 
      textWrite.WriteLine("attempting to get file list" + DateTime.Now + Environment.NewLine, true); 
      try 
      { 
       FtpWebRequest reqFTP; 
       ServicePointManager.DefaultConnectionLimit = 100; 
       reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(downloadSrc)); 
       reqFTP.UseBinary = true; 
       textWrite.WriteLine("requestFTP...Passed..." + DateTime.Now + Environment.NewLine, true); 
       //reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); 
       reqFTP.Method = WebRequestMethods.Ftp.ListDirectory; 
       reqFTP.Proxy = null; 
       reqFTP.KeepAlive = true; 
       reqFTP.UsePassive = false; 
       reqFTP.Timeout = 8000; 

       //////////STOPS HERE 
       //response = reqFTP.GetResponse(); 
       using (response = reqFTP.GetResponse()) 
       { 
        // Do stuff 
        //... 

        reader = new StreamReader(response.GetResponseStream()); 
        string line = reader.ReadLine(); 

        while (line != null) 
        { 
         result.Append(line); 
         result.Append("\n"); 
         line = reader.ReadLine(); 
        } 
        result.Remove(result.ToString().LastIndexOf('\n'), 1); 
        return result.ToString().Split('\n'); 
       } 
      } 
      catch (Exception ex) 
      { 
       textWrite.WriteLine("FTP error..." + ex + "..." + DateTime.Now + Environment.NewLine, true); 
       textWrite.Close(); 
       if (reader != null) 
       { 
        reader.Close(); 
       } 
       if (response != null) 
       { 
        response.Close(); 
       } 
       downloadFiles = null; 
       return downloadFiles; 
      } 

追加する必要があるアクセス権はありますか? これはデバッグモードで動作するので、コード自体は問題ありません。私はそれをブロックしていたものを理解する必要がありました。

P.S. 私はLocalSystemをアカウントとして使用していますが、installutilを使用してインストールする前に、リリース・ビルドを直接Cドライブにコピーしています。

+1

マシンはFTPサーバーに接続しましたか?いくつかのファイアウォールがブロックしましたか –

+0

デバッグモード(2015年まで実行中)では接続に問題はありませんでしたが、リリースモードでタイムアウトしました編集:ファイアウォールをオフにしてみました(運がない) – Jube

+0

edrgkjl; rajklsafkjlsfkdajちょうどネットワークファイアウォールが回っていました。 ..............病気にファイアウォールに例外を追加し、安定したらこの質問に答えてください。 – Jube

答えて

0

パブリックファイアウォールをオフにすると、プログラムが機能しました! 私は、インバウンドのファイアウォールルールにサービスexeを追加しました。これはうまくいきました。これは、これと同様の問題を抱えている人に役立ちます。

関連する問題