웹 애플리케이션 프로젝트와 앵귤러 2 프로젝트가 있습니다. SignalR을 사용하여 서버에서 메시지를 보내고 싶습니다. 그럼 구현에 대해서는 article입니다. 하지만 현재 사용자에게 메시지를 보내는 방법을 모르겠습니다. 메시지 보내기 C 번호SignalR Web API가 현재 사용자에게 메시지를 보냅니다.
코드 :
이public class EventHub : Hub
{
public async Task Subscribe(string channel)
{
await Groups.Add(Context.ConnectionId, channel);
var @event = new ChannelEvent
{
Name = $"{Context.ConnectionId} subscribed",
Data = new
{
Context.ConnectionId,
ChannelName = channel
}
};
await Publish(@event);
}
public async Task Unsubscribe(string channel)
{
await Groups.Remove(Context.ConnectionId, channel);
var @event = new ChannelEvent
{
Name = $"{Context.ConnectionId} unsubscribed",
Data = new
{
Context.ConnectionId,
ChannelName = channel
}
};
await Publish(@event);
}
public Task Publish(ChannelEvent channelEvent)
{
Clients.Caller.OnEvent(Constants.AdminChannel, channelEvent);
return Task.FromResult(0);
}
public override Task OnConnected()
{
var @event = new ChannelEvent
{
Name = $"{Context.ConnectionId} connected",
Data = new
{
Context.ConnectionId,
}
};
Publish(@event);
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled)
{
var @event = new ChannelEvent
{
Name = $"{Context.ConnectionId} disconnected",
Data = new
{
Context.ConnectionId,
}
};
Publish(@event);
return base.OnDisconnected(stopCalled);
}
}
public static class Constants
{
public const string AdminChannel = "admin";
public const string TaskChannel = "tasks";
}
public class ChannelEvent
{
public string Name { get; set; }
public string ChannelName { get; set; }
public DateTimeOffset Timestamp { get; set; }
public object Data
{
get { return _data; }
set
{
_data = value;
Json = JsonConvert.SerializeObject(_data);
}
}
private object _data;
public string Json { get; private set; }
public ChannelEvent()
{
Timestamp = DateTimeOffset.Now;
}
}
그런 다음 내 컨트롤러에서 나는 내 게시 IhubContent
private readonly IHubContext _context = GlobalHost.ConnectionManager.GetHubContext<EventHub>();
를 작성하고 호출 이벤트 :
private void PublishEvent(string eventName, StatusModel status)
{
_context.Clients.Group(Constants.TaskChannel).OnEvent(Constants.TaskChannel, new ChannelEvent
{
ChannelName = Constants.TaskChannel,
Name = eventName,
Data = status
});
}
그러나 전송이 메시지 모든 사용자에게. 이 문제를 해결하고 현재 사용자에게 메시지를 보내도록 코드를 구현하도록 도와주세요.
userId 당신은 Context.ConnectionId를 의미합니까? 아니면 다른 사람? –
typo가 잘못되었으므로 connectionId를 사용하여 사용자를 처리하려면 'Client' 메소드를 사용해야합니다. '사용자'는 사용자 이름 ([username]) (http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections)을 사용하여 주소를 지정하는 경우 사용할 수 있습니다. – bsoulier