2014-01-14 1 views
1

SignalR로 일부 코드를 개발 중입니다.SignalR 작성 타이머

하나의 타이머와이 타이머를 두껍게 만들고 싶습니다. 함수 및이 함수는 userName에 의해 데이터베이스에서 데이터를 읽고 호출자에게 속한 뉴스를 가져옵니다.

문제가 있다면 모든 연결 타이머에 허브 클래스의 타이머를 다시 만들어서 사용하지 마십시오. 내가이 상황에서 그

public class SignalRTime 
{ 
    private readonly Timer _timer; 
    private int _count = 0; 

    private readonly static Lazy<SignalRTime> _instance = new Lazy<SignalRTime>(() => 
     new SignalRTime(GlobalHost.ConnectionManager.GetHubContext<TimerHub>().Clients)); 

    private SignalRTime(IHubConnectionContext clients) 
    { 
     Clients = clients; 
     _timer = new Timer(UpdateTime, null, 0, 6000); 
    } 


    private void UpdateTime(object state) 
    { 
     lock(CurrentTime) 
     { 
      _count++; 
     } 
     Clients.All.broadcastTime(CurrentTime); 
    } 

    public static SignalRTime Instance 
    { 
     get 
     { 
      return _instance.Value; 
     } 
    } 

    private IHubConnectionContext Clients 
    { 
     get; 
     set; 
    } 

    public string CurrentTime 
    { 
     get 
     { 
      return _count.ToString(); 
     } 
    } 

} 

같은 타이머를 작성하면 내가 로그인 한에도 불구하고 HttpContext.Current가 null이기 때문에

나는 현재 사용자 이름을 읽을 수 없습니다.

나는 무엇을 해야할지 모르겠다. 도움말

를 들어

감사

답변

0

회원님이이 클래스에서 일을하려고하고 있지만 일반적으로 별도의 타이머 클래스 (안 허브 클래스)가 다음 허브의 메소드를 호출은 ConnectionManager를 사용 해야하는지 전혀 확인 수업.

+0

이 클래스는 별도의 클래스이며 타이머가 제대로 작동하지만이 클래스의 현재 사용자 이름에 연결할 수 없습니다. – bluenesman

+0

이것이 실제로 SignalR 문제가 아닙니다. asp.net 응용 프로그램에서 세션 관리 및 인증을 사용하는 방법과 현재 사용자 이름을 검색하는 방법을 알아야합니다. 사용자 이름이 있으면 GetHubContext를 사용하여 관련 메서드에 액세스 할 수 있습니다. –

+0

사실 저는 게으른 <> SignalR Clear All Session을 사용하여 인스턴스를 생성 할 때 어떤 세션 컨텍스트에도 도달 할 수 없기 때문에 SignalR 문제입니다. SignalR에는 자체 세션 컨텍스트가 있으며 다른 클래스에서 도달 할 수 없었습니다. 그래서 SignalR은 웹 세션을 깨끗이하기 때문에 사용자 이름에 도달 할 수없고 위의 클래스는 작동하지 않습니다. 그리고 허브 클래스에서 타이머를 만들 수 없습니다. 그렇게하면 모든 연결에 새로운 타이머가 생성됩니다. – bluenesman