Связь клиент-сервер .NET по ненадежной сети

#wcf #web-services #msmq

#wcf #веб-сервисы #msmq

Вопрос:

Я работаю над новым a RIA, который, скорее всего, будет разработан с использованием WPF. Это приложение будет взаимодействовать с веб-службой по ненадежной сети (например, 3G).

Как мне добиться надежной связи в таких сценариях, как —

  1. Операция «Создать» была успешной на сервере / веб-сервисе (скажем, была создана новая запись), но ответ, содержащий идентификатор записи, не смог вернуть его в клиентское приложение.

  2. Процесс оплаты, который должен быть атомарной операцией

Является ли MSMQ с WCF лучшим вариантом здесь или существуют известные стратегии и шаблоны для достижения надежности в ненадежных сетях (например, 3G) без использования фреймворков обмена сообщениями?

Ответ №1:

Можно использовать MSMQ по протоколу HTTP, но вам будет намного лучше, если вы будете использовать платформу массового обслуживания RabbitMQ с открытым исходным кодом. Она также включает привязку WCF, которую вы должны иметь возможность использовать для своего сценария. WCF с MSMQ отлично подходит для работы внутри брандмауэра, но он не был разработан специально для Интернета.

Комментарии:

1. Что конкретно делает RabbitMQ лучшим выбором, чем MSMQ в этом сценарии?

2. Короткий ответ заключается в том, что RabbitMQ был разработан для использования HTTP в качестве одного из своих собственных транспортных средств, а MSMQ был разработан для использования проприетарного двоичного транспорта. Позднее Microsoft доработала MSMQ для работы по протоколу HTTP, но эта функция не поддерживается готовой привязкой WCF (привязка netMsmqBinding не работает по протоколу HTTP). RabbitMQ предоставляет привязку WCF, которая позволяет вам отправлять сообщения по HTTP. RabbitMQ поддерживается даже облачными сервисами Amazon EC2, поэтому вы знаете, что он работает через Интернет. Я думаю, это был не слишком короткий ответ … 🙂

3. Обновление к моему комментарию Собственным транспортом RabbitMQ является TCP, и в настоящее время разрабатывается экспериментальный транспорт на основе HTTP. Извините за путаницу.

4. Спасибо за подробности. Можно ли использовать платформу без обмена сообщениями?

5. Платформа без обмена сообщениями в основном представляла бы собой обычную службу WCF с включенной привязкой wsHttpBinding и надежной передачей сообщений. Этот режим является «надежным», но он не обеспечивает гарантированную доставку сообщений, даже если служба отключена. С помощью RabbitMQ и MSMQ передача сообщений и их обработка осуществляются на транспортном уровне.