Мне нужно тянуть большие файлы резервных копий с серверов моих клиентов на мой сервер каждый месяц - PullRequest
0 голосов
/ 19 февраля 2010

У меня есть клиенты, использующие SQL Server Express 2005, и каждый из них нуждается в резервном копировании каждый месяц, и эту резервную копию необходимо перенести на наш сервер в случае потери своей резервной копии. Наше программное обеспечение автоматически создает резервную копию базы данных каждый месяц, но мы должны вручную войти и скопировать ее. Есть ли способ автоматизировать копирование файлов до 800 мегабайт со своего компьютера на наш каждый месяц, возможно, с использованием FTP? Кроме того, при использовании FTP он должен поддерживать возобновление в случае, если мы потеряем соединение три четверти, через которые происходит довольно часто. Я хотел бы написать эту функциональность в наше приложение VB.net, которое требует только .net Framework и не использует никаких сторонних элементов управления.

Ответы [ 3 ]

2 голосов
/ 19 февраля 2010

Я думаю, что именно здесь вам будет лучше, если вы используете что-то вроде RSync , а не домашнее решение.

0 голосов
/ 19 февраля 2010

Другой альтернативой может быть использование такой программы, как SyncBack, которая поддерживает синхронизацию через FTP, может запускаться ежедневно / еженедельно / ежемесячно, и я много лет работал над тем, о чем вы говорите. Я не уверен в возобновлении передачи по FTP, но он отлично справляется с резервным копированием по FTP.

0 голосов
/ 19 февраля 2010

Это, безусловно, выполнимо либо с классами WebClient, либо с серией классов (Ftp) WebRequest / WebResponse - и я могу дать вам некоторый пример кода, если это необходимо - но если у вас нет какого-то конкретного бизнес-кейса для развертывания своего собственного чего-то вроде RSync будь лучшим выбором.

EDIT;

Маршрут WebClient является самым простым, но он не дает вам большого контроля;

Imports System.Net
...
Dim Client As New WebClient
Client.DownloadFile("ftp://ftp.example.com/Database.bak", "D:\Backups\Database.bak")

Если вы хотите немного больше контроля и управлять возобновлением FTP, то что-то вроде этого поможет;

Public Sub TransferFile(ByVal SourcePath As String, ByVal DestinationPath As String)

    Dim SourceRequest As FtpWebRequest

    Dim Buffer(4095) As Byte
    Dim BytesRead As Integer

    ' Assumes source is on FTP server...
    SourceRequest = DirectCast(WebRequest.Create(SourcePath), FtpWebRequest)
    SourceRequest.Method = WebRequestMethods.Ftp.DownloadFile

    ' If we already have a local file, then resume from the end of it...
    SourceRequest.ContentOffset = If(File.Exists(DestinationPath), New FileInfo(DestinationPath).Length, 0)

    ' Assume destination file is local/UNC file. FileMode.Append will create a new file if one doesn't exist.
    Using DestinationFile As New FileStream(DestinationPath, FileMode.Append, FileAccess.Write, FileShare.None)
        Using SourceResponse As WebResponse = SourceRequest.GetResponse()
            Using SourceStream As Stream = SourceResponse.GetResponseStream()

                Do

                    BytesRead = SourceStream.Read(Buffer, 0, Buffer.Length)
                    DestinationFile.Write(Buffer, 0, BytesRead)

                    ' Calculate speed, progress, show to user/log, etc...

                Loop While BytesRead > 0

            End Using
        End Using
    End Using

End Sub

Предполагается, что вы переходите с FTP -> локально. Имя пользователя / пароль могут быть предоставлены как в SourcePath так; FTP: // имя пользователя: password@ftp.mysite.co.uk

Надеюсь, это поможет.

...