我有一个使用用户和连接之间的内存中关联的集线器。此集线器有两个ConnectionMapping实例 - 一个用于聊天连接,一个用于Navbar连接。目标是:
这些工作很独立,但他们一起得到了一点小故障。构建我的应用程序的方式是使用包含以下内容的shell(在layoutVM knockout viewModel中):
$.connection.hub.qs = {
"isChat": false,
"username": self.emailAddress(),
"baseUrl": self.baseUrl()
};
// define client methods
$.connection.hub.start().done(function () {
// nothing
});
然后,当在shell中加载聊天时,这是定义的(在chatVm knockout viewmodel中):
$.connection.hub.qs = {
"isChat": true,
"username": self.currentUsername(),
"baseUrl": self.baseUrl()
};
$.connection.hub.start().done(function () {
self.chatIsReady(true);
});
我遇到的问题是,当从Chat中调用signalR时,查询字符串有时是不正确的 - 似乎在LayoutVm中定义的查询字符串覆盖了ChatVm中的查询字符串。我该怎么做才能解决这个问题?
答案 0 :(得分:1)
你正在做什么对我没有意义 - 你应该只启动一次连接(所有集线器将使用相同的连接,即使它可以正常工作,使用多个连接也没有优势);建立连接后,您的客户端应通过集线器方法与服务器进行交互。
因此,当用户加入聊天时,不应尝试启动另一个连接,而应该执行以下操作:
chatHub.server.joinChat(userName);
然后在[{1}}方法中执行OnConnected
方法时执行的任何操作。将数据传递到集线器的主要方法应该是hub方法的参数,而不是查询字符串。
答案 1 :(得分:0)
看起来您使用相同的连接来执行这两项操作 - 所以是的,查询字符串将被覆盖。