Если вы используете WCF, MSMQ будет транспортным уровнем («связывание» для использования терминологии WCF) и на самом деле не имеет отношения к тому, что вы пытаетесь сделать здесь (вы можете выбрать между NetMsmqBinding
и *). 1002 * против NetTcpBinding
, чтобы назвать несколько). Вы можете использовать опрос или дуплексную привязку, и любая из них будет полностью действительной, хотя реализация будет кардинально другой.
Для реализации метода опроса я бы рекомендовал использовать сервис WCF на основе сеанса. Ваш сеанс будет длиться до тех пор, пока вы удерживаете прокси-сервер для своей службы WCF в своем клиенте, и вы будете продолжать использовать тот же прокси-сервер для получения обновлений по вашему запросу, пока он, наконец, не вернется с состоянием Завершено. Это кажется довольно простым для реализации как для клиента, так и для службы.
Использование дуплексной службы также будет правильным подходом, но может оказаться более сложным для реализации, если вы никогда не работали с WCF. С дуплексной службой в определении вашего ServiceContract
вы определяете CallbackContract
, который является еще одним ServiceContract
, который ваша служба использует для отправки сообщений обратно клиенту. В вашем случае, я думаю, вы хотели бы, чтобы в вашем CallbackContract
были две отдельные операции, одна для отчета о каждом результате, и отдельная, чтобы указать, что все результаты были получены, так что ваш клиент знает, что больше не ожидает результатов и закрывает канал. , Документация MSDN по дуплексным службам довольно полная, но с WCF определенно есть некоторая кривая обучения.