SignalR教程17-使用.Net客户端连接signalr

SignalR不但支持网页的js进行连接,同时也支持.net客户端,例如应用商店 (WinRT), WPF, Silverlight, 或者控制台程序进行连接。连接的步骤如下:

安装SignalR客户端支持

首先通过Nuget安装SignalR客户端插件Microsoft.AspNet.SignalR.Client,注意不是Microsoft.AspNet.SignalR

进行连接

假设服务器上存在下面的代码

public class ChatHub : Hub
{
        public void Send(string name, string message)
        {
            //多人聊天功能
            Clients.All.broadcastMessage(name, message);
        }
...
}
那么进行连接的代码如下:

var hubConnection = new HubConnection("http://www.songshizhao.com/");
IHubProxy chatHubProxy = hubConnection.CreateHubProxy("ChatHub");
await hubConnection.Start();
chatHubProxy.Invoke("Send", ".Net client", "hello signalr!");
首先连接地址使用的是默认的/signalr地址(只需写入主域,/signalr不需填写),在js客户端上调用连接的start方法必须先注册一个服务器可以调用的事件,而.net客户端则不用这样做,找到hub代理后可以直接连接,连接的start方法是异步的,因此加入await等待连接完成再调用服务器方法。如果不加入await就直接调用服务器方法,会报错:连接尚未完成,调用服务器方法很简单,invoke方法先是方法名,然后是参数。例子中连接完成后直接调用服务器方法,目的是测试连接是否有效。

注册服务器可执行的本地方法

假设服务器上调用一个reportscore方法

        public void SendScore(string name, int score)
        {
            //多人聊天功能
            Clients.All.ReportScore(name, score);
        }

在本地关联方式如下:

            var hubConnection = new HubConnection("http://www.songshizhao.com/");
            IHubProxy chatHubProxy = hubConnection.CreateHubProxy("ChatHub");
            chatHubProxy.On<string,int>("ReportScore", (name,score) => MessageBox.Show(name + score.ToString()+"!!!"));
            await hubConnection.Start();
上面例子中,客户端方法有两个参数类型string、int,对于复合参数(如类)的同样适用。上面是使用了lambda表达式简化了写法,为方便理解又可以有如下写法:


        public async void TestConnectSignalrAsync()
        {
            var hubConnection = new HubConnection("http://www.songshizhao.com/");
            IHubProxy chatHubProxy = hubConnection.CreateHubProxy("ChatHub");
            Action<string, int> Delegate= LocalMethod;
            chatHubProxy.On("ReportScore", Delegate);
            await hubConnection.Start();
            //chatHubProxy.Invoke("Send", ".Net client", "hello signalr!");

        }


        public void LocalMethod(string name,int score)
        {
            MessageBox.Show(name+score);
        }




作者:songshizhao 发表于:2017-11-19T02:02:16 访问量:662