SignalR - 从服务器端业务逻辑访问客户端

SignalR - access clients from server-side business logic

我需要在服务器上启动一个可能 运行 几分钟的进程,所以我想公开以下集线器方法:-

public async Task Start()
{
     await Task.Run(() => _myService.Start());
}

还有一个 Stop() 方法允许客户端停止 运行ning 进程,可能是通过取消令牌。如果已经 运行ning、错误处理等,我还省略了阻止它启动的代码

此外,long-运行ning 进程将收集需要定期广播回客户端的数据,所以我想知道是否使用事件 - 像这样:-

public async Task Start()
{
     _myService.AfterDataCollected += AfterDataCollectedHandler;
     await Task.Run(() => _myService.Start());
     _myService.AfterDataCollected -= AfterDataCollectedHandler;
}

private void AfterDataCollectedHandler(object sender, MyDataEventArgs e)
{
    Clients.All.SendData(e.Data);
}

这是可以接受的解决方案还是有 "better" 方法?

您不需要使用 SignalR 来开始工作,您可以为此使用已经存在的框架/设计/API 的应用程序,并且仅将 SignalR 用于发布子部分。

我为我当前的客户项目做了这个,一个用户开始工作,属于该用户的所有选项卡都使用 signalr 更新,我使用一个名为 SignalR.EventAggregatorProxy 的 out sun 库从 SignalR 中抽象域。免责声明:我是上述图书馆的作者

http://andersmalmgren.com/2014/05/27/client-server-event-aggregation-with-signalr/

编辑:使用 .NET 客户端,您的代码将如下所示

public class MyViewModel : IHandle<WorkProgress>
{
   public MyViewModel(IEventAggregator eventAggregator) 
   {
      eventAggregator.Subscribe(this);
   }
   public void Handle(WorkProgress message)
   {
      //Act on work progress
   }
}