2013-10-02 16 views
5

Scenariusz wygląda następująco: Mamy aplikację Asp.Net MVC 4, która ma prywatny system przesyłania wiadomości, który obsługuje koncentrator signalR używany do powiadamiania użytkowników, gdy nowa wiadomość jest dla nich dostępna. Wszystko działa dobrze, aplikacja Web rejestru rejestru connectionId wraz ze swoją nazwą użytkownika, a sygnał jest wysyłany do koncentratora z DataLayer za pośrednictwem klasy notificationControl.Wysyłaj powiadomienie do klienta WWW z usługi zewnętrznej za pośrednictwem koncentratora SignalR hostowanego w aplikacji Asp.Net MVC

Problem pojawił się, gdy musieliśmy stworzyć oddzielną usługę wykorzystującą Quartz.Net, która również wysyła prywatne wiadomości po zakończeniu zadań. Chcemy, aby usługa kwarcowa mogła skontaktować się z hubem, ale nie możemy sprawić, by była w oddzielnym procesie. Nie chcę używać klienta signalR .net, ponieważ nie potrzebuję stałego połączenia między usługą opartą na kwarcu i moją aplikacją internetową. Myślę o stworzeniu punktu końcowego w moim WebSite, aby odsłonić metodę serwera Hub'a do usługi lub użyć ScaleOut do tego, ale czuję, że coś przeoczyłem i chociaż chciałbym zapytać społeczność.

+0

Nie wiem, dlaczego nie chcesz stałego połączenia? Cały punkt klienta SignalR jest poza rozmyciem procesowym między koncentratorem. Możesz zrobić to, co zasugerowałeś, ale to w pewnym sensie pokonuje cały cel SignalR i przegrasz w jakiejkolwiek dwukierunkowej komunikacji ... – Steve

+0

@Steve: Chyba nie chcę tego, bo nie mam musi być stały lub dwukierunkowy. – VdesmedT

+1

Czy rozważałeś użycie magistrali (RabbitMQ, NServiceBus, itp.)? Quartz.Net może opublikować komunikat na magistrali, a subskrybent odbierze wiadomość i wyśle ​​alert do wszystkich podłączonych klientów (aplikacja internetowa) za pośrednictwem SignalR. – codingintherain

Odpowiedz

4

To może być bardzo spóźniona odpowiedź, ale widząc, że nie było rzeczywistej akceptowanej odpowiedzi. Zapewnię jedną.

Najprostszym sposobem na to, aby aplikacja Quartz.NET wysyłała informacje do aplikacji sieci Web ASP.NET bez implementowania ciężkiego rozwiązania, takiego jak Enterprise Service Bus (ESB), jest po prostu udostępnienie usługi sieci Web w środowisku ASP.NET i Quartz.NET wywołuje usługę sieci Web ASP.NET, gdy jej zadanie zostanie zakończone. Po przejściu do usługi sieci Web ASP.NET powinieneś być w stanie wysłać powiadomienie, aby wysłać powiadomienie do klienta poprzez signalR.

+0

Tak właśnie zrobiłem w tym czasie ;-) Dziękuję. – VdesmedT

1

Użyłbym odbiornika kwarcowego (detektor zadania lub wyzwalacza) w WebAPI, który następnie komunikuje się z hubem.

Oczywiście, użyj wspólnego magazynu ADO między klientem Quartz (web API) i serwerem (usługa Windows).

Powiązane problemy