我希望能够在SignalR Hub收到客户端的消息并完成处理后通知我的Web API控制器。我的第一个想法是提出一个事件,并在web api控制器上有一个事件处理程序来响应。这是可行的,或者如果没有,除了民意测验之外我还有什么其他选择吗?
答案 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();
}
}
我认为这样可以构建更多可重用且可读的代码。