title: Attempting to upload to FTP: System.Net.WebException: System error
body: <p>I have an API that takes in XML and ultimately uploads files based on information in the XML. The uploads are on a schedule (also from XML), and I have tested everything surrounding it and know it works. </p>
  
  <p>I am getting an error about 40% of the time on the first file that I attempt to upload in each time cycle (time cycle = 45 minutes for some files, 30 minutes for others). </p>
  
  <p>Here is my code for the upload:</p>
  
  <pre><code>try {
      LoggerFTP.Log("Uploading file: " + filename, false);
  
      // Create the request.
      FtpWebRequest request = (FtpWebRequest)WebRequest.Create(appSettingsFTP.ftpUrl + @"/" + filename);
      request.Method = WebRequestMethods.Ftp.UploadFile;
      request.Timeout = 6000000; //set to 100 minutes
      //request.Timeout = -1; //set to infinite
  
      // Add the login credentials.
      request.Credentials = new NetworkCredential(appSettingsFTP.ftpLogin, appSettingsFTP.ftpPassword);
  
      // Grab the file contents.
      StreamReader sourceStream = new StreamReader(appSettingsFTP.uploadFileDirectory + filename);
      byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
      sourceStream.Close();
      request.ContentLength = fileContents.Length;
  
      // Copy the file contents to the outgoing stream.
      Stream requestStream = request.GetRequestStream();
      requestStream.Write(fileContents, 0, fileContents.Length);
      requestStream.Close();
  
      FtpWebResponse response = (FtpWebResponse)request.GetResponse();
      //Logger.Log(filename.ToString() + " " + "Upload Complete, Status: " + response.StatusCode + " " + response.StatusDescription, false);
      //Took response.StatusDescription out because it appears to be creating extra line feeds.
      LoggerFTP.Log(filename.ToString() + " " + "Upload Complete, Status: " + response.StatusCode, false);
  }
  catch (Exception ex) {
      LoggerFTP.Log(ex.ToString(), false);
  }
  </code></pre>
  
  <p>I have researched the issue and saw something online about it potentially being a speed thing. Like, there is a timeout. But I have my timeout set to 100 minutes for my FtpWebRequest, so it can't possibly be that? I don't know. This is also running as a service so it is hard to test this aspect of the code. </p>
  
  <p>Here is the exception that is getting logged in my logger (e.ToString):</p>
  
  <pre><code>System.Net.WebException: System error. ---&gt; System.Net.InternalException: System error.
     at System.Net.PooledStream.PrePush(Object expectedOwner)
     at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse)
     at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
     at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
     at System.Net.FtpWebRequest.RequestCallback(Object obj)
     at System.Net.CommandStream.Dispose(Boolean disposing)
     at System.IO.Stream.Close()
     at System.IO.Stream.Dispose()
     at System.Net.ConnectionPool.Destroy(PooledStream pooledStream)
     at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse)
     at System.Net.FtpWebRequest.AttemptedRecovery(Exception e)
     at System.Net.FtpWebRequest.SubmitRequest(Boolean async)
     --- End of inner exception stack trace ---
     at System.Net.FtpWebRequest.GetRequestStream()
     at CPMainSpringAPIExportsSC.UploadFTP.FTPUploadMethod(String viewname, String filename)
  </code></pre>