2013-07-31 3 views
2

나는 설정에 내가 SQL 서버 프로파일 경우 내가 볼 수있는, 제대로 설치 될 것으로 보인다SignalR

http://www.asp.net/signalr/overview/performance/scaleout-with-sql-server

모든 SQL Server 및 SignalR 다음과 같은 구성을 시도했습니다 SignalR은 DB를 호출하지만 연결된 모든 클라이언트에게 메시지를 보내도록 허브를 호출하면 메시지가 연결된 브라우저로 전송되지 않습니다.

어떤 문제 일 수 있습니까?

+0

메시지가 브라우저로 돌아 오지 않는지 확인 했습니까? 처리기가 올바르게 배선되지 않도록 메소드 서명 불일치 (대소 문자 구분)가있을 수 있습니다. –

+1

그래서 모든 것이 잘 작동했지만, 의존성 주입을 설정 한 방법은 잘못되었습니다. 싱글 톤을 사용하는 동안 모든 요청마다 IHubContext를 다시 만들어야합니다. – smnbss

+0

배포 할 때 동일한 문제가 발생합니다. 예외 : System.InvalidOperationException 메시지 : Nullable 개체에 값이 있어야합니다. 스택 트레이스 : System.Threading.ExecutionContext에서 System.Threading.ExecutionContext.RunInternal에서 Microsoft.AspNet.SignalR.SqlServer.SqlReceiver.Receive (개체 상태) (의 ExecutionContext의 ExecutionContext, ContextCallback 콜백 개체 상태, 부울 preserveSyncCtx) 에서. 실행 (ExecutionContext executionContext, ContextCallback 콜백, 객체 상태, 부울 preserveSyncCtx) ... –

답변

2

감사합니다. @smnbss, 질문에 내 인생이 저장되었습니다. 그냥 같은 문제와 미래의 모든 사람이 명확하게하기 위해, 여기에 잘못된 구현 : 백플레인을 사용하지 않는 동안

public class SyncService : ISyncService 
{ 
    private IHubContext StatusChangeHub { get; set; } 

    public GatewaySyncService() 
    { 
     StatusChangeHub = GlobalHost.ConnectionManager.GetHubContext<Hub>(); 
    } 

    public void SyncStatusChange(Status newStatus) 
    { 
     StatusChangeHub.Clients.All.onStatusChange(newStatus);  
    } 
} 

그러나 어떻게 든이 유일한 작품 : 내가 좋아하는 한 번만 컨텍스트를 얻고 있었다. 올바른 구현 : 메시지를 보낼 때마다 컨텍스트를 가져와야합니다.

public class SyncService : ISyncService 
{ 
    public void SyncStatusChange(Status newStatus) 
    { 
     var context = GlobalHost.ConnectionManager.GetHubContext<Hub>(); 

     context.Clients.All.onStatusChange(newStatus);  
    } 
} 
+0

나는 똑같은 문제가 있습니다. 더 나은 해결책을 찾았습니까? – Heberda