如何使用signalr从客户端到服务器和服务器响应客户端

时间:2017-02-28 08:17:29

标签: asp.net signalr signalr-hub signalr.client

我是信号员的新手, 我已经浏览了一些教程,在那里我看到了聊天室应用程序,其中服务器已经在控制台应用程序和客户端上配置了javascript,当你打开可以在它们之间聊天的多个浏览器实例时。

我的问题是如何在服务器之间聊天而不是在客户端之间聊天。 假设我在winform上构建一个服务器。在winform上我有datagridview,它显示连接到服务器的客户端数量,我想向客户端#2发送消息,然后客户端#2也将回复我,我将在winform的文本框中显示。

我的客户代码:

 <script type="text/javascript">
        $(function () {

        $.connection.hub.url = "http://localhost:8080/signalr";


        var chat = $.connection.myHub;

        // Create a function that the hub can call to broadcast messages.
        chat.client.addMessage = function (name, message) {

            var encodedName = $('<div />').text(name).html();
            var encodedMsg = $('<div />').text(message).html();

            $('#discussion').append('<li><strong>' + encodedName
                + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
        };

        $('#displayname').val(prompt('Enter your name:', ''));

        $('#message').focus();

        $.connection.hub.start().done(function () {
            $('#sendmessage').click(function () {

                chat.server.send($('#displayname').val(), $('#message').val());

                $('#message').val('').focus();
            });
        });
    });
</script>

Myhub.cs:

public class MyHub : Hub
{

    public void Send(string name, string message)
    {
        Clients.All.addMessage(name, message);
    }

    public void getname(string name)
    {


    }

    public override Task OnConnected()
    {
        UserHandler.ConnectedIds.Add(Context.ConnectionId); 
        string RemoteIpAddress = Context.Request.GetRemoteIpAddress();
        return base.OnConnected();
    }

    public override Task OnDisconnected(bool stopCalled)
    {
        UserHandler.ConnectedIds.Remove(Context.ConnectionId);
        return base.OnDisconnected(stopCalled);
    }


    public void acknowledgment(string ack)
    {
        Clients.Caller.acknowledgment(ack);
    }       
}

1 个答案:

答案 0 :(得分:1)

代码似乎不错。尝试在startup.cs中添加以下代码

    app.Map("/signalr", map =>
    {
        map.UseCors(CorsOptions.AllowAll);
        var hubConfiguration = new HubConfiguration
        {
            EnableJSONP = true
        };
        map.RunSignalR(hubConfiguration);
    });