ABP SignalR 中心外部调用发送消息
SignalR中心
1.引用包
<PackageReference Include="Microsoft.AspNet.SignalR.Core" Version="2.4.2" />
2.在XXXHttpApiHostModule配置
public override void ConfigureServices(ServiceConfigurationContext context)
{
ConfigureSignalRServer(context);
}
private void ConfigureSignalRServer(ServiceConfigurationContext context)
{
context.Services.AddTransient<SignalRHub>();
context.Services.AddHostedServer<SignalServeice>(); //后台服务托管
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
/**
省略上面的配置 注意App.UseAuthentication()在上,app.UseAuthorization()在下
*/
var app = context.GetApplicationBuilder();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ClockHub>("/push");
});
}
3.SignalRHub.cs代码
在OnContextedAsync方法里 有Context对象 可以获取Context.ContentionId和Context.GetHttpContext().Request.QueryString.Value,来处理自己的业务
SendMessage方法 await Clients.All.ReceiveMessage(“业务参数”) ,或者其他的方法 如下:
参考连接: https://www.cnblogs.com/gouguo/p/6421890.html
4.SignalServeice.cs代码
在ExecuteAsync方法里面执行 await _hubContext.Clients.All.ReceiveMessage(“自己业务参数”),ReceiveMessage方法是下面定义的接口方法,也是客户端调用的方法.
通过使用 Hub ,可以对客户端方法进行编译时检查。 这可以防止由于使用神奇字符串而导致的问题,因为 Hub 只能提供对在接口中定义的方法的访问.
使用强类型 Hub 禁用功能 SendAsync 。 接口上定义的任何方法仍可以定义为异步方法。 事实上,其中每个方法应返回 Task 。 由于它是一个接口,因此请勿使用 async 关键字.
5.ISignalRClient.cs代码
SignalR客户端
引用包
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="3.1.2" />
ConnectionSignalRServer 方法可供外部服务调用
SignalR中心以外服务
可以调用上面 ConnectionSignalRServer 方法可供外部服务调用
结语
好几下不如烂笔头, 如有问题请大神们多指教!!!