Внедрить темы/подписку на служебную шину Windows Azure в MVC 3?

Вот сценарий: мы реализуем приложение, которое позволяет пользователям «общаться» с конечной точкой в ​​помещении. Мы проводим некоторые исследования, и темы по служебной шине Windows Azure кажутся хорошим выбором, поскольку они помогают нам создавать двустороннюю связь и помогают нам решать проблемы с брандмауэрами и устройствами NAT.
Однако, поскольку пользователь взаимодействует с компьютерами через веб-приложение без сохранения состояния (в данном случае это MVC 3), повторное создание TopicClient при каждом запросе недопустимо.
Поскольку у каждого пользователя есть собственная конечная точка, совместное использование одного TopicClient, как кто-то предложил, также не работает.
Другой подход заключается в использовании сеанса для сохранения TopicClient для каждого пользователя, но использование сеанса, по-видимому, не является хорошим выбором для веб-приложений без сохранения состояния и размещенных в веб-приложении Windows Azure.

Любая помощь будет принята с благодарностью.


person Patrick Dinh    schedule 28.08.2012    source источник
comment
Я немного не понимаю, что вы описываете, ваш первый сценарий говорит о ретрансляции служебной шины, размещении локальных служб WCF, предоставляемых через конечную точку SB, которые можно использовать от клиентов через SB. Ваша вторая часть говорит о темах/подписках, в этом случае вы должны создать BrokerMessage на своем клиенте, а затем подписка (модель Pub/Sub) прочитать это сообщение (в зависимости от количества подписчиков) из надежной очереди служебной шины, может вы объясните, какой сценарий вы хотите использовать?   -  person user728584    schedule 28.08.2012
comment
Извините за путаницу. Первый сценарий - это именно то, что я хочу (я просто запутался с темами/подписками). В настоящее время клиент должен создаваться и подключаться к SB каждый раз, когда делается запрос к SB, что медленно. Поэтому я хотел бы создать экземпляр клиента SB, когда пользователь вошел в систему, а затем повторно использовать экземпляр для всего сеанса. Однако некоторые люди считают, что сеанс является хорошей практикой для службы Windows Azure. Пожалуйста посоветуй.   -  person Patrick Dinh    schedule 28.08.2012


Ответы (1)


Фактическое соединение между клиентом и службой существует на уровне MessagingFactory, все объекты TopicClient, созданные из этой фабрики, будут использовать одно и то же соединение. Таким образом, вы можете просто кэшировать MessagingFactory и/или столько TopicClient, сколько вам нужно. Кроме того, эти объекты потокобезопасны, поэтому могут совместно использоваться и использоваться разными потребителями одновременно.

person Abhishek Lal    schedule 30.08.2012
comment
Спасибо, Абхишек, за ответ. Однако приложение, которое я реализую, является веб-приложением, там для кеширования объектов тоже большая проблема. Есть ли у вас какие-либо предложения, как мне кэшировать эти объекты? Спасибо - person Patrick Dinh; 30.08.2012