Каталог файлов с удаленного сервера - С#
пишу дипломную работу связанную с упрощением бумажной волокиты администрации и кураторов моего УО (по их же запросу). Мне необходимо на условной форме
в условном treeView (элементе слева) выводить список документов, которые должны храниться на сервере (не локальном) с возможностью их открытия внутри приложения, редактирования и тд., а так же добавления новых документов на сервер с возможностью синхронизации между зарегистрированными пользователями с определенными правами. Есть мысли насчет загрузки документов на сервер и выгрузки их другим пользователем по щелчку к себе на комп, но тут стоит проблема в том, что будут выгружаться и файлы, которые уже есть в директории, да и в той же реализации. Подскажите что использовать и как лучше реализовать, заранее огромное спасибо. :)
Ответы (1 шт):
Мои мысли на тему:
- следить за изменениями в категории при помощи FileSystemWatcher. Авось кто-то меняет что на файловой системе без ведома программы извне.
- сервер должен принимать запросы в которых он указывает - это запрос на просмотр или на редактирование.
- сервер должен располагатся на белом айпишнике.
- если приходит запрос на редактирование - всем подключенным к серверу клиентам должен рассылаться сигнал что этот файл недоступен для редактирования. Кроме клиента который редактирует, собственно. Визуально показывать иконку с замочком.
- нужно реализовать сессии клиентов.
- Если сессия окончилась у клиента который редактировал документ - нужно снять блокировку для всех подключенных пользователей по таймауту.
- иерархию папок в триВью можно сделать просто идентичной физической иерархии папок на сервере. И не заморачиватся. Если некий файл изменился через сигнал от клиента или если некий файл изменился-переместился по сигналу FileSystemWatcher - нужно обновить информацию на стороне всех клиентов. Не пытайся оптимизировать с самого начала - обновляй все дерево полностью. А потом уже по мере необходимости.
- Подгрузка документа через интернет может занять время - прийдется взятся за асинхронные методы. Асинк-евейт тебе в помощь. Не забывай выдавать какую-то загрузку на экран на стороне клиента в такие моменты.
- База данных нужна, наверное, только для хранения пользователей. Она должна быть на стороне сервера. Собственно логин должен быть на стороне клиента через сервер. Т.к. это на стороне сервера - можно заморочится и с установкой полноценной базы данных. Будь это на стороне клиента - лучше было бы какой-нить SQLite
- Синхронизовать ВСЕ файлы, думаю, что бессмысленно. Занимает много места на всех машинах одновременно. Кроме того это создаст слишком много неоднозначностей для ручной слежки. Если хочешь синхронизовать все скопом - лучше это делать через гит-клиент, как предложили в комментариях.
- Если документы вордовские - имей ввиду что ни в коем случае не используй интероп для редактирования. Используй внешнюю библиотеку для редактирования ворда в обязательном порядке. Вполне возможно что лучшим вариантом будет редактирование конкретно в ворде с последующей синхронизацией файла на сервер. Это будет проще чем всовывать файловый редактор внутрь программы и удобнее. А просмотр можно напрямую в программу всунуть уже.
- Про права - тот еще вопрос. Вероятнее всего права на файлы нужно так же задавать через базу данных. Думаю что слишком сложно это делать через виндовую систему прав.
- Если же нужна история версий документов - то это именно в сторону гит-библиотеки нужно смотреть. Это будет лучше всего. Кто-то что-то поменял - сразу синхронизировать и запушить. Только тот еще вопрос что делать с конфликтами в таком случае. Вордовские документы это тебе не файлы с кодом что бы можно было легко конфликты решать.
- Серверную часть делай сервисом
- Если нужна история версий - можно реализовать гит-систему исключительно на уровне сервера.
Вобщем, задача на самом деле далеко не тривиальная и нужно учитывать много всего. И работы ооочень много, не смотря на то что на первый взгляд все достаточно просто по интерфейсу)