먼저, 당신은 창 이름을 보낼 필요 서버에. 그것이 Start()
호출에 포함되기 때문에 가장 빠른 방법은, 따라서 당신이 proxy.Invoke()
추가로 필요하지는 헤더로 클라이언트를 보내는 :
클라이언트 측
_connection = new HubConnection(_uri);
_connection.Headers.Add("windowsName", "John");
await _connection.Start();
서버 측
"windowsName"헤더가 귀하의 신원이됩니다.
using Microsoft.AspNet.SignalR;
namespace YourServer
{
public class UserIdProvider : IUserIdProvider
{
public string GetUserId(IRequest request)
{
return request.Headers.Get("windowsName");
}
}
}
그리고 글로벌 의존성 해결에 연결 : 당신이 그것을 것 User.Identity.Name
에 액세스 할 때마다
public class Startup
{
public void Configuration(IAppBuilder app)
{
var idProvider = new UserIdProvider();
GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider),() => idProvider);
// TODO configure signalR here
}
}
SignalR이 ID로 해당 헤더를 인식하고 있는지 확인하려면 IUserIdProvider
의 구현을 작성해야 "windowsName"과 일치하지만 아래 설명 된대로 필요하지 않습니다.
사용자가 말한 것처럼 사용자는 여러 컴퓨터에서 로그인 할 수 있습니다. 이 처리하는 가장 좋은 방법은 SignalR 그룹을 만드는 :
public override Task OnConnected()
{
var windowsName = Context.Headers.Get("windowsName");
Groups.Add(Context.ConnectionId, windowsName);
return base.OnConnected();
}
이것은 Windows 시스템의 이름으로 SignalR 그룹을 생성합니다. 사용자가 다른 컴퓨터에 로그인하면 동일한 그룹에 추가됩니다. OnDisconnected
안에있는 어떤 것도 제거 할 필요가 없습니다. 그 이유는 SignalR이 당신을 대신해서 처리 할 것이기 때문입니다. 그래서 단일 사용자에 대해도 그룹을 만들 잘 키우면
Clients.Group("John").sendData(data);
Clients.Group(User.Identity.Name).sendData(data);
가 (여러에서 연결 : 당신이 그룹에 메시지를 보낼 때마다, 연결된 모든 기계가 통지되기 때문에
그룹은 매우 편리합니다 기계).
이것은 매우 유용합니다! 이 놀라운 답변과 매우 이해할 수있는 설명에 감사드립니다! 당신에게 좋은 일! – Bodokh