-
Notifications
You must be signed in to change notification settings - Fork 0
/
Инструкции и описание.txt
59 lines (36 loc) · 5.97 KB
/
Инструкции и описание.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
- Открыть файл PolyusTestApp.sln и пересобрать все проекты
- В папке с файлом PolyusTestApp.sln есть файлы PolyusTestApp.InstallClient.exe, PolyusTestApp.InstallServer.exe.
Запустить PolyusTestApp.InstallServer.exe - для установки серверной части, PolyusTestApp.InstallClient.exe - для клиентской части.
- Если установка прошла успешно, в окне "Службы" появятся запущенные службы PolyusTestApp.ReceiverWindowsService - для сервера,
PolyusTestApp.SenderWindowsService - для клиента.
- Если установка не прошла успешно, службы не появились или появились, но не запускаются - смотреть в журнал приложений Windows и разбираться: в чём же дело.
- При ошибке "Невозможно запустить службу.
System.ServiceModel.AddressAccessDeniedException:
Протоколу HTTP не удалось зарегистрировать URL-адрес http://+:5210/SyncFolder/.
Текущий процесс не имеет прав доступа к этому пространству имен" - попробовать запустить комманду в консоле netsh http add urlacl url=http://+:5210/SyncFolder user=DOMAIN\user,
но это, скорее всего, не поможет.
- По умолчанию, сервер запускается по адресу "net.tcp://localhost:3021", папка для синхронизации на стороне сервера - "C:\tmp_receiver", на стороне клиента - "C:\tmp"
- Логгирование работы ведётся в папке с исполняемыми файлами (\PolyusTestApp\PolyusTestApp.Receiver\bin\Debug\log; \PolyusTestApp\PolyusTestApp.Sender\bin\Debug\log )
Описание решения:
- Проект PolyusTestApp.Receiver - запускает на порту :3021 Windows службу с WCF контрактом IReceiver, содержащем методы:
* Create - принимает запрос на создание файла с именем файла,
содержимым файла, в виде массива байтов и контрольной суммой;
посчитанной на стороне отправителя. Тоже считает контрольную сумму,
если она не совпадает с контрольной суммой отправителя - возвращает ошибку.
* Update - Работает аналогично методу Create (Удаляет старый файл, создает новый).
* Delete - удаляет файл.
* RenameFile - переименовывает.
- Проект PolyusTestApp.Sender - запускает Windows службу, которая создаёт экземпляр класса FileSystemWatcherRegEx - унаследованного от стандартного
FileSystemWatcher. Класс переопределён, так как стандартный FileSystemWatcher не умеет работать с регулярными выражениями в качестве маски файлов,
пришлось расширить функционал. FileSystemWatcherRegEx отслеживает операции создания, изенения, переименования, удаления файлов в папке,
генерирует событие с параметрами изменяемого файла. При возникновении события вызывается метод SendFileData, который
анализирует тип события, высчитывает контрольную сумму и вызывает соответствующий метод экземпляра класса ReceiverService, выступающем в качестве своего рода шлюза для
отправки данных получателю. ReceiverService создаёт подключение и вызывает соответствующий метод получателя.
- PolyusTestApp.Common - Общие методы для работы с фаиловой системой и общие методы расширения.
- PolyusTestApp.Logger - проект для логгирования. Просто статический класс, который можно вызвать в любом месте. Пишет логи в файлы по дате.
- PolyusTestApp.Models - Общие модели, которые необходимо испоьзовать на стороне отправки и на стороне приёма файлов.
- PolyusTestApp.InstallClient, PolyusTestApp.InstallServer - два одинаковых проекта для установки.
* Без подключения "лишних" сборок, ведут поиск файла службы для инсталиции во всех папках, где запускается их исполняемый файл.
* Определяют путь до утилиты "InstalUtil.exe" по разрядности системы.
* Генерируют инструкции коммандной строки для запуска встроенного инсталятора службы.
* Запускают коммандную строку с набором инструкции через Process.Start.