WCF комуникация с хоста

Пиша приложение, което има една услуга на Windows, която трябва да комуникира с друга услуга на Windows. Услугата "target" ще приеме заявка от услугата "source" и ще изпълни задача. Услугата "източник" няма да чака отговор, така че заявката трябва да се върне възможно най-скоро.

Планът беше "целевата" услуга да хоства WCF услуга, с която "източникът" да комуникира. След като заявката бъде получена, трябва да комуникирам с хост услугата Windows, за да й кажа да свърши работата. Мислех си, че "целевата" WCF услуга ще постави съобщение на MSMQ, което "целевата" услуга на Windows ще наблюдава. След като това бъде направено, WCF услугата може да се върне обратно към повикващия.

Това звучи ли като разумен подход за разрешаване на WCF услуга да каже на хостинг услуга на Windows да изпълни задача?

Поздрави

Майкъл


person Michael    schedule 17.03.2011    source източник


Отговори (3)


Позволете ми да не се съглася. Базирайки се просто на това, което описахте, използването на MSMQ за комуникация между "целевата" WCF услуга и хостинг услугата Windows изглежда изключително тежка за мен. MSMQ позволява различни процеси да комуникират по безопасен начин. Във вашия случай услугата WCF се хоства в същия процес като услугата Windows. По този начин, докато MSMQ като механизъм за комуникация между двете работи, не е необходимо.

Освен това използването на MSMQ обвързване между "целевата" WCF услуга и "изходната" WCF услуга има смисъл ако двете WCF услуги не винаги се изпълняват едновременно. Например, ако "целевата" WCF услуга не винаги се изпълнява, обвързването на MSMQ ще позволи на "изходната" WCF услуга все още да изпраща задачи. Тези задачи ще се съхраняват в MSMQ, за да бъдат извлечени, когато "целевата" WCF услуга започне да работи. Изглежда обаче, че и двете услуги ще работят, така че не виждам нужда от MSMQ свързване.

За избор на WCF свързвания вижте тази публикация на SO.

C# - WCF - комуникация между процеси

Нека се спра на още нещо. Когато вашата „целева“ WCF услуга получи заявка за задача от „източника“, простото предаване на задачата обратно на услугата на Windows няма да направи нищо само по себе си. Услугата на Windows работи, да, но няма нишка за изпълнение, която можете да използвате. Въпросът е, че за да направите обработката на задачи асинхронна, ще трябва да стартирате нишка, за да управлявате задачите. Бих предложил да използвате ThreadPool, за да направите това.

Надявам се това да помогне.

person Matt Davis    schedule 17.03.2011

Да, това е добър подход. MSMQ е перфектен за тази задача - услугата източник може да изпрати заявка до целта, като постави съобщение на опашката чрез WCF. MSMQ е добър винаги, когато искате да изпратите заявка до услуга за асинхронна обработка, особено ако не е необходимо да получите отговор обратно. Ако имате нужда от отговор, можете да настроите източника и като WCF услуга и целта може да изпрати обратно съобщение, ако е необходимо. Има няколко различни начина да постигнете това с MSMQ свързването.

person Andy White    schedule 17.03.2011
comment
Така че бихте ли накарали WCF услугата да използва MSMQ обвързване и тя да изпълнява действителната задача, вместо, да речем, да имате TcpBinding WCF услуга, която поставя съобщение на опашка и Win Service да наблюдава опашката, след което да върши работата? - person Michael; 17.03.2011
comment
Можете да го направите без TcpBinding и всичко, от което се нуждаете, са вашите изходни и целеви услуги на Windows. Просто бих използвал MSMQ обвързване както от страната на клиента (източник), така и от страна на сървъра (цель). Целта може да бъде услуга на Windows, която хоства хост на WCF услуга с MSMQ крайна точка. Източникът ще има WCF MSMQ клиентско обвързване, което се свързва с целевата крайна точка. Източникът изпраща съобщение чрез WCF MSMQ и целта автоматично ще вземе съобщението, в който момент можете да го обработите, но трябва да го направите директно в целевата услуга. - person Andy White; 17.03.2011

@Мат

Благодаря за вашата помощ.

След като помислите малко повече и вижте как вашият подход ще направи нещата по-лесни за настройка и използване. Трябва да накарам услугата "target" да изпрати резултата от работата обратно към "източника", така че вероятно ще използвам nettcp и обратно извикване. След това планът е да настроите нова нишка, да свършите работата и след като тя приключи, да изпратите отговор обратно към "източника".

@Анди

Благодаря ви за помощта.

Разгледах msmq, но тъй като вероятно ще трябва да настроя нова нишка, след като получа съобщението, може и да оставя уеб услугата да свърши работата.

person Michael    schedule 17.03.2011