从SignalR Hub提升事件

时间:2017-08-17 18:10:21

标签: c# asp.net-web-api signalr signalr-hub

我希望能够在SignalR Hub收到客户端的消息并完成处理后通知我的Web API控制器。我的第一个想法是提出一个事件,并在web api控制器上有一个事件处理程序来响应。这是可行的,或者如果没有,除了民意测验之外我还有什么其他选择吗?

2 个答案:

答案 0 :(得分:0)

您可以使用Service Bus和类型的工作人员从SignalR(RabbitMQ,MSMQ或类似的东西)发送通知。您可以将该调度程序与Web API逻辑分开放置并从中调用API,或者您可以在其中实现整个逻辑,从而避免API交互。

在API级别放置事件处理程序是一个坏主意,因为这种方法会混淆控制器的逻辑。

答案 1 :(得分:0)

如果我理解正确,听起来你需要一个可重复使用的辅助类/方法,它将使用控制器动作和信号服务器方法。

助手等级

public static class TestHelper
{
    public TestHelper()
    {
    }

    public static void DoSomething()
    {
        //Consumed by multiple places
    }
}

控制器

public class UserController : ApiController
{

    public IHttpActionResult Post(User user)
    {
        //Controller logic
        TestHelper.DoSomething();

    }
}

服务器中心

public class MyHub : Hub
{
    //Consumed by signlar clients
    public static void ServerHubMethod()
    {
        IHubContext context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();

        //Other logic 

        TestHelper.DoSomething();

    }
}

我认为这样可以构建更多可重用且可读的代码。