Signalr 使用
以WPF 为服务端
WPF 客户端 ASP.NET 客户端
新建WPF应用程序,通过NuGet 添加相关的 引用库,
1:Microsoft.AspNet.SignalR
2:Microsoft.AspNet.SignalR.Client
3:Microsoft.Owin.Host.HttpListener
4:Microsoft.Owin.Cors
5:Microsoft.Owin.Hosting
新建一个类 继承Microsoft.AspNet.SignalR.Hub,可以重新其中的几个方法
/// <summary> /// 客户端连接服务器成功后调用 /// </summary> /// <returns></returns> public override Task OnConnected() { var rs = Context.QueryString["rs"]; LogHelper.Logger.Info($"【{Context.ConnectionId}】连接成功"); return base.OnConnected(); } /// <summary> /// 客户端断开连接后调用 /// </summary> /// <param name="stopCalled"></param> /// <returns></returns> public override Task OnDisconnected(bool stopCalled) { LogHelper.Logger.Info($"【{Context.ConnectionId}】断开连接"); return base.OnDisconnected(stopCalled); }
在服务端可自定义给客户端订阅的方法,如:
await Clients.All.Say($"【系统消息】 {message} {DateTime.Now:HH:mm:ss}");
其中的Say 可以更改为任何单词,客户端通过代理订阅时保持一致即可。
public async Task AddMessage(string name, string message) { await Clients.All.Say($"【{name}】 :{message} {DateTime.Now:HH:mm:ss}"); }
2:新建类 Startup ,实现Configuration方法,在改方法中可以增加跨域配置。使用微软提供的 Microsoft.Owin.Cors 解决跨域问题。
WPF服务端,ASP.NET 客户端就会有跨域的问题存在。
服务的启动:
第一步:构建服务端的 监听地址。
第二步创建 IDisposable
public IDisposable SignalR { get; set; } SignalR = WebApp.Start(ServerAddress);
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
WPF客户端:
第一步 创建Hub连接对象
private static HubConnection Connection; Connection = new HubConnection(ServerAddress); //ServerAddress 监听的服务地址
第二步:创建代理
private static IHubProxy HubProxy; HubProxy = Connection.CreateHubProxy("DataHub");// DataHub 为前面创建继承了 Hub的类。若业务复杂可创建多个Hub 类,然后创建多个代理 针对不同业务。
第三步:创建代理监听方法
HubProxy.On<string>("say", (message) => Dispatcher.Invoke(() => { ShowMessage(message); }));
HubProxy代理监听 DataHub类中的定义为 say方法的内容。
第四步:
启动连接。
await Connection.Start();
当服务端通过 Say 方法发送消息时候,客户端就可以收到消息了。
客户端发送消息方法:
HubProxy.Invoke("AddMessage", "罗小黑","大家好");
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ASP.NET客户端,asp.net 中有好几种方式,记录其中一种
$(function () { var conn = $.hubConnection("http://localhost:8889", {rs:"123"}); var proxy = conn.createHubProxy("DataHub"); proxy.on("say", function(msg) { $("#divServerMsg").append(msg+"<br/>"); }); conn.start().done(function(data) { $("#divState").append("连接成功<br/>"); proxy.invoke("AddMessage", "佩奇", "大家好我是佩奇"); }).fail(function(e) { $("#divState").append("连接失败:" + e + "<br/>"); }); });
步骤一样,创建 HubConnection,创建代理对象,监听服务端定义的消息发送方法,启动连接。
浙公网安备 33010602011771号