2014-02-17 3 views
2

У меня есть служба WCF tcp, которая предназначена для расчета определенных цен и помещает их в очередь для того, чтобы клиент мог отображать и отображать.Модель производителя/потребителя в .NET

Первое, что пришло мне в голову, это узор Producer/Consumer. Служба WCF выдает цены и помещает их в очередь. Затем клиент будет использовать любые рабочие элементы, готовые в очереди.

Глядя на Albahari's BlockingCollection example, как он объясняет производителя/образец потребителя, я не могу обойти его.

var pcQ = new PCQueue (1); 
Task task = pcQ.EnqueueTask (() => Console.WriteLine ("Easy!")); 

Если я бегу это на WCF service я поставил задачу в очередь для обработки, достаточно справедливо. Но как только задача будет завершена со стороны службы, как я могу автоматически направить цену клиенту? или это не что-то, что я мог бы сделать с сервисом WCF ?

+0

У меня нет личного опыта работы в WCF, поэтому я ограничу это комментарием/ссылкой, но посмотрите здесь: http://msdn.microsoft.com/en-us/library/ms789048.aspx –

ответ

2

Для вашей проблемы я могу думать в двух решениях:

Первого: в вашей задаче вы поставите нажимную логику, чтобы отправить результат в вашем активном соединении, но ... Вы должны построить все толкающие среды для этого.

Второе: когда вы закончите свою задачу, вы можете поместить результат в другую конечную точку для клиента, а на клиенте вы создадите логику, чтобы спросить на сервере: «Вы закончили мою задачу? ?»

0

Похоже, вы хотите использовать обратные вызовы WCF.

Here - вопрос, который может помочь вам в том, что вы хотите сделать.

Образец производителя/потребителя действителен. Обратный вызов WCF - это просто деталь реализации в этом случае.

+0

Спасибо для ссылки. К сожалению, это не совсем то, о чем я думал. В своем примере он называет 'proxy.DoSomething();', а затем сервер перезванивает. Это не push-уведомление, его обратный вызов на тяну. У меня такое ощущение, что невозможно с tcp. Мне, возможно, придется прочитать эту статью MSMQ. – Houman

+0

Клиент должен только вызвать 'Connect()' в односторонней операции. Затем сервер может просто сохранить контекст, а затем, когда какая-либо нить обрабатывает очередь, снимает новую цену, службы WCF могут принять эту цену и перезвонить в контексте клиента. Моя точка зрения заключалась в том, что 'CallbackContract' - это то, как вы можете сделать это не специально для реализации в ссылке. Да, повторные звонки не будут работать в вашем случае. Это ничем не отличается от программы чата. – MattC

Смежные вопросы