2013-07-07 55 views
1

我現在面臨一個奇怪的問題,我能夠調用服務器功能,但作爲回報,當我試圖調用客戶端功能,但它不叫 難道我做錯了什麼或錯過了一些代碼或配置,以我使用Visual Studio 2010和發展中國家在全球ASAX一個Web應用程序SignalR,客戶方的功能沒有得到所謂的

服務器代碼只是一個簡單的類

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using Microsoft.AspNet.SignalR; 

namespace SignalRDemo 
{ 
    public class MyHub:Hub 
    { 
     public void GetMessage(string msg) 
     { 

      Clients.All.getMsg1("Got :"+msg); 

     } 

    } 
}` 

我有

protected void Application_Start(object sender, EventArgs e) 
{ 
    RouteTable.Routes.MapHubs(); 
} 

客戶端代碼我只需點擊BTN,它調用如預期的服務器功能的GetMessage,但換來的卻沒有調用getMsg1

$(document).ready(function() { 
    debugger; 
    var chat = $.connection.myHub; 
    chat.getMsg1 = function (msg) { 
     debugger; 
     alert(msg); 
    }; 
    $("#btn").click(function() { 
     chat.server.getMessage("called"); 
    }); 

    $.connection.hub.start() 
}); 

我用Google搜索我發現,我們需要註冊的客戶端功能在開始之前,我做了樞紐康涅狄格州,但它仍然無法正常工作,也沒有它引發任何錯誤

回答

3

你爲什麼沒有執行你的客戶端功能的原因是因爲你的綁定是錯誤的。

變化:

chat.getMsg1 = function (msg) { 
    debugger; 
    alert(msg); 
}; 

chat.client.getMsg1 = function (msg) { 
    debugger; 
    alert(msg); 
}; 

另外一兩件事要注意的是一個很好的做法是,你應該總是綁定你的事件處理程序的一個連接已全面啓動。所以你可以寫下你的客戶代碼如下:

$(document).ready(function() { 
    debugger; 
    var chat = $.connection.myHub; 

    chat.client.getMsg1 = function (msg) { 
     debugger; 
     alert(msg); 
    }; 

    $.connection.hub.start().done(function() { 
     $("#btn").click(function() { 
      chat.server.getMessage("called"); 
     }); 
    }); 
}); 
+0

感謝隊友,救了我的一天! +我還有一個查詢。沒有任何限制。服務器功能,我可以打電話,因爲我打幹訓局課程的小快和客戶端的功能沒有excecuted該節數時間(基本上比爲5/10),但有一件事相當多的時間,我發現使用谷歌瀏覽我沒有問題,但使用IE8我有問題。是否由於在IE8中同時發生ajax呼叫的限制?應該不是IE8排隊Ajax調用你能幫我preferbly爲1.1.2幾個gooood鏈接?我GOOGLE了一下,但沒能找到 –

+0

爲SignalR最好的資源在http://www.asp.net/signalr發現SignalR 1.1.2血統鏈接。至於你的問題,如果你碰巧超過6 AJAX的最大同時在飛行中爲IE8你絕對不會得到所有發送到服務器郵件的呼叫。但是,對於在服務器上觸發的每種方法,最終都應該將所有響應傳達給客戶端。 –