2012-10-10 5 views
0

저는 SignalR의 초보자입니다. 나는 이걸하려고 애 쓰고있어 Progress Bar example.
NuGet을 통해 패키지를 다운로드하고 설치할 수 없습니다. 액세스를 거부하는 내 작업에 프록시가 있기 때문입니다. 그래서 저는 DLL과 스크립트를 프로젝트에 직접 포함 시켰습니다.Asp.net의 SignalR MVC 3 : 허브가 정의되지 않았습니다.

내보기 코드는 다음과 같습니다 :

<h2>@ViewBag.Message</h2> 
<input type="button" id="bookButton" value="Book flight" /> 
<br /> 
<b>Status:</b>&nbsp;&nbsp;&nbsp;<span id="msg"></span> 
<hr /> 
<input type="button" id="percButton" value="Process pending emails" /> 
<div id="bar" style="border: #000 1px solid; width: 300px;"> 
</div> 
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
<link href="@Url.Content("~/Content/gauge-bar.css")" rel="stylesheet" type="text/css" /> 
<script src="@Url.Content("~/Scripts/jquery-1.6.4.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/json2.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.signalr.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/simple-gauge-bar.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(function() { 
     var bookingHub = $.connection.bookingHub; 
     $("#percButton").click(function() { 
      bookingHub.processPendingEmails(); 
     }); 

     $("#bookButton").click(function() { 
      bookingHub.bookFlight("fco", "jfk"); 
     }); 

     bookinghub.updategaugebar = function (perc) { 
      $("#bar").html(gaugebar.generate(perc)); 
     }; 
     bookinghub.displaymessage = function (message) { 
      $("#msg").html(message); 
     }; 

     $.connection.hub.start(); 
    }); 
</script> 

내 허브 코드 : I 프로젝트를 실행하면

public class BookingHub : Hub 
{ 
    public void Send(String message) 
    { 

     // Call the addMessage method on all clients. 
     Clients.displayMessage(message); 
    } 

    public void BookFlight(String from, String to) 
    { 
     // Book first leg 
     Clients.displayMessage(String.Format("Booking flight: {0}-{1} ...", from, to)); 
     Thread.Sleep(2000); 

     // Book return 
     Clients.displayMessage(String.Format("Booking flight: {0}-{1} ...", to, from)); 
     Thread.Sleep(3000); 

     // Book return 
     Clients.displayMessage(String.Format("Booking flight: {0}-{1} ...", to, from)); 
     Thread.Sleep(2000); 

     // Some return value 
     Clients.displayMessage("Flight booked successfully."); 
    } 

    public void ProcessPendingEmails() 
    { 
     Clients.updateGaugeBar(10); 
     Thread.Sleep(2000); 

     Clients.updateGaugeBar(40); 
     Thread.Sleep(3000); 

     Clients.updateGaugeBar(64); 
     Thread.Sleep(2000); 

     Clients.updateGaugeBar(77); 
     Thread.Sleep(2000); 

     Clients.updateGaugeBar(92); 
     Thread.Sleep(3000); 

     Clients.updateGaugeBar(99); 
     Thread.Sleep(2000); 

     Clients.updateGaugeBar(100); 
    } 
} 

, 나는 bookingHub가 정의되어 있지, 나는에 null 참조 오류가있어주의 이 점.

무엇이 잘못 했습니까?

미리 감사드립니다.

+0

를 참조

namespace SampleWebApplication { public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { RouteTable.Routes.MapHubs(); } } } 

당신의 브라우저? –

+0

페이지의 소스 코드를 확인하고 모든 라이브러리가로드되고 있는지 확인하십시오. 한번 global.asax에서 허브 경로를 다시 매핑해야했기 때문에 한 번 같은 문제가있었습니다 (signalr에 문제가있을 수 있습니다.) –

답변

0

당신은 당신의 BookingHub 클래스에

[HubName("bookingHub")] 

, 속성 누락? 예 :

[HubName("bookingHub")] 
public class BookingHub : Hub 
{ 
    public void Send(String message) 
    { 

     // Call the addMessage method on all clients. 
     Clients.displayMessage(message); 
    } 
... 
+0

속성은 필수 항목이 아닙니다. –

관련 문제