100% надежный код передачи файлов c # ftp (с транзакциями, если это возможно) - PullRequest
3 голосов
/ 18 ноября 2009

Эй, ребята, я хочу написать небольшую клиентскую библиотеку классов c # ftp, которая в основном должна передавать файлы в папку ftp

то, что я хочу, это 100% надежный код, где я могу получить какое-то подтверждение того, что передача файла ftp прошла либо на 100% успешно, либо не удалось

возобновление поддержки не требуется

хорошо иметь (но вторично):

какая-то распределенная транзакция, в которой только если передача файла прошла успешно для файла, я обновляю свою базу данных для этого конкретного файла с 1 (истина) ... если она не удалась, то база данных обновляется с 0 (ложь)

но предположим, что передача файла ftp прошла успешно, но по каким-то причинам не удалось обновить базу данных, тогда файл поверх ftp следует удалить - я могу легко это сделать, используя грязный код c # (где я пытаюсь вручную удалить файл если обновление БД не удалось)

но я точно ищу транзакцию на основе файловой системы через ftp ... так что передача файла, а также обновление базы данных не выполняется до тех пор, пока оба не будут успешными (следовательно, не нужно удалять вручную)

какие-нибудь подсказки?

Ответы [ 3 ]

7 голосов
/ 18 ноября 2009

Получив «радость» от написания библиотеки FTP, вот мой совет

1) Это НЕ будет легко, потому что FTP-серверы возвращают разные результаты от одной и той же команды (например, информация о каталоге, обычные команды ftp и почти все).
2) Это займет больше времени, чем ты думаешь
3) Мечты о 100% надежной передаче не осуществятся, если вы не управляете сервером FTP и не добавляете новую команду FTP, чтобы вы могли сравнивать хэши файлов.


В значительной степени, если бы я собирался сделать это снова, и моя цель состояла в том, чтобы передавать файлы (а не учиться на создании библиотеки), я бы купил уже готовую библиотеку,

0 голосов
/ 14 декабря 2010

.NET имеет FTP-клиент , который вы можете использовать. Я не знаю, насколько он надежен перед лицом причуд FTP-сервера; вам придется проверить его на FTP-сервере вашего клиента. Что касается проверки успешности загрузки, единственными инструментами, которые у вас есть, являются (1) проверка того, что во время загрузки не было ошибок транспорта, (2) проверка размера файла , когда вы закончите.

FTP-сервер не будет поддерживать транзакции, поэтому вам придется управлять этим самостоятельно, но на самом деле это не сложный сценарий. Использовать транзакцию для обновления БД; отмена загрузки по FTP выполняется одним вызовом.

0 голосов
/ 18 ноября 2009

попробуйте использовать Ftp с WCF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...