2015-02-12 5 views
5

Ich habe eine Frage in Bezug auf die Caller-Methode von SignalR. In der Hub-Methode können wir eine clientseitige Funktion wie folgt aufrufen.Aufruf der Caller-Methode im SignalR-Hub außerhalb des Hub-Kontexts

aber wenn ich es von außerhalb des Hub-Kontext aufrufen, ist es nicht gefunden oder nicht implementiert ?? wie dies ..

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
context.Clients.Caller.reportProgress(recordCount,totalCount); 

Kann mich jemand in diesem Teil erleuchten, oder gibt es andere Möglichkeit, es zu implementieren .. jetzt verwenden, um ich diese

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
context.Clients.User(CurrentUser.Usernm).reportProgress(recordCount,totalCount); 

zu implementieren, aber jetzt behaupten wir nicht, basierend Authentifizierung, so wird es ein Problem sein, wenn die gleiche usernm protokolliert werden.

Antwort

5

Außerhalb des Hubs gibt es offensichtlich keinen Anrufer, weil der Server derjenige ist, der initiiert.

Wenn Sie sich um eindeutige Benutzernamen sorgen, müssen Sie implement a custom IUserIdProvider, oder Sie müssen manage connection ids per user auf andere Weise. Dann könnten Sie

nennen, die einzigartig sein würden.

+0

Mapping die Benutzeridentität auf die Hub-Authentifizierung ist ich denke, der beste Weg, aber wir implementiert benutzerdefinierte Iprincipal. Gonna einen Blick auf die Links .. –

+0

mein Problem lösen .. Yep IUserIdProvider Karte mit meinem Iprincipal löst die Verbindung Zuordnung –