C # - Как получить доступ к удаленному потоку? - PullRequest
1 голос
/ 05 июля 2010

Сначала я собираюсь объяснить, что я пытаюсь сделать, прежде чем задавать вопрос напрямую.По сути, на определенной машине работает служба Windows, назовем ее M1.Эта служба Windows выполняет набор задач с использованием потоков (1 поток для каждого раздела задач).Мне нужно запрограммировать функциональность, которая позволит пользователю останавливать / приостанавливать / перезапускать раздел из панели администрирования приложения.Мои решения состоят в том, чтобы получить доступ к темам по их идентификатору / имени.Как только у меня есть поток, я могу сделать правильную операцию над ним.Это правильный подход?

Если да, то как мы это сделаем?Потоки работают в M1, и мне нужно получить к ним доступ с удаленного компьютера (расположенного в той же сетевой области).Это вообще возможно?

Спасибо.Не стесняйтесь спрашивать больше объяснений, если это необходимо.

Ответы [ 4 ]

2 голосов
/ 05 июля 2010

Я не думаю, что это правильный подход.Будет лучше иметь интерфейс в сервисе, который обеспечит функциональность управления потоками.

2 голосов
/ 05 июля 2010

Предоставление прямого контроля над управлением потоками удаленному процессу - опасный способ решения этой проблемы.Вы можете настроить поток, который прослушивает запросы на приостановку и т. Д., И управлять потоками от имени запрашивающей стороны.Но это может вызвать бесконечные проблемы, так как вы не знаете, в каком состоянии находится поток, когда вы его приостанавливаете.В частности, он может удерживать блокировки или находиться в середине транзакции базы данных.

Если задачи недолговечны, каждый запрос потока должен выполняться боссом всякий раз, когда он завершает свою текущую работу.Чтобы приостановить раздел, скажите боссу (через TCP, веб-сервисы или что-то еще) не давать потоку раздела больше работать до дальнейшего уведомления.

1 голос
/ 05 июля 2010

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

Если бы я занимался этой проблемой, я бы открыл интерфейс Window Communication Foundation (WCF) в вашей службе Windows. Ваше приложение будет затем контролировать задачи через этот интерфейс.

Я бы не использовал .NET Remoting. Это будет работать, но .NET Remoting был заменен WCF . Из статьи MSDN:

WCF заменяет несколько ранее Технологии Microsoft для создания распределенные приложения. Наиболее приложения, которые были бы построен с использованием веб-служб ASP.NET, .NET Удаленное взаимодействие, корпоративные сервисы, System.Messaging, или WSE будет вместо быть построенным на WCF.

1 голос
/ 05 июля 2010

Я бы связывался с процессом по протоколу TCP или .NET с параметрами, необходимыми для определения задачи, которую нужно выполнить.

Тогда вам понадобится класс, который управляет этими запросами и сообщает потокам, что им делать.

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