2012-07-12 135 views
1

任何人都可以幫助我理解SignalR。 HubConnection不從服務器調用客戶端方法

以下代碼中的錯誤是客戶端方法不是從使用SignalR的服務器方法調用的。

我可以在點擊廣播按鈕時調用客戶端方法。 而且,當我從控制檯應用程序運行selfInvoke代碼時,事件被觸發。

服務器類駐留在不同程序集的CustomEvent處理程序中。

代碼聊天集線器如下:

namespace MySample.Handler 
{ 
    [HubName("chat")] 
    public class Chat: Hub 
    { 
     public void Send(string message) 
     { 
      Clients.addMessage(message); 
      // I tried this code as well: 
      // IHubContext context = GlobalHost.ConnectionManager.GetHubContext<Chat>(); 
      // context.Clients.addMessage("Hello world"); 
     } 
    } 
} 

調用聊天轂的源代碼如下:

namespace MySample.Handler 
{ 
    public static class SelfInvoke 
    { 
     public static void OnEvent() 
     { 
      var hubConnection = new HubConnection("http://localhost:48994"); 
      var chat = hubConnection.CreateProxy("chat"); 
      hubConnection.Start().Wait(); 
      string message1 = "Hai from OnEvent Handler!!!"; 
      chat.Invoke("Send", message1).Wait(); 
     } 
    } 
} 

的Index.aspx

<script src="Scripts/jquery-1.6.4.min.js" type="text/javascript"></script> 
    <script src="Scripts/jquery.signalR-0.5.2.min.js" type="text/javascript"></script> 
    <script src="/signalr/hubs" type="text/javascript"></script> 
    <script type="text/javascript"> 
     $(function() { 
      var chat = $.connection.chat; 

      chat.addMessage = function (message) { 
       $('#messages').append('<li>' + message + '</li>'); 
      }; 

      $("#broadcast").click(function() { 
       chat.send($('#msg').val()); 
      }); 
      $.connection.hub.start(); 
     }); 
    </script> 
    <input type="text" id="msg" /> 
    <input type="button" id="broadcast" value="broadcast" /> 
    <ul id="messages"> 
    </ul> 

的Index.aspx .cs [代碼後面的代碼..]

protected void Page_Load(object sender, EventArgs e) 
    { 
     SelfInvoke.OnEvent(); 
    } 

任何幫助,高度讚賞。

問候 文斯

+0

的JavaScript需要運行並裝載到接收消息。在頁面完全加載並連接到集線器後,您是否發送了消息? – davidfowl 2012-07-13 06:30:32

回答

0

更改JavaScript客戶端功能定義,以便它們是:

chat.client.XXX = function ...

代替:

chat.XXX = function ...

此外,您的通話切換到服務器成爲:

chat.server.send($('#msg').val());

代替:

chat.send($('#msg').val());

相關問題