首页 文章

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

提问于
浏览
102

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

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

然而,在看了几篇文章和问题之后,似乎推送和WebAPI方法似乎是两种完全不同的客户端 - 服务器通信范例 . 我不确定是否存在陷阱或者这是否被认为是草率的 - 可能有's a more elegant way to achieve what I' m目标 .

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

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

3 回答

  • 14

    看看这个blog post的视频 . 它解释了如何将WebAPI与SignalR结合使用 .

    本质上,Web API SignalR集成包含在_1307462中:

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

    就这样 . :)

  • 1

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

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

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

  • 78

    这是一个显示两种技术集成的视频http://channel9.msdn.com/Events/TechDays/Belgium-2013/25,这里有一个用于集成的NuGet包https://www.nuget.org/packages/Microsoft.AspNet.WebApi.SignalR/

相关问题