signalR全局集线器在视图中启动连接并在局部视图MVC中使用它

时间:2016-10-12 21:41:20

标签: asp.net-mvc signalr

我已在视图中启动与集线器的连接,并将其设置为全局,以便在局部视图中使用某些连接。 但在局部视图中,该方法是从集线器连接并发送消息,但在其他客户端没有收到。 当我厌倦了全局变量并在局部视图中再次启动集线器连接时,消息也已到达。

全局启动连接变量使用中出了什么问题?

在中心我有:

    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();
    }

0 个答案:

没有答案