我可以同时包含SignalR和RESTful API吗?

mbe*_*ley 112 asp.net rest web-applications signalr asp.net-web-api

我有一个使用ASP.NET开发的单页Web应用程序.我最近使用SignalR库将许多Web方法转换为基于推送的方法.这真的大大增加了页面,减少了页面上的大量服务器调用.

与此同时,我也一直在寻找RESTful ASP.NET WebAPI的一些服务器端方法,真正的美妙之处在于它允许在我开发的同时为外部应用程序创建API.核心应用程序(这对我正在做的事情很重要).

然而,在看了几篇文章和 两个问题后,似乎推送和WebAPI方法似乎是两种完全不同的客户端 - 服务器通信范例.我敢肯定我可以创建各种方法,可以通过任何协议访问,但我不确定是否有这个陷阱或如果这被认为是草率 - 也许有一个更优雅的方式来实现我的目标对于.

在某种情况下,我希望RESTful WebAPI通过SignalR集线器广播事件......相反(SignalR需要访问WebAPI)似乎不太可能,但我认为仍然可能.

有没有人这样做过?有没有人对如何进行有任何建议或提示?这里最优雅的方式是什么?

dav*_*d.s 84

看看这篇博客文章中的视频.它解释了如何将WebAPI与SignalR结合使用.

本质上,Web API + SignalR集成包含在这个类中:

public abstract class ApiControllerWithHub<THub> : ApiController
    where THub : IHub
{
    Lazy<IHubContext> hub = new Lazy<IHubContext>(
        () => GlobalHost.ConnectionManager.GetHubContext<THub>()
    );

    protected IHubContext Hub
    {
        get { return hub.Value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

就这样.:)

  • 要直接将SignalR添加到ASP.NET Web API,请将视频转发到时间33:35. (39认同)
  • @bytefire:实际上,Web API + SignalR集成开始了.在55分钟. (12认同)
  • @ davids.s:我知道,我有点迟了,但感谢你的链接.我已经为其他读者添加了摘录. (2认同)

Fil*_*p W 16

SignalR实际上已经整合到WebAPI源vNext(4.1)中.

如果您不使用RTM构建,而是从Codeplex中获取构建,您会看到有一个System.Web.Http.SignalR可以使用的新项目.它是在几天前用这个提交添加的 - http://aspnetwebstack.codeplex.com/SourceControl/changeset/7605afebb159

示例用法(如提交中所述):

public class ToDoListController : HubController<ToDoListHub>
{
    private static List<string> _items = new List<string>();

    public IEnumerable<string> Get()
    {
        return _items;
    }

    public void Post([FromBody]string item)
    {
        _items.Add(item);
        // Call add on SignalR clients listening to the ToDoListHub
        Clients.add(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您现在不想切换到vNext,您可以随时使用该代码进行参考.

这个实现与Brad Wilson在NDC奥斯陆展示的内容非常相似(更为精致,包括测试等) - http://vimeo.com/43603472

  • 我在服务器上做过.但无法连接客户端.您知道如何将.NET客户端与上述服务器连接吗? (4认同)
  • 我正在使用Web API 5.2.3和SignalR 2.2.1,这个类无处可寻.有谁知道历史?它在RTM之前被拉了吗?最后,我只是复制了david.s'类定义,但我很好奇发生了什么. (3认同)