Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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
C# 在C中使用FTP复制文件#_C#_Wcf - Fatal编程技术网

C# 在C中使用FTP复制文件#

C# 在C中使用FTP复制文件#,c#,wcf,C#,Wcf,我正在尝试在WCF内使用webrequest复制文件。我需要一些建议。有更好的方法吗 我将在这里面临什么样的安全问题 我可以在WCF内完成吗?还是正在使其更好地分离 public void InsertOccured(string Name) { // Console.WriteLine("Insert Occured",Name); Console.WriteLine("Insert Occured, {0}", Name); // FTP request to downl

我正在尝试在WCF内使用webrequest复制文件。我需要一些建议。有更好的方法吗

我将在这里面临什么样的安全问题

我可以在WCF内完成吗?还是正在使其更好地分离

public void InsertOccured(string Name)
{
  //  Console.WriteLine("Insert Occured",Name);
    Console.WriteLine("Insert Occured, {0}", Name);
   // FTP request to download the file from FTP Location
    FtpWebRequest reqFTP;

    try
    {
        string FilePath;
        string FileName = Name;

        //use Switch statement to identify the ftpServerIP

        FileStream outputStream = new FileStream(FilePath + "\\" + FileName, FileMode.Create);
        reqFTP= (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpserverIp + FileName));
        reqFTP.Method= WebRequestMethods.Ftp.DownloadFile;
        reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
        FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
        Stream ftpStream = response.GetResponseStream();
        long cl = response.ContentLength;
        int bufferSize = 2048;
        int readCount;
        byte[] buffer = new byte[bufferSize];
        readCount = ftpStream.Read(buffer, 0, bufferSize);
        while (readCount > 0)
        {
            outputStream.Write(buffer, 0, readCount);
            readCount = ftpStream.Read(buffer, 0, bufferSize);
        }

        ftpStream.Close();
        outputStream.Close();
        response.Close();

    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
}

使用FTP并不是最安全的。用户名、密码和所有数据都以明文形式发送。如果你担心安全性,你应该考虑使用SFTP。

使用FTP不是最安全的。用户名、密码和所有数据都以明文形式发送。如果你担心安全性,你应该考虑使用sftp.

它总是更好地使它分开,但是我对WCF的安全性问题了解不多,但是你可以使用这个代码来读取响应流,你应该使用“使用”来正确地管理流

的框架管理。
    try
        {
            byte[] buffer = new byte[4155]; 
            byte[] newBuffer;
            int readSize = 0;
            FileStream outputStream = new FileStream(FilePath + "\\" + FileName, FileMode.Create);
            int i = 0;
            using (Stream input = response.GetResponseStream())
            {
                    readSize = input.Read(buffer, 0, buffer.Length);
                    if (readSize > 0)
                    {
                        newBuffer = new byte[readSize];
                        Array.Copy(buffer, newBuffer, readSize);
                        outputStream.Write(newBuffer.ToArray(), 0, readSize);
                    }
                outputStream.Close();
            } 

将其分开总是更好的,但是我不太了解WCF的安全问题,但是您可以使用此代码来读取responseStream,您应该使用“using”让框架正确地管理和处理流

    try
        {
            byte[] buffer = new byte[4155]; 
            byte[] newBuffer;
            int readSize = 0;
            FileStream outputStream = new FileStream(FilePath + "\\" + FileName, FileMode.Create);
            int i = 0;
            using (Stream input = response.GetResponseStream())
            {
                    readSize = input.Read(buffer, 0, buffer.Length);
                    if (readSize > 0)
                    {
                        newBuffer = new byte[readSize];
                        Array.Copy(buffer, newBuffer, readSize);
                        outputStream.Write(newBuffer.ToArray(), 0, readSize);
                    }
                outputStream.Close();
            } 


你想实现什么?流和响应对象都应该在
中使用
块。这不一定足以给出完整的答案,但我发现,当我编写自己的版本时,使用了更大的缓冲区,这对你的工作有很大帮助。@Lloyd,我想实现的是,我的CLR触发器将文件名和位置发送到WCF,我的FTPWebreqest获取这些信息将文件从目标位置复制到本地。我还没有测试它,但有一件事是肯定的,我正在尝试复制大文件(视频文件)从目的地到本地。你想实现什么?流和响应对象都应该在
中使用
块。这不一定足以给出完整的答案,但我发现,当我编写自己的版本时,使用了更大的缓冲区,这对你的工作有很大帮助。@Lloyd,我想实现的是,我的CLR触发器将文件名和文件位置发送到WCF,我的FTPWebreqest获取这些信息将文件从目标位置复制到本地。我还没有测试它,但有一件事是肯定的,我正在尝试将大文件(视频文件)从目标位置复制到本地。谢谢大家宝贵的输入。谢谢你的代码,我想用你的密码。newBuffer不显示ToArray()的属性。(newBuffer.ToArray())。它引发异常“System.Array”不包含“ToArray.Do i miss”的定义。您可以在不转换调用ToArray()的情况下使用它,如果newBuffer是byte[]类型,则理想情况下不应给出错误。如果你仍然使用它,请告诉我。我仍然对.ToArray()有问题,我试图找出原因,尽管我更改了outputStream.Write(newbuffer,0,readCount)这样的代码;这很好,但我试图通过您的代码进行复制总是引发异常。感谢您的宝贵输入。感谢您的代码,我正在尝试使用您的代码。newBuffer不显示ToArray()的属性。(newBuffer.ToArray())。它引发异常“System.Array”不包含的定义ToArray.我是否遗漏了一些东西?您也可以使用它,而无需转换调用ToArray(),如果newBuffer的类型为byte[],理想情况下它不应该给出错误。让我知道你是否仍然使用它,我仍然对.ToArray()有问题,我试图找出原因,即使我更改了outputStream.Write(newbuffer,0,readCount)这样的代码;这很好,但我正试图通过您的代码复制“总是抛出异常”。@Scott,这也是我关心的问题,但必须遵循Ben Voigt的想法。@Scott,这也是我关心的问题,但必须遵循Ben Voigt的想法。