I have a single page web app developed using ASP.NET. I recently converted many of the web methods to be push based, using the SignalR library. This really sped up the page considerably and reduced a lot of the server calls from the page.
At the same time, I've also been looking at the RESTful ASP.NET WebAPI for some of the server-side methods, with the real beauty being that it allows to create an API for external applications at the same time that I develop the core application (which will be important for what I'm doing).
It seems however, after looking at several articles and these two questions, that push and WebAPI methods seem like two entirely different paradigms for client-server communication. I'm sure that I can create various methods that can be accessed via either protocol, but I'm uncertain if there are pitfalls to this or if this is considered sloppy -- maybe there's a more elegant way to achieve what I'm aiming for.
There are certainly situations in which I want the RESTful WebAPI to broadcast events via a SignalR hub... The opposite (SignalR ever needing to access the WebAPI) seems less likely, but I suppose still possible.
Has anyone done this? Does anyone have any advice or tips on how to proceed? What would be the most elegant way forward here?
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. :)