Связь между двумя отдельными приложениями - PullRequest
2 голосов
/ 12 августа 2009

Я разработал службу Windows, которая считывает данные из базы данных, база данных заполняется с помощью приложения ASP.net MVC.

У меня есть требование, чтобы служба перезагружала данные в памяти, отправляя запрос на выборку в базу данных. Эта перезагрузка будет инициирована веб-приложением. Я подумал о нескольких способах сделать это, например. Remoting, MSMQ или просто заставляя службу прослушивать сокет для команды перезагрузки.

Я просто ищу предложения относительно того, что было бы лучшим подходом к этому.

Ответы [ 3 ]

2 голосов
/ 12 августа 2009

Насколько надежным должно быть уведомление? Если уведомление потеряно (скажем, канал связи имеет сбой в маршрутизаторе и сбрасывает сокет), наступит ли конец света или все будет как обычно? Если служба не работает, нужно ли ставить в очередь уведомления с веб-сайта, когда она запускается, или их можно безопасно удалить?

Чем надежнее он вам нужен, тем больше вам нужно идти к решению с очередями (MSMQ). Если надежность не является проблемой, вы можете выбрать из множества решений, не связанных с очередями (удаленное взаимодействие, TCP, широковещание UDP, HTTP-вызов и т. Д.)

Тебя вообще волнует безопасность? Ты боишься, что злоумышленник пингует тебя, чтобы ты «освежился» до смерти, вызвав, по крайней мере, DoS, если не хуже? Вы хотите аутентифицировать веб-сайт, совершающий вызов «обновить»? Вам нужна конфиденциальность уведомлений (например, шифрование)? UDP сложнее защитить (без сеанса).

Должно ли решение обеспечивать простое развертывание, настройку и управление на месте (т. Е. Является автономным, упакованным продуктом) или является одноразовым развертыванием, которое может быть исправлено «точно в срок», если что-то изменится

Без знания деталей всех этих факторов трудно сказать «используй Х». По крайней мере одно можно сказать наверняка: удаленное взаимодействие уже устарело.

Я бы порекомендовал использовать WCF из-за простоты изменения привязок на лету, чтобы вы могли тестировать различные конфигурации (TCP, net pipe, http) без любого изменения кода.

Кстати, вы рассматривали возможность использования Уведомления о запросах для обнаружения изменений данных вместо активных уведомлений с веб-сайта? Я считаю, что это выстрел в темноте, но эквивалентная поддержка активного кэша существует во многих базах данных.

1 голос
/ 12 августа 2009

Просто разместите службу WCF внутри службы Windows. Вы можете использовать netTcpBinding для привязки, которая будет использовать двоичный файл поверх TCP / IP. Это будет намного проще, чем сокеты, но проще в разработке и обслуживании.

0 голосов
/ 12 августа 2009

Я бы использовал стандартные сокеты TCP - это переживет все виды перемещения компонентов и сведет к минимуму проблемы с конфигурацией ИМХО.

...