我已在视图中启动与集线器的连接,并将其设置为全局,以便在局部视图中使用某些连接。 但在局部视图中,该方法是从集线器连接并发送消息,但在其他客户端没有收到。 当我厌倦了全局变量并在局部视图中再次启动集线器连接时,消息也已到达。
全局启动连接变量使用中出了什么问题?
在中心我有:
public void SendQuestionario(int id, string message, string userNameTo)
{
UserConnection connect = usersConnect.FirstOrDefault(x => x.ConnectionID == userNameTo);
if (connect != null)
{
Clients.User(connect.UserName).addNewMessageToPageQuestionario(id, message);
}
在视图中:
$(function () {
window.chat = $.connection.chatHub;
chat.client.notificacaoIAD = function (message) {
alert(message);
};
chat.client.updateStatus = function (message) {
alert(message);
if (message == "Online") {
$("#status").text("Online")
}
else
$("#status").text("Offline")
};
window.hubReady=$.connection.hub.start().done(function () {
alert("Connection succeeded");
//verificar o status do user para a ligação
chat.server.verificaStatus(userFrom, userTo);
}).fail(function () {
alert("Connection failed");
});
});
在局部视图中:
$(function(){
//var chat = $.connection.chatHub;
window.chat.client.addNewMessageToPageQuestionario = function (id, message) {
alert(message);
$("#responder_" + id).append(htmlEncode(message));
//$("#content_" + id).html(message);
};
window.hubReady.done(function () {
$(".sendmessage").click(function () {
var id = $(this).attr('id');
alert($("#resposta_" + id).val());
window.chat.server.sendQuestionario(id, ($("#resposta_" + id).val()), nome);
});
}).fail(function () {
alert("erro na conexão");
});
});
public class ChatHub : Hub
{
public static List<UserConnection> usersConnect = new List<UserConnection>();
public void SendOnline(string id, string mensagem)
{
var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
context.Clients.All.updateStatus(id, mensagem);
}
public void SendQuestionario(int id, string message, string userNameTo)
{
UserConnection connect = usersConnect.FirstOrDefault(x => x.ConnectionID == userNameTo);
if (connect != null)
{
Clients.User(connect.UserName).addNewMessageToPageQuestionario(id, message);
}
}
public override Task OnConnected()
{
string name = Context.User.Identity.Name;
string id = Context.User.Identity.GetUserId();
if (!usersConnect.Exists(x => x.UserName == name))
{
usersConnect.Add(new UserConnection { ConnectionID = id, UserName = name });
}
return base.OnConnected();
}