Учитывая событие в одном потоке, каков наилучший подход для выполнения задачи / метода в другом потоке .Net? - PullRequest
1 голос
/ 18 февраля 2010

Вот что конкретно я хочу достичь:

Используя .Net 3.5, у меня есть служба Windows, в которой запущена служба WCF. У меня есть клиент, который запрашивает файл из службы WCF (привязка Net.Tcp), которая затем копируется службой WCF в указанное место, где он может быть отредактирован / изменен клиентом. Служба WCF работает в режиме InstanceContextMode.PerSession.

Пока файл редактируется, я хочу заблокировать файл на компьютере, где размещена служба WCF. Как только файл будет возвращен, я хочу снова разблокировать файл. Я не верю, что могу заблокировать файл в службе WCF, поскольку сеанс службы заканчивается после того, как файл скопирован, и я предполагаю, что блокировка файла не будет сохранена в этот момент.

Одним из решений (которое меня не очень радует) является создание потока в службе Windows, который может поддерживать список <> файлов и блокировать / разблокировать их по мере необходимости. Конечно, доступ к этому списку должен быть синхронизирован для многопоточного доступа. Это решение потребовало бы постоянного опроса списков для обнаружения добавляемых новых файлов и удаления файлов.

На мой взгляд, предпочтительным подходом было бы инициировать событие из Службы WCF всякий раз, когда требуется блокировка / разблокировка. В отличие от постоянного опроса. Однако выполнение задачи блокировки / разблокировки должно происходить в другом потоке (например, в потоке, работающем в контексте службы Windows).

Мы делаем это с Windows Forms, где из фонового потока мы можем вызвать метод, который будет выполнен в потоке обмена сообщениями пользовательского интерфейса. Есть ли способ «вызвать» метод в другом потоке (не в потоке обмена сообщениями пользовательского интерфейса)?

Любые предложения о том, как лучше всего к этому подойти?

Ответы [ 2 ]

1 голос
/ 18 февраля 2010

Вы думали о том, чтобы иметь услугу блокировки / разблокировки, которая занимается этим? Таким образом, при необходимости вы можете вызвать службу блокировки из WCF и позволить другой службе справиться с проблемой блокировки. Эта служба также будет заниматься регистрацией сирот и т. Д.

0 голосов
/ 18 февраля 2010

MS Office делает это с помощью отдельного файла с именем, аналогичным имени целевого файла. Вы можете сделать то же самое, если у вас есть полный доступ к пункту назначения, что звучит так же, как и у вас. Я бы действительно пытался избежать какой-либо блокировки.

Вам потребуется процесс регистрации / возврата и способ восстановления после неудачных проверок и неудачных проверок и невозвращенных проверок.

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