Каталог файлов с удаленного сервера - С#

пишу дипломную работу связанную с упрощением бумажной волокиты администрации и кураторов моего УО (по их же запросу). Мне необходимо на условной форме Условная форма в условном treeView (элементе слева) выводить список документов, которые должны храниться на сервере (не локальном) с возможностью их открытия внутри приложения, редактирования и тд., а так же добавления новых документов на сервер с возможностью синхронизации между зарегистрированными пользователями с определенными правами. Есть мысли насчет загрузки документов на сервер и выгрузки их другим пользователем по щелчку к себе на комп, но тут стоит проблема в том, что будут выгружаться и файлы, которые уже есть в директории, да и в той же реализации. Подскажите что использовать и как лучше реализовать, заранее огромное спасибо. :)


Ответы (1 шт):

Автор решения: Andrew

Мои мысли на тему:

  1. следить за изменениями в категории при помощи FileSystemWatcher. Авось кто-то меняет что на файловой системе без ведома программы извне.
  2. сервер должен принимать запросы в которых он указывает - это запрос на просмотр или на редактирование.
  3. сервер должен располагатся на белом айпишнике.
  4. если приходит запрос на редактирование - всем подключенным к серверу клиентам должен рассылаться сигнал что этот файл недоступен для редактирования. Кроме клиента который редактирует, собственно. Визуально показывать иконку с замочком.
  5. нужно реализовать сессии клиентов.
  6. Если сессия окончилась у клиента который редактировал документ - нужно снять блокировку для всех подключенных пользователей по таймауту.
  7. иерархию папок в триВью можно сделать просто идентичной физической иерархии папок на сервере. И не заморачиватся. Если некий файл изменился через сигнал от клиента или если некий файл изменился-переместился по сигналу FileSystemWatcher - нужно обновить информацию на стороне всех клиентов. Не пытайся оптимизировать с самого начала - обновляй все дерево полностью. А потом уже по мере необходимости.
  8. Подгрузка документа через интернет может занять время - прийдется взятся за асинхронные методы. Асинк-евейт тебе в помощь. Не забывай выдавать какую-то загрузку на экран на стороне клиента в такие моменты.
  9. База данных нужна, наверное, только для хранения пользователей. Она должна быть на стороне сервера. Собственно логин должен быть на стороне клиента через сервер. Т.к. это на стороне сервера - можно заморочится и с установкой полноценной базы данных. Будь это на стороне клиента - лучше было бы какой-нить SQLite
  10. Синхронизовать ВСЕ файлы, думаю, что бессмысленно. Занимает много места на всех машинах одновременно. Кроме того это создаст слишком много неоднозначностей для ручной слежки. Если хочешь синхронизовать все скопом - лучше это делать через гит-клиент, как предложили в комментариях.
  11. Если документы вордовские - имей ввиду что ни в коем случае не используй интероп для редактирования. Используй внешнюю библиотеку для редактирования ворда в обязательном порядке. Вполне возможно что лучшим вариантом будет редактирование конкретно в ворде с последующей синхронизацией файла на сервер. Это будет проще чем всовывать файловый редактор внутрь программы и удобнее. А просмотр можно напрямую в программу всунуть уже.
  12. Про права - тот еще вопрос. Вероятнее всего права на файлы нужно так же задавать через базу данных. Думаю что слишком сложно это делать через виндовую систему прав.
  13. Если же нужна история версий документов - то это именно в сторону гит-библиотеки нужно смотреть. Это будет лучше всего. Кто-то что-то поменял - сразу синхронизировать и запушить. Только тот еще вопрос что делать с конфликтами в таком случае. Вордовские документы это тебе не файлы с кодом что бы можно было легко конфликты решать.
  14. Серверную часть делай сервисом
  15. Если нужна история версий - можно реализовать гит-систему исключительно на уровне сервера.

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

→ Ссылка