SignalR - powiadomienia między dwoma aplikacjami webowymi

SignalR - powiadomienia między dwoma aplikacjami webowymi
HA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Witam,
Chciałbym się doradzić kogoś bardziej doświadczonego z SignalR.
Sytuacja wygląda tak:
Mam 3 projekty
A) projekt webowy 1
B) projekt webowy 2
C) projekt Repository
W projekcie C znajduje się klasa NotificationHub.
Chciałbym aby aplikacje A i B mogły wysyłać między sobą komunikaty z poziomu JS jak i po stronie kontrolera.
Na chwile obecną udała mi się :

  • wysyłać komunikat z poziomu JS z aplikacji A i B
  • wysyłać komunikat z poziomu kodu c# ( z controllera) aplikacji A

Niestety problem tkwi w tym że nie potrafię połączyć się do serwera SignalR z controlera Aplikacji B.
Oto kod który działa w controlerze projektu A :

Kopiuj
public void broadcastNotification(List<string> connectionId) {
var contex = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>(); 
contex.Clients.Clients(connectionIdList).refresh(); 
}

Niestety metoda ta wykonana po stronie aplikacji B nie działa. Czy ktoś wie gdzie może tkwić problem ?

E9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 395
0

Za mało informacji. Jaka wartość ma context? Czy polaczenie jest nawiazane? Co to znaczy nie działa?

HA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

w Aplikacji A mam coś takiego :

Kopiuj
$(function(){
chat = $.connection.notificationHub;
chat.client.addNewMessage = function(message){
$('#notification').append(message);
};
$.connection.hub.start(){};
}

I chciałbym wywołać addNewMessage z controlera aplikacji B

UPDATE:
W kontrolerze aplikacji A mogę to zrobić za pomocą takiego kodu, niestety nie działa on w innej aplikacji.

Kopiuj
var contex = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>(); 
contex.Clients.Clients(connectionIdList).addNewMessage ();
E9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 395
0

Dokładniej co to znaczy nie działa? Nie wchodzi w ogole to metody api? Nie ma nawiazanego połączenia ? Rozwiń to bardziej.

HA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

nie działa w sensie, że w aplikacji A (po stronie JS) nie wywołuje się metoda addNewMessage

I2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 229
0

Spróbuj zrobic to tak :

Kopiuj
var connection = new HubConnection("http://localhost:XXXXX/");
        var hub = connection.CreateHubProxy("MessageHub");
        connection.Start().Wait();
      

W miejsce XXXX wstaw port na którym odpalasz pierwszą aplikację

HA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Niestety nie działa powyższy sposób zostaje wyrzucony błąd :

StatusCode:401, ReasonPhrase: 'Unauthorized'

Ktoś wie jak temu zaradzić ?

Dodam że plik Startup w oby projektach wyglada tak :

Kopiuj
app.Map("/signalr",map =>
{
app.UseCors(CorsOptions.AllowAll);
var hubconfiguration = new HubConfiguration
{
EnableJSONP =true
};
map.RunSignalR(hubconfiguration); 
});
E9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 395
0

Masz napisane co nie działa. Jaka masz autoryzację w aplikacji?
https://docs.microsoft.com/en-us/aspnet/signalr/overview/security/hub-authorization

HA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

nie mam żadnej ustawionej w klasie hub nie mam ustawionego atrybutu authorize

Kopiuj
[HubName("notificationHub")]
public class NotificationHub : Hub
{
public void Send(string message)
{
string who = Context.User.Identity.Name.Substring(5); 
Clients.All.addNewMessageToPage(who,message); 
}
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.