감사합니다. @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);
}
}
메시지가 브라우저로 돌아 오지 않는지 확인 했습니까? 처리기가 올바르게 배선되지 않도록 메소드 서명 불일치 (대소 문자 구분)가있을 수 있습니다. –
그래서 모든 것이 잘 작동했지만, 의존성 주입을 설정 한 방법은 잘못되었습니다. 싱글 톤을 사용하는 동안 모든 요청마다 IHubContext를 다시 만들어야합니다. – smnbss
배포 할 때 동일한 문제가 발생합니다. 예외 : System.InvalidOperationException 메시지 : Nullable 개체에 값이 있어야합니다. 스택 트레이스 : System.Threading.ExecutionContext에서 System.Threading.ExecutionContext.RunInternal에서 Microsoft.AspNet.SignalR.SqlServer.SqlReceiver.Receive (개체 상태) (의 ExecutionContext의 ExecutionContext, ContextCallback 콜백 개체 상태, 부울 preserveSyncCtx) 에서. 실행 (ExecutionContext executionContext, ContextCallback 콜백, 객체 상태, 부울 preserveSyncCtx) ... –