with tutorial started route net mvc example asp asp.net rest web-applications asp.net-web-api signalr

asp.net - tutorial - web api json c#



¿Puedo incorporar SignalR y una API RESTful? (3)

Aquí hay un video que muestra una integración de las dos tecnologías http://channel9.msdn.com/Events/TechDays/Belgium-2013/25 y aquí hay un paquete NuGet para la integración https://www.nuget.org/packages/Microsoft.AspNet.WebApi.SignalR/

Tengo una aplicación web de una sola página desarrollada con ASP.NET. Hace poco convertí muchos de los métodos web para que se basen en el uso de la biblioteca SignalR . Esto realmente aceleró la página considerablemente y redujo muchas llamadas de servidor de la página.

Al mismo tiempo, también he estado buscando RESTful ASP.NET WebAPI para algunos de los métodos del lado del servidor, con la verdadera belleza de que permite crear una API para aplicaciones externas al mismo tiempo que desarrollo el aplicación central (que será importante para lo que estoy haciendo).

Sin embargo, parece que después de ver varios artículos y these two preguntas, los métodos push y WebAPI parecen dos paradigmas completamente diferentes para la comunicación cliente-servidor. Estoy seguro de que puedo crear varios métodos a los que se puede acceder a través de cualquiera de los protocolos, pero no estoy seguro de si hay trampas para esto o si esto se considera descuidado, tal vez haya una manera más elegante de lograr lo que estoy apuntando para.

Ciertamente hay situaciones en las que quiero que la WebAPI RESTful transmita eventos a través de un concentrador SignalR ... Lo contrario (SignalR alguna vez necesitando acceder a la WebAPI) parece menos probable, pero supongo que aún es posible.

¿Alguien ha hecho esto? ¿Alguien tiene algún consejo o consejos sobre cómo proceder? ¿Cuál sería la forma más elegante de avanzar aquí?


Eche un vistazo al video de esta publicación de blog . Explica exactamente cómo puede usar WebAPI con SignalR.

Básicamente, la integración de Web API + SignalR consiste en esta 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; } } }

Eso es todo. :)


SignalR ya está incorporado en la fuente WebAPI vNext (4.1).

Si no usa la compilación RTM, sino que toma una compilación de Codeplex, verá que hay un nuevo proyecto llamado System.Web.Http.SignalR que puede utilizar. Se agregó hace un par de días con este compromiso: http://aspnetwebstack.codeplex.com/SourceControl/changeset/7605afebb159

Uso de muestra (como se menciona en la confirmación):

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

Si no quiere cambiar a vNext por ahora, siempre puede usar ese código como referencia.

Esta implementación es muy similar (un poco más pulida, incluye pruebas, etc.) a lo que Brad Wilson mostró en NDC Oslo - http://vimeo.com/43603472