SignalR - powiadomienia między dwoma aplikacjami webowymi

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 :

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 ?

0

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

0

w Aplikacji A mam coś takiego :

$(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.

var contex = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>(); 
contex.Clients.Clients(connectionIdList).addNewMessage ();
0

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

0

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

0

Spróbuj zrobic to tak :

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ę

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 :

app.Map("/signalr",map =>
{
app.UseCors(CorsOptions.AllowAll);
var hubconfiguration = new HubConfiguration
{
EnableJSONP =true
};
map.RunSignalR(hubconfiguration); 
});
0

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

0

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

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1