首页 > 解决方案 > 无法从传输连接读取数据。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;
        }
    }

标签: c#ftpwebrequest

解决方案


推荐阅读