Редактировать: добавлен материал до конца.
Есть так много вариантов в зависимости от всех видов вещей.Как правило, вам нужен какой-то API конечной точки, а затем что-то в середине.Середина может принимать все виды форм, концентратор, многоадресную рассылку, постоянную очередь, транзитную, гарантированную доставку, публикацию / подписку.и т.д.
Для бита посередине Оплачивается: Tibco MQSeries (IBM) Microsoft MSMQ (входит в состав MS OS) Бесплатно Прокрутите свои собственные (на самом деле довольно легко даже для высокой пропускной способности), используя Remoting / WCF / ASP.Net / Web Service. Apache MQ и несколько других сред с открытым исходным кодом.Слишком много для перечисления. Для конечной точки, это скорее зависит от того, что находится посередине, но как только вы установили связь и запустили ее, это всего лишь случай обернуть ее и опубликовать сообщения, которые будут использованычто бы ни слушал / подписывался. Это все довольно весело.Если вы хотите подход.Сделайте это:
1) Определите пару интерфейсов C #, скажем ISubscribe, IPublish и IMessage.
2) Добавить методы / события.ISubscribe нуждается в новом событии сообщения и некотором способе подписаться на определенный тип сообщения.IPublish нужен способ отправки сообщений определенного типа.IMessage - это сообщение. 3) ... 4) прибыль. Хорошо, шаг 3 не очень понятен, но здесь вы делаетеРеализовать реализацию, используя то, что вы выбрали выше.Попробуйте Microsoft MSMQ, он встроен в Windows и легко доступен из c #.После того, как вы запустите это, вы можете подумать об альтернативах. Надеюсь, что это поможет. Ян
Редактировать: несколько слегка выделенных вариантов.
ЗдесьЕсть несколько вариантов.Все они имеют свои сильные и слабые стороны.
Поэтому я буду придерживаться IPublish, ISubscribe и IMessage.
На IPublish я добавлю один метод:
void SendMessage (сообщение IMessage);
На ISubscribe я добавлю один метод и одно событие
event EventHandler NewMessage;void Subscribe (string channel);
и IMessage будет иметь: string Channel {get;} string Body {get;}
Идея в том, что вы просто подписываетесь на канал, и мыВы используете строку для названия канала, потому что это легко.Сообщение содержит канал, для которого это сообщение, и строку для тела (опять же, потому что это легко, я здесь не разбираюсь в сериализации, давайте просто заставим сообщения двигаться).Поэтому, когда вы отправляете сообщение, предполагается, что кто-то подписывается на канал, которому вы отправили сообщение.
Итак, помня об этом, давайте поиграем с несколькими вариантами:
1) база данных.Опубликовать пишет сообщение в базу данных.Подписчики опрашивают таблицу на наличие новых строк, адресованных каналу, на который они подписаны.2) MSMQ Существует несколько способов использования MSMQ, но давайте просто скажем, что подписка создает канал для каждого клиента, а публикация помещает сообщение в каждую из очередей клиента.Затем подписчик решает действовать, если он адресован ему.(Посмотрите на CodeProject, как по-настоящему использовать MSMQ). 3) Реализация SMTP (да, электронная почта: D). Subscribe добавляет себя в группу Exchange, публикация отправляет электронную почту всем пользователям в группе.Хорошо, это немного глупый пример, но вы поняли идею.4) Согласованность.Coherence - это база данных в памяти, доступная от Oracle.Он поддерживает практически все, что вы хотите.Публикация записывает новое сообщение в кеш Coherence, подписчики подписываются на события, вызванные кешем.5) Служба Windows, в которой размещается веб-служба, предоставляемая WCF.Microsoft фактически предоставляет образец WCF, который делает простой чат-сервер / клиент.Это почти то, что вы хотите.
Я надеюсь, что это помогло.Это не конкретные, просто идеи.Тем не менее, вы заметите, что если вы создадите интерфейсы выше, любой из этих пяти вариантов может быть закодирован, чтобы сидеть за ними (с различными усилиями).