Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.7k views
in Technique[技术] by (71.8m points)

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

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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. :)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...