Zuerst müssen Sie den Windows-Namen versenden zum Server. Der schnellste Weg ist, die er von dem Client als Header, weil es so in der Start()
Aufruf enthalten, wird Ihnen eine zusätzliche proxy.Invoke()
dont brauchen:
Client-Seite
_connection = new HubConnection(_uri);
_connection.Headers.Add("windowsName", "John");
await _connection.Start();
Server-Seite
Dieser "WindowsName" Header wird Ihre Identität sein. Um sicherzustellen, dass SignalR diesen Header als die Identität erkennt, müssen Sie eine Implementierung von IUserIdProvider
erstellen:
using Microsoft.AspNet.SignalR;
namespace YourServer
{
public class UserIdProvider : IUserIdProvider
{
public string GetUserId(IRequest request)
{
return request.Headers.Get("windowsName");
}
}
}
Und stecken Sie es dann in die globale Abhängigkeit Resolver:
public class Startup
{
public void Configuration(IAppBuilder app)
{
var idProvider = new UserIdProvider();
GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider),() => idProvider);
// TODO configure signalR here
}
}
Wenn Sie User.Identity.Name
zugreifen, es wird passe den "windowsName" an, aber du brauchst ihn nicht einmal, wie unten erklärt.
Wie Sie sagen, kann sich ein Benutzer von mehreren Computern aus anmelden. Der beste Weg, dies zu handhaben ist die Schaffung SignalR Gruppen:
public override Task OnConnected()
{
var windowsName = Context.Headers.Get("windowsName");
Groups.Add(Context.ConnectionId, windowsName);
return base.OnConnected();
}
Dies wird eine SignalR Gruppe mit dem Namen der Windows-Maschine erstellen. Wenn sich der Benutzer bei einem anderen Computer anmeldet, wird er zur selben Gruppe hinzugefügt. Sie müssen nichts in OnDisconnected
entfernen, da SignalR sich darum kümmern wird.
Gruppen sind sehr praktisch, weil, wenn Sie eine Nachricht an eine Gruppe senden, werden alle angeschlossenen Maschinen benachrichtigt werden:
Clients.Group("John").sendData(data);
Clients.Group(User.Identity.Name).sendData(data);
Es ist also in Ordnung, eine Gruppe sogar für einen einzelnen Benutzer zu erstellen (von mehreren Verbindungs Maschinen).
Dies ist sehr nützlich! Vielen Dank für diese tolle Antwort und eine sehr verständliche Erklärung! Guten Tag Ihnen! – Bodokh