2013-10-02 13 views
5

Lo scenario è il seguente: Abbiamo un'app Asp.Net MVC 4 con un sistema di messaggistica privato che ospita un hub signalR utilizzato per informare gli utenti quando nuovo messaggio sono disponibili per loro. Tutto funziona, la connessione al registro delle app Web insieme al loro nome utente e il segnale viene inviato all'hub dal DataLayer tramite una classe notificationAdapter.Invia notifica al client Web dal servizio esterno tramite l'hub SignalR ospitato in Asp.Net MVC Application

Il problema si presentava quando dovevamo creare un servizio separato sfruttando Quartz.Net che inviava anche messaggi privati ​​al termine delle attività. Vogliamo che il servizio Quartz sia in grado di contattare l'Hub ma non possiamo causarlo in un processo separato. Non voglio usare il client signalR .net perché non ho bisogno di una connessione permanente tra il servizio basato su Quartz e la mia app Web. Penso di creare un endpoint nel mio sito Web per esporre il metodo server di Hub al servizio o utilizzare ScaleOut per questo, ma sento che mi manca qualcosa e anche se chiederei alla community.

+0

Non so perché non vorreste una connessione permanente ?? L'intero punto del client SignalR è per la comunicazione fuori processo tra un hub. Si potrebbe fare quello che lei ha suggerito, ma questo tipo di sconfitte lo scopo di SignalR e si sarebbe perdere su qualsiasi tipo di comunicazione bi-direzionale ... – Steve

+0

@Steve: Credo che non lo voglio perché non lo faccio bisogno che sia permanente o bidirezionale. – VdesmedT

+1

Hai considerato l'utilizzo di un bus (RabbitMQ, NServiceBus, ecc.)? Quartz.Net può pubblicare un messaggio sul Bus e un sottoscrittore riceve il messaggio e invia un avviso a tutti i client connessi (app Web) tramite SignalR. – codingintherain

risposta

4

Questa potrebbe essere una risposta molto tardiva, ma visto che non ci sono state risposte effettive accettate. Fornirò uno.

Il modo più semplice per fare in modo che l'applicazione Quartz.NET invii informazioni alla propria applicazione Web ASP.NET senza implementare una soluzione pesante come Enterprise Service Bus (ESB) consiste semplicemente nell'esporre un servizio Web in ASP.NET e avere il proprio Quartz.NET chiama il servizio Web ASP.NET al termine dell'attività. Una volta che sei nel tuo servizio web ASP.NET dovresti essere in grado di ricevere una notifica per inviare una notifica al client attraverso signalR.

+0

Questo è davvero quello che ho fatto in quel momento ;-) Grazie – VdesmedT

1

Avrei usato Quartz Listener (Job o listener di trigger) in WebAPI, che quindi parla con l'hub.

Naturalmente, utilizzare un negozio di ADO condiviso tra client quarzo (web API) e il server (servizio di Windows).