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

时间:2015-12-22 13:48:09

标签: signalr signalr-hub

我需要在服务器上启动一个可能运行几分钟的进程,因此我考虑公开以下hub方法: -

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

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

此外,长时间运行的进程将收集需要定期广播回客户端的数据,所以我想知道如何使用事件 - 这样的事情: -

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);
}

这是一个可接受的解决方案还是有更好的解决方案?方式是什么?

1 个答案:

答案 0 :(得分:0)

您不需要使用SignalR来开始工作,您可以使用现有的框架/设计/ API应用程序,并仅将pubR用于pub子部分。

我为我当前的客户项目做了这个,用户启动了一项工作,并且使用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
   }
}