Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从传输连接读取数据。FtpWebRequest。C#_C#_Ftpwebrequest - Fatal编程技术网

无法从传输连接读取数据。FtpWebRequest。C#

无法从传输连接读取数据。FtpWebRequest。C#,c#,ftpwebrequest,C#,Ftpwebrequest,我正在配置从ftp存储库读取一些csv文件的服务。当我在本地机器上调试时,它工作得很好,但当我构建它并使它运行时,它就不工作了。我放了一些控制台日志来写程序采取的步骤。我可以看到它连接到ftp并读取其文件,但无法读取其全部内容。示例:第一个文件有170000行,程序将只读取前489行,然后出现消息:“无法从传输连接读取数据:现有连接被远程主机强制关闭”。它自己又运行了三次,我知道这是因为同一条消息出现了四次,但没有提交任何记录。下面是部分代码 public async Task<I

我正在配置从ftp存储库读取一些csv文件的服务。当我在本地机器上调试时,它工作得很好,但当我构建它并使它运行时,它就不工作了。我放了一些控制台日志来写程序采取的步骤。我可以看到它连接到ftp并读取其文件,但无法读取其全部内容。示例:第一个文件有170000行,程序将只读取前489行,然后出现消息:“无法从传输连接读取数据:现有连接被远程主机强制关闭”。它自己又运行了三次,我知道这是因为同一条消息出现了四次,但没有提交任何记录。下面是部分代码

    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;
        }
    }
public异步任务GravaSore(List arquivos)//调用方
{
foreach(arquivos中的var项目)
{
等待处理AGRAVACAO(项目);
}
返回新的TypeResult(“processados”);
}
私有异步任务ProcessaGravacao(字符串项)//已调用
{
var urlFtp=[ftp_字符串];
FtpWebRequest=(FtpWebRequest)WebRequest.Create(urlFtp);
ServicePointManager.ServerCertificateValidationCallback=委托{return true;};
request.Credentials=新网络凭据(“usr”、“pwd”);
request.Method=WebRequestMethods.Ftp.DownloadFile;
request.enablesl=true;
request.usesponsive=true;
FtpWebResponse response=(FtpWebResponse)request.GetResponse();
Stream responseStream=response.GetResponseStream();
StreamReader=新的StreamReader(responseStream);
弦琳哈;
尝试
{
var-contador=0;
而((linha=reader.ReadLine())!=null)
{
如果(!linha.包含(“cpf”))
{
var colunas=linha.Split(“;”);
var cpf=colunas[0];
var core=colunas[1]。子字符串(0,5);
var core2=decimal.Parse(核心);
var data=colunas[2]。拆分(“-”);
var ano=int.Parse(数据[0]);
var mes=int.Parse(数据[1]);
var dataCore=新日期时间(ano、mes、01、01、01);
var pessoa=_pRepositorio.OPPCpf(cpf);
if(pessoa==null)
打破
var cliente=pessoa.cliente;
Csore实体=新Csore{DataHora=dataCore,Cliente=Cliente,Core=core2};
wait_Repositorio.AddAsync(实体);
contador++;
如果(contador>=5000)
{
康塔多=0;
等待_Repositorio.CommitAsync();
}
}
}
如果(contador>0)
等待_Repositorio.CommitAsync();
Console.WriteLine(“sucesso”);
reader.Close();
response.Close();
返回新的TypeResult(“Sucesso”);
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
返回null;
}
}

此外:调试在本地运行良好,但不是我发送到服务器机器的版本。这段代码很奇怪。您似乎有一个异步过程,但您既不使用
GetResponseAsync()
也不使用
readlinesync()
reader.ReadLine()
返回一个从未使用过的值,
contador
从未增加。--您应该显示包含此代码的方法、调用它的方法以及如何/何时/从何处调用它。我编辑了它。我希望足够清楚。