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,创建代理对象,监听服务端定义的消息发送方法,启动连接。

posted @ 2020-09-02 15:43  天行健君子自强不息  阅读(311)  评论(0)    收藏  举报