У меня есть четко определенный контракт на обслуживание, который предоставляет кучу методов. У нас есть типичная сервисная реализация этого контракта, который размещен в IIS 7 вместе с нашим MVC-приложением.Вызов рабочего процесса WF из службы WCF
Архитектура представляет собой типичное распределенное приложение с интерфейсом, определенным в базовой библиотеке ядра (которая перераспределяется), реализация в рамках независимой библиотеки служб и, наконец, приложение MVC, отображающее конечную точку для реализации (который находится в библиотеке услуг).
Ситуация заключается в том, что один из этих существующих методов обслуживания должен, возможно, выполнить логический процесс, который может занять до 10 минут. В обычном сценарии мы бы рассмотрели службы рабочего процесса, но интерфейс под вопросом хорошо используется, у нас есть набор модульных тестов для тестирования наших сервисов и т. Д., И мы действительно не можем избавиться от этой реализации, которую мы имеем.
Так что мои вопросы -
- Можно ли иметь независимый рабочий процесс, который может сделать это долго работает процесс и вызывать его из нашей службы WCF?
- Если это так, то как я могу гарантировать, что рабочий поток, выполняющий мою службу в IIS, останется в живых в течение продолжительности рабочего процесса?
- Наконец, клиенту не нужно ждать ответа от этой службы. Это метод огня и забывания. Может ли клиент немедленно завершить работу, пока служба запускает рабочий процесс и ждет завершения?
Благодаря Дрю. Просто то, что я искал. Однако в бит «// делать что-то, когда рабочий процесс завершен», учитывая, что это служба WCF, как я могу предоставить метод обратного вызова (определенный в той же службе, возможно)? Будет ли создан новый экземпляр моей службы WCF и вызван метод обратного вызова при завершении WF? – Nikhil
О да, так что если вы хотите сделать обратный вызов, вы просто захватите канал обратного вызова клиента (OperationContext.Current.GetCallbackChannel()) в завершении обратного вызова, а затем просто вызовите метод обратного вызова. –
Я собираюсь отметить это как ответ, хотя у меня не было возможности попробовать это до конца. Кажется, это сработает! – Nikhil