Предполагая, что для задания на печать существует уникальный идентификатор, консольное приложение может вызвать службу WCF, чтобы сообщить, что задание на печать выполнено успешно или не выполнено.
Служба WCF должна будет либо блокироваться до тех пор, пока не поступит вызов завершения (ожидающий, скажем, ManualResetEventSlim), либо вам придется записать службу как асинхронную службу , чтобы поток запроса мог быть возвращен пул во время выполнения задания на печать.
Причина, по которой вам нужен уникальный идентификатор для задания на печать, заключается в том, что вам придется хранить структуру данных в памяти в сервисе, отображая уникальный идентификатор на событие, чтобы вы могли сигнализировать правильный запрос на ожидание, когда его задание будет выполнено
Когда служба WCF создает задание на печать, она помещает запись, скажем, в ConcurrentDictionary, отображающий printJobId в не сигнализированный ManualResetEventSlim (по одному для каждого задания печати). Затем он ожидает сигнала события.
Теперь, когда задание на печать завершается, консольное приложение, в свою очередь, вызывает службу WCF, передавая свой printJobId. Эта операция относится к словарю, захватывает событие и сигнализирует о нем. Исходный вызов теперь просыпается, зная, что задание на печать завершено.
Статус задания на печать также может быть передан через эту структуру данных словаря, поэтому у вас будет что-то вроде
class PrintJob
{
public PrintJob()
{
Event = new ManualResetEventSlim();
}
public ManualResetEventSlim Event {get; private set;}
public int Status{ get; set;}
}
и словарь сопоставит printJobId с одним из них для каждого задания печати. Консольное приложение под названием операция установит статус результата задания печати