WCF и задачи с многопоточностью - PullRequest
0 голосов
/ 23 декабря 2009

Я хочу написать несколько веб-сервисов с использованием WCF.

Я хотел бы иметь «пул потоков» в моем веб-сервисе. Например, у меня есть почти 6 ГБ данных, которыми я должен манипулировать.

Я бы хотел, чтобы клиент вызвал операцию на веб-сервисе и создал новую задачу или поток. Клиент может вызвать ListRunningTasks (); и пусть веб-сервис вернет список задач. Клиент должен иметь возможность принудительно убить задачу, если она занимает слишком много времени, например KillTask ​​(int taskID); или что-то. Ранее я выполнял некоторые потоки, но не внутри WCF или службы, которая не имеет состояния. Это возможно? Если так, как можно было бы реализовать такую ​​вещь? Любое чтение, ссылки или предложения будут великолепны.

Спасибо, Майк.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2009

Одно из возможных решений:

  • Реализация явных очередей для ваших нерешенных задач с учетом того, что они занимают столько времени (20-30 минут, как вы написали).

  • Создание пользовательского компонента для управления этими очередями, например. вам может даже потребоваться возможность их сохранения, возобновления работы при перезапуске службы и т. д.

  • Явно созданы рабочие потоки, которые обрабатывают работу из этих очередей.

  • Реализация службы WCF, чтобы сделать ваш администратор очередей доступным для внешних систем.

Пулы потоков больше предназначены для обработки большого количества краткосрочных задач.

0 голосов
/ 23 декабря 2009

Вам следует рассмотреть возможность использования Windows Workflow Foundation для создания таких служб. Рабочий процесс конечного автомата может быть представлен как служба таким образом, что при вызове метода A он запускает рабочий процесс (задачу), после чего можно вызывать методы для остановки, приостановки или запроса выполняемой задачи. WF будет обрабатывать переходы состояний, предотвращая незаконные изменения состояний и следя за тем, чтобы новые задачи запускались только по мере необходимости.

Обратите внимание, что WF будет решать проблемы с потоками для вас почти прозрачно.

...