Can I incorporate both SignalR and a RESTful API? Can I incorporate both SignalR and a RESTful API? asp.net asp.net

Can I incorporate both SignalR and a RESTful API?


Take a look at the video from this blog post. It explains exactly how you can use WebAPI with SignalR.

Essentially, Web API + SignalR integration consists in this class:

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

That's all. :)


SignalR is actually already incorporated into WebAPI source vNext (4.1).

If you use not the RTM build, but instead grab a build off Codeplex, you'd see there is a new project there called System.Web.Http.SignalR which you can utilize. It was added a couple of days ago with this commit - http://aspnetwebstack.codeplex.com/SourceControl/changeset/7605afebb159

Sample usage (as mentioned in the commit):

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

If you do not want to switch to vNext for now, you could always just use that code for reference.

This implementation is very similar (a bit more polished, includes tests etc.) to what Brad Wilson showed at NDC Oslo - http://vimeo.com/43603472