2014-01-12 3 views
0

У меня есть один концентратор, использующий связь между пользователями и соединениями в памяти. Этот концентратор имеет два экземпляра ConnectionMapping - один для соединений чата, один для соединений Navbar. Цель:SignalR - Определение QueryStrings из двух разных мест в приложении?

  • Когда пользователь находится на любой странице, кроме чата, они будут иметь одно соединения signalR открытого, хранящиеся в navbarConnections
  • Когда пользователь в чате, они будут иметь два signalR соединения открыты - один в navbarConnections, один в chatConnections

Эти работы отлично работают независимо друг от друга, но вместе они получают немного глюки. Путь мое приложение структурировано является оболочкой, которая содержит следующие элементы (в layoutVM нокаута ViewModel):

$.connection.hub.qs = { 
     "isChat": false, 
     "username": self.emailAddress(), 
     "baseUrl": self.baseUrl() 
    }; 
// define client methods 
$.connection.hub.start().done(function() { 
    // nothing 
}); 

А потом, когда чат загружается внутри оболочки, это определяется (в chatVm нокаута ViewModel) :

$.connection.hub.qs = { 
    "isChat": true, 
    "username": self.currentUsername(), 
    "baseUrl": self.baseUrl() 
}; 
$.connection.hub.start().done(function() { 
    self.chatIsReady(true); 
}); 

проблема, которую я встретив в том, что строки запроса иногда неправильно, когда вызовы к signalR сделаны из чата - это, кажется, строки запроса, определенных в LayoutVm является переопределяют тех, в ChatVm. Что я могу сделать, чтобы решить эту проблему?

ответ

1

То, что вы делаете, для меня не имеет смысла - вы должны только начать соединение один раз (все концентраторы будут использовать одно и то же соединение, и даже если это будет работать без проблем, нет преимущества при использовании нескольких соединений) ; как только ваше соединение установлено, ваш клиент должен взаимодействовать с сервером с помощью хаб-методов.

Таким образом, вместо того, чтобы пытаться начать другое соединение, когда пользователь присоединяется к чату, вы должны сделать что-то вроде этого:

chatHub.server.joinChat(userName); 

Тогда делать все, что вы делаете в вашем OnConnected методе, когда isChat == true там вместо этого. Основным методом передачи данных в концентратор должны быть параметры ваших методов хаба, а не строка запроса.

+0

Спасибо Ларс. Я мог бы действительно использовать некоторый обзор кода ... вы доступны для ~ 1 часа платной консультации? Ваша рекомендация поднимает некоторые проблемы, которые я не уверен, как обращаться, мне бы хотелось показать вам, с чем я работаю. – SB2055

+0

вы можете выслать мне электронное письмо (см. Биографию), тогда мы сможем увидеть, можем ли мы это обработать –

+0

Портировано :) Спасибо Lars – SB2055

0

Похоже, что вы используете одно и то же соединение для обоим - так что да, строка запроса будет перезаписана.

+0

Что вы порекомендуете как способ использовать разные запросы для двух разных соединений с одним и тем же узлом? – SB2055

+0

Посмотрев на свой код, кажется, что проблема заключается в том, что у вас есть строка соединения, определенная в макете, а также виды чата. Разве это не должно быть так или иначе? – Gjohn