Вот что конкретно я хочу достичь:
Используя .Net 3.5, у меня есть служба Windows, в которой запущена служба WCF. У меня есть клиент, который запрашивает файл из службы WCF (привязка Net.Tcp), которая затем копируется службой WCF в указанное место, где он может быть отредактирован / изменен клиентом. Служба WCF работает в режиме InstanceContextMode.PerSession.
Пока файл редактируется, я хочу заблокировать файл на компьютере, где размещена служба WCF. Как только файл будет возвращен, я хочу снова разблокировать файл. Я не верю, что могу заблокировать файл в службе WCF, поскольку сеанс службы заканчивается после того, как файл скопирован, и я предполагаю, что блокировка файла не будет сохранена в этот момент.
Одним из решений (которое меня не очень радует) является создание потока в службе Windows, который может поддерживать список <> файлов и блокировать / разблокировать их по мере необходимости. Конечно, доступ к этому списку должен быть синхронизирован для многопоточного доступа. Это решение потребовало бы постоянного опроса списков для обнаружения добавляемых новых файлов и удаления файлов.
На мой взгляд, предпочтительным подходом было бы инициировать событие из Службы WCF всякий раз, когда требуется блокировка / разблокировка. В отличие от постоянного опроса. Однако выполнение задачи блокировки / разблокировки должно происходить в другом потоке (например, в потоке, работающем в контексте службы Windows).
Мы делаем это с Windows Forms, где из фонового потока мы можем вызвать метод, который будет выполнен в потоке обмена сообщениями пользовательского интерфейса. Есть ли способ «вызвать» метод в другом потоке (не в потоке обмена сообщениями пользовательского интерфейса)?
Любые предложения о том, как лучше всего к этому подойти?