[asp.net] SignalR과 RESTful API를 모두 통합 할 수 있습니까?

ASP.NET을 사용하여 개발 된 단일 페이지 웹 앱이 있습니다. 최근 SignalR 라이브러리를 사용하여 많은 웹 메서드를 푸시 기반으로 변환했습니다 . 이것은 실제로 페이지 속도를 상당히 높이고 페이지에서 많은 서버 호출을 줄였습니다.

동시에 일부 서버 측 메서드에 대해 RESTful ASP.NET WebAPI를 살펴 보았습니다. 진정한 아름다움은 제가 개발하는 동시에 외부 애플리케이션 용 API를 만들 수 있다는 점입니다. 핵심 애플리케이션 (내가하는 일에 중요).

여러 기사와보고 후, 그러나 보인다 이러한 두 개의 푸시 및 WebAPI 방법은 클라이언트 – 서버 통신을위한 두 개의 완전히 다른 패러다임처럼 보일 것을 질문입니다. 두 프로토콜 중 하나를 통해 액세스 할 수있는 다양한 방법을 만들 수 있다고 확신하지만 여기에 함정이 있는지 또는 이것이 엉성한 것으로 간주되는지는 확실하지 않습니다. 에 대한.

RESTful WebAPI가 SignalR 허브를 통해 이벤트를 브로드 캐스트하기를 원하는 상황이 확실히 있습니다. 반대의 경우 (SignalR가 WebAPI에 액세스해야 함) 가능성은 적지 만 여전히 가능하다고 생각합니다.

누구든지 이것을 했습니까? 진행 방법에 대한 조언이나 팁이 있습니까? 여기서 가장 우아한 방법은 무엇일까요?



답변

블로그 게시물 의 비디오를 살펴보십시오 . SignalR과 함께 WebAPI를 사용하는 방법을 정확하게 설명합니다.

기본적으로 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; }
    }
}

그게 다야. 🙂


답변

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 Oslo- http ://vimeo.com/43603472에서 보여준 것과 매우 유사합니다 (좀 더 세련되고 테스트 등 포함).


답변

다음은 두 기술의 통합을 보여주는 비디오입니다.
http://channel9.msdn.com/Events/TechDays/Belgium-2013/25
및 여기에 통합을위한 NuGet 패키지가 있습니다.
https://www.nuget.org/ 패키지 /Microsoft.AspNet.WebApi.SignalR/


답변