현재 서버 측에서 허브에 알리는 방법을 배웠습니다. 그런 다음 허브는 클라이언트에 알림을 브로드 캐스트합니다.hubcontext is null signalr
내 작업 내용은 페이스 북과 비슷한 친구 요청을 보내는 것을 기반으로합니다. X 씨가 Y 씨에게 요청을 보내는 경우, Y 씨에게만 알림 팝업이 표시됩니다.
따라서 그룹스와 협력하기로 결정했습니다. 한 그룹 - 한 명의 사용자를 생각하고 있습니다.
문제는 내가 노력한다는 것입니다 허브 시작에 내가 할 것이라고 :
$ .connection.hub.start (함수() {hub.login (XXX);});
여기서 XXX는 세션의 사용자 이름 또는 사용자 ID입니다. 나는 이것을 어떻게하는지 모른다.
그런 다음 username 또는 userID로 숨겨진 레이블을 만들고 page_load에 채우고 클라이언트 측에서 가져 오려고했습니다. 그러나 클라이언트 측은 서버 측보다 먼저 작동합니다.
그런 다음 허브 컨텍스트의 연결 ID를 사용하려고했습니다. 그러나 문제는 컨텍스트 및 그룹 관리자와 같은 거의 모든 것이 허브에서 null 인 것으로 보입니다. 허브 인스턴스를 사용하고 있기 때문입니까? 또는 정적 메서드가 있기 때문에?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SignalR.Hubs;
using SignalR;
using SignalR.Hosting.AspNet;
using System.Web;
using System.Web.SessionState;
namespace DataLayer
{
public class NotificationHub: Hub
{
private static NotificationHub instance;
private NotificationHub() { }
public static NotificationHub Instance
{
get
{
if (instance == null)
instance = new NotificationHub();
return instance;
}
}
public void NotifyClients(int gid, string value)
{
IConnectionManager connectionManager = (IConnectionManager)AspNetHost.DependencyResolver.GetService(typeof(IConnectionManager));
dynamic clients = connectionManager.GetClients<NotificationHub>();
clients[gid.ToString()].newNotification(value);
//let us then try to use connection id, but this.Context.ConnectionId is null
}
public void Login(string gid)
{
AddToGroup(gid);
}
}
}
는 내가하고 싶은 것이 몇 가지 다른 해결 방법이 될 수 있습니다 (I 다른 서버 측 코드에서 이러한 메서드를 호출하고 이후는/정적이 있거나 다른 인스턴스가해야하는)? (즉, 각 사람에게 고유 한 알림을 보내도록 하시겠습니까?)
질문에 무엇이 잘못 되었습니까? – test
질문을 던지거나 문맥을 알려주지 않았습니다. –
@DrewMarsh 당신은 지금 더 좋다고 생각하니? – test