2010-04-03 2 views
2

Мне нужна надежная среда обмена сообщениями, которая работает через http/https (из-за требований безопасности клиента) и которая не использует MSMQ (поскольку некоторые клиенты будут использовать Windows XP Home). Клиенты должны иметь возможность получать сообщения, а не отправлять их.Как я могу получать сообщения через http без MSMQ

У нас уже есть очередь сообщений на сервере для каждого пользователя, и приемники были получать сообщения от подключения к HttpHandler на сервере и получить поток от

WebResponse.GetResponseStream() 

Мы держать этот поток открытым, и вытащить сообщения с помощью Stream.Read(). Это MOSTLY работает, но Stream.Read() является блокирующим вызовом, и мы не можем надежно прервать его. Мы должны быть в состоянии остановить и запустить приемник, не теряя сообщений, но старый поток часто зависает, даже после того, как мы вызываем Thread.Abort в его потоке.

Любые предложения?

ответ

3

Я бы использовал WCF. Он поддерживает стандарт WS-ReliableMessaging. Вы можете настроить его так, чтобы сообщения гарантированно прибыли и в правильном порядке.

1

О проблеме блокировки, рассмотрели ли вы рамки WCF?

Одноместный. Один поток за один раз может получить доступ к объекту службы. Это значение по умолчанию для этого свойства. Ретенант. Один поток за один раз может получить доступ к объекту службы, но поток может выйти и повторно войти. Несколько. Доступ к объекту службы может получить более одного потока за один раз.

http://msdn.microsoft.com/en-us/library/dd936243.aspx

Это позволяет много контроля, как служба ведет себя с несколькими вызовами и работает как с HTTP и HTTPS.