2013-04-01 3 views
0

SignalR (1.0.1) 최신 버전을 사용하고 있습니다. 컨트롤러에서 허브로 브로드 캐스트하려고하는데 몇 가지 문제가 있습니다.SignalR Broadcast from Controller가 작동하지 않습니다.

  1. 클라이언트가 메시지를받지 못하는 것 같습니다.

내 허브 :

public class SignalRPriceHub : Hub 
{ 
    public void sndMessage(string msg) 
    { 
     Clients.All.addMessage(msg + "****"); 
    } 
} 

자바 스크립트 클라이언트 :

<script src="@Url.Content("~/Scripts/jquery.signalR-1.0.1.min.js")"></script> 
<script src="~/signalr/hubs"></script> 
..... 
var myHub = $.connection.signalRPriceHub; 
myHub.client.addMessage = function (message) { 
    alert(message); 
}; 

컨트롤러 :

내 허브 컨텍스트도 정의 된 'addMessage'을 가지고
  • 그것은하지 않는 것
    var context = GlobalHost.ConnectionManager.GetHubContext<SignalRPriceHub>(); 
    context.Clients.All.addMessage("TestOutsideMessage!!!"); 
    

    내가 알아챈 몇 가지 사항 : 1. 내 허브 컨텍스트에 'addMessage'가없는 것 같습니다. { " 'Microsoft.AspNet.SignalR.Hubs.ClientProxy'에는 'addMessage'"} 시스템에 대한 정의가 없습니다. 예외 {Microsoft.CSharp.RuntimeBinder.RuntimeBinderException} 내가 위에서 내 클라이언트 코드와 같은 파일에서 다음 코드를 실행하면

    1. , 나는 메시지를받을 수 있나요.

      var myHub = $ .connection.signalRPriceHub; $ .connection.hub.start (function() { myHub.server.sndMessage ("Hello World!"); });

    어떤 일이 벌어 질지에 관해 밝힐 수 있습니까? 모두에게 감사드립니다!

  • 답변

    4

    두 번째 글 머리 점이 모든 문제를 해결하는 이유를 밝혀주는 초기 신청서의 결함을 살펴 보겠습니다.

    $.connection.hub.start(); 
    

    당신은 당신의 허브에 메시지를 요청 후해야 sndMessage 명령을 호출하여 :

    $.connection.hub.start().done(function() { 
        myHub.server.sndMessage("Hello world"); 
    }); 
    

    이유 당신은 왜 보이지 않는 당신이 연결을 시작해야합니다 자바 스크립트 클라이언트에서

    허브 컨텍스트의 .Clients.All이 동적이기 때문에 허브 컨텍스트의 addMessage 함수가 있습니다.

    마지막으로, 샘플 작업을하기 위해 Application_Start에 RouteTable.Routes.MapHubs()가 있는지 확인해야합니다. . 일단 당신이 모든 것을 작동 연결 시작을 추가 한 이후로 당신이 이미 이것을 가지고 있다고 가정합니다.

    +0

    정말 훌륭한 답변을 해주셔서 감사합니다. 코드의 각 행이 무엇을하는지 실제로 생각하지 않고이 모든 것을 설정하는 "동작을 진행했습니다." 다시 감사합니다! – mvcNewbie

    관련 문제