2012-11-22 86 views
2

我有興趣使用SignalR爲我的應用程序中的一些長時間運行的進程提供更好的用戶體驗,並剛剛創建了我的第一個測試SignalR項目。我創建了一個空的Web項目,然後使用NuGet安裝SignalR.Sample包。 StockTicker.html頁面示例完美地工作。然後我創建了我自己的Hub和測試頁面。SignalR - 無法加載集線器方法

using System.Threading; 
using Microsoft.AspNet.SignalR.Hubs; 

namespace SignalR.Test 
{ 
    [HubName("testHub")] 
    public class TestHub : Hub 
    { 
     public void LongRunningProcess() 
     { 
     Thread.Sleep(1000); 
     this.Clients.Caller.updateStatus("25% Completed"); 
     Thread.Sleep(1000); 
     this.Clients.Caller.updateStatus("50% Completed"); 
     Thread.Sleep(1000); 
     this.Clients.Caller.updateStatus("75% Completed"); 
     Thread.Sleep(1000); 
     this.Clients.Caller.updateStatus("Done"); 
     } 
    } 
} 


<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>SignalR - Long Running Process</title> 
</head> 
<body> 
    <h1>Long Running Process</h1> 

    <p>Status:</p> 

    <ul id="status"> 
     <li>Loading hub...</li> 
    </ul> 

    <script src="/bundles/jquery"></script> 
    <script src="/Scripts/jquery.signalR-1.0.0-alpha2.js"></script> 
    <script src="/signalr/hubs"></script> 
    <script type="text/javascript"> 
     $(function() { 
     var hub = $.connection.testHub; 

     hub.updateStatus = function (message) { 
      $("#status").append("<li>" + message + "</li>"); 
     }; 

     $.connection.hub.start().done(function() { 
      $("#status").children().first().text("Hub loaded."); 
      hub.longRunningProcess(); 
     }) 
     .fail(function() { 
      $("#status").children().first().text("Hub failed"); 
     }); 
     }) 
    </script> 
</body> 
</html> 

當我運行頁面,我得到以下(螢火蟲)錯誤:

TypeError: hub.longRunningProcess is not a function 
    hub.longRunningProcess(); 

如果我期待在/ signalr /集線器我看到下面的腳本對文件的末尾:

signalR.testHub = signalR.hub.createHubProxy('testHub'); 
signalR.testHub.client = { }; 
signalR.testHub.server = { 
    longRunningProcess: function() { 
     return signalR.testHub.invoke.apply(signalR.testHub, $.merge(["LongRunningProcess"], $.makeArray(arguments))); 
    } 
}; 

任何意見/指針我哪裏去錯了將不勝感激。

回答

4

我發現了這個問題。客戶端腳本應如下所示:

 $(function() { 
     var hub = $.connection.testHub; 

     hub.client.updateStatus = function (message) { 
      $("#status").append("<li>" + message + "</li>"); 
     }; 

     $.connection.hub.start().done(function() { 
      $("#status").children().first().text("Hub loaded."); 
      hub.server.longRunningProcess(); 
     }) 
     .fail(function() { 
      $("#status").children().first().text("Hub failed"); 
     }); 
     }) 

請注意將.client和.server屬性添加到集線器方法聲明中,例如, hub.client.updateStatus()和hub.server.longRunningProcess()

相關問題