c# - 无法从传输连接读取数据。FtpWeb 请求。C#
问题描述
我正在配置一项服务以从 ftp 存储库中读取一些 csv 文件。当我在本地机器上调试时,它工作得很好,但是当我构建它并让它运行时,它就不起作用了。我放了一些控制台日志来编写程序执行的步骤。我可以看到它连接到 ftp 并读取它的文件,但不是它的全部内容。示例:第一个文件有 170000 行,程序将只读取前 489 行,然后出现消息:“无法从传输连接读取数据:现有连接被远程主机强制关闭”。它自己运行了 3 次,我知道是因为相同的消息出现了 4 次,但没有提交记录。下面是部分代码。
public async Task<IResult> GravaSore(List<string> arquivos) //caller
{
foreach (var item in arquivos)
{
await ProcessaGravacao(item);
}
return new TypeResult<bool>("processados"); ;
}
private async Task<IResult> ProcessaGravacao(string item) //called
{
var urlFtp = [ftp_string];
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(urlFtp);
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
request.Credentials = new NetworkCredential("usr", "pwd");
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.EnableSsl = true;
request.UsePassive = true;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
String linha;
try
{
var contador = 0;
while ((linha = reader.ReadLine()) != null)
{
if (!linha.Contains("cpf"))
{
var colunas = linha.Split(";");
var cpf = colunas[0];
var core = colunas[1].Substring(0, 5);
var core2 = decimal.Parse(core);
var data = colunas[2].Split("-");
var ano = int.Parse(data[0]);
var mes = int.Parse(data[1]);
var dataCore = new DateTime(ano, mes, 01, 01, 01, 01);
var pessoa = _pRepositorio.OPPCpf(cpf);
if (pessoa == null)
break;
var cliente = pessoa.Cliente;
Csore entity = new Csore { DataHora = dataCore, Cliente = cliente, Core = core2 };
await _Repositorio.AddAsync(entity);
contador++;
if (contador >= 5000)
{
contador = 0;
await _Repositorio.CommitAsync();
}
}
}
if(contador > 0)
await _Repositorio.CommitAsync();
Console.WriteLine("sucesso");
reader.Close();
response.Close();
return new TypeResult<bool>("Sucesso");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}
解决方案
推荐阅读
- ios - 如何让 VoiceOver 忽略不可见的 UICollectionViewCell
- c# - 读取请求的内容 - ReadAsStringAsync()
- swift - 命令 CompileSwift 因非零退出代码而失败
- react-native - Expo SecureStore getItem
- angular - Angular 7 - Visual Studio Code 中的版本控制 Git
- schema - 如何在 avro 模式中声明对象类型的实体
- mysql - 对于期望 '(' 的此服务器版本,选择在此位置无效
- unity3d - Unity - 相机移动后拖动对象
- c - 信号处理程序和程序控制流(事件顺序)
- html - 仅在 div 区域内禁用可点击元素