Как спроектировать службу WCF, которая может запускать задачу асинхронно и получать ее статус - PullRequest
1 голос
/ 24 января 2012

Я хочу создать службу WCF, которая запустит долгосрочную задачу и будет иметь возможность запрашивать состояние потока.

Моя идея - создать класс, реализующий этот интерфейс

public interface IProcess
{
    ProcessStatus GetStatus();
    void AsyncStartDataProcess();
}

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

Затем в службе WCF есть статический объект типа IP-процесса:

public static IProcess ActiveProcess = ProcessFactory.CreateNewProcess();

А затем выставить через ServiceContract два метода:

StatusResponse GetStatus();
StartProcessResponse StartProcess();

StartProcess метод вызовет ActiveProcess.AsyncStartDataProcess(), а GetStatus вызовет ActiveProcess.GetStatus().

Для каждого запроса будет только один активный процесс. GetStatus и StartProcess будут доступны из веб-приложения ASP.NET и могут быть доступны нескольким пользователям.

Существуют ли проблемы, связанные с тем, что я запускаю долго работающий поток во время вызова службы WCF? (ответ дойдет до клиента, и поток продолжит работу?)

Должен ли я лучше использовать экземпляр Singleton в этом случае? Если да, то в этом случае применяется предыдущий вопрос?

1 Ответ

1 голос
/ 24 января 2012

Я думаю, что контракт вашей службы хорошо разработан ( ЕСЛИ , вы абсолютно уверены, что будет только одна долгосрочная задача).Но я бы не стал выполнять долгосрочную задачу в классе, реализующем сервис.Я бы выделил это для другого компонента.

Если у вас есть более одного длительного процесса, вы можете сделать это:

public interface IProcess
{
    ProcessStatus GetStatus(Guid id);     
    Guid AsyncStartDataProcess();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...