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/