Hola!
Sabes que eres una persona mayor, cuando te toca limpiar los restos de los pañales de tus hijos. Esto no es preocupante porque desde que nacemos hasta que morimos, somos básicamente una fábrica de mierda. El tema está en que una cosa es la obligacion fisiológica. Y otra muy distinta es cuando se te atasca una idea de mierda entre ambas orejas y termina saliendo en forma de código por tus dedos.
Dicho esto, 2 puntos que dan pie al post de hoy
- Es posible hostear SignalR en una applicacion, por ejemplo app de consola, un servicio windows, etc.
- Frente al eterno problema de la app A necesita comunicarse bidireccionalmente con la app B, existen mentes privilegiadas, que deciden que ambas apps hosteen un hub SignalR y luego … pues ya te imaginas.
Pero bueno, mejor volvamos al punto 1. Debajo dejo un par de links que son de ayuda y que explican un paso a paso completo. En mi caso lo dejo en 4 pasos:
1. Crear una app de consola
2. Agregar 2 paquetes NuGet, Microsoft.AspNet.SignalR.SelfHost y Microsoft.Owin.Cors
3. Modificar la app de consola con un código similar al siguiente
1: using System;
2: using Microsoft.AspNet.SignalR;
3: using Microsoft.Owin.Hosting;
4: using Owin;
5: using Microsoft.Owin.Cors;
6:
7: namespace SignalRHost
8: {
9: internal class Program
10: {
11: private static void Main(string[] args)
12: {
13: const string url = "http://localhost:50000";
14: using (WebApp.Start(url))
15: {
16: Console.WriteLine("Server running on {0}", url);
17: Console.ReadLine();
18: }
19: }
20: }
21:
22: class Startup
23: {
24: public void Configuration(IAppBuilder app)
25: {
26: app.UseCors(CorsOptions.AllowAll);
27: app.MapSignalR();
28: }
29: }
30: public class MyHub : Hub
31: {
32: public void Send(string name, string message)
33: {
34: Console.WriteLine(name + ", " + message);
35: Clients.All.addMessage(name, message);
36: }
37: }
38: }
4. Done!
Ya tenemos un hub llamado “MyHub” hosteado en una app de consola. La misma deja trazas de los mensajes en Send, similares a la siguiente imagen.
Las posibilidades son muy grandes. Personalmente no optaría por usar SignalR como el principal mecanismo para comunicar apps entre sí, pero si tengo que dar las gracias por llegar hasta el paquete [Microsoft.AspNet.SignalR.SelfHost]
Por cierto, que casi me olvido de dejar un ejemplo del código de un cliente WPF que use este “server”, aquí va:
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using System.Threading.Tasks;
6: using System.Windows;
7: using System.Windows.Controls;
8: using System.Windows.Data;
9: using System.Windows.Documents;
10: using System.Windows.Input;
11: using System.Windows.Media;
12: using System.Windows.Media.Imaging;
13: using System.Windows.Navigation;
14: using System.Windows.Shapes;
15: using Microsoft.AspNet.SignalR.Client;
16:
17: namespace WpfApplication2
18: {
19: /// <summary>
20: /// Interaction logic for MainWindow.xaml
21: /// </summary>
22: public partial class MainWindow : Window
23: {
24: private HubConnection _connection;
25: private IHubProxy _myHub;
26:
27: public MainWindow()
28: {
29: InitializeComponent();
30: Loaded += MainWindow_Loaded;
31: }
32:
33: void MainWindow_Loaded(object sender, RoutedEventArgs e)
34: {
35: _connection = new HubConnection("http://localhost:50000/");
36: _myHub = _connection.CreateHubProxy("MyHub");
37: _connection.Start().Wait();
38: }
39:
40: private void Button_Click(object sender, RoutedEventArgs e)
41: {
42: _myHub.Invoke("Send", "message");
43: }
44: }
45: }
Recursos
- Tutorial: SignalR Self-Host
http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-signalr-20-self-host - OWIN Startup Class Detection
http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection
Saludos @ Home
El Bruno
Leave a reply to el de siempre Cancel reply