AddMessagePackProtocol() 是使用快速和精简的二进制序列化格式进行传输。 在 connection.Closed 加入连接关闭事件,关闭后自动重新连接。 InitOnMethod 初始化服务方回调的监听事件
private void InitOnMethod() { connection.On<string>("callback",(msg)=> { Console.WriteLine($"------------{msg}----------"); }); }
connection.StartAsync() 启动连接。
添加两个请求服务端的方法
一个有返回值,一个无返回值。
public async Task<dynamic> RequestServer1() { var result = await connection.InvokeAsync<dynamic>("Excute", "SignalRServer1.Services.IMyService", "SayHello",new object[] { }); return result; } public async Task RequestWithoutResult() { await connection.SendAsync("ExcuteWithoutResult", "SignalRServer1.Services.IMyService", "Sleep", new object[] { }); }
需要返回值的我们使用 connection.InvokeAsync() 方法
不需要返回值的我们使用 connection.SendAsync() 方法
将SignalRClient以单例形式注册依赖注入
在 Startup.cs 中的 ConfigureServices 方法中添加 services.AddSingleton<SignalRClient>() 。
使用SignalRClient请求服务
在控制器中将SignalRClient注入
private readonly SignalRClient _signalRClient; public ValuesController(SignalRClient signalRClient) { _signalRClient = signalRClient; } // GET api/values [HttpGet] public async Task<ActionResult<IEnumerable<string>>> Get() { var str = await _signalRClient.RequestServer1().ConfigureAwait(false); await _signalRClient.RequestWithoutResult().ConfigureAwait(false); return new string[] { str }; }
在请求中同时调用一个有返回值,一个无返回值的方法。无返回值的方法在任务执行完后执行一个回调。
启动服务
可以看到服务调用已经成功 task done是我们无返回值调用那个方法中接收到回调时的输出.
connection.On<string>("callback",(msg)=> { Console.WriteLine($"------------{msg}----------"); });
以上就是我简单做的一个DEMO。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章: