[英]SignalR client method does not invoke
我仍在學習SignalR。 在asp.net web Api中,我創建了一個簡單的集線器。 我創建了一個工廠,用於實例化與集線器的連接。
public class NotificationHub : Hub
{
public void Hello()
{
var x = "test";
Clients.All.hello(x);
}
}
客戶端。
.factory("NotificationHub", function(){
var NotificationHubFactory = {};
NotificationHubFactory.proxy = null;
var initialize = function(){
$.connection.hub.url = "http://localhost:18678/signalr";
$.connection.hub.start().done(function(response){
NotificationHubFactory.proxy = $.connection.notificationHub;
}).fail(function(error){
console.log(error);
});
};
initialize();
return NotificationHubFactory;
});
問題是當我嘗試執行此操作時。
NotificationHub.proxy.server.hello();
NotificationHub.proxy.client.hello = function(data){
console.log(data);
};
NotificationHub.proxy.client.hello
永遠不會被調用。 雖然如果我在集線器中放置一個斷點,則Clients.All.hello(x);
它會觸發,這意味着它無法在客戶端中找到hello
方法。
任何想法是什么問題?
在hub.start()
之前,您需要至少將一個事件處理程序附加到集線器。 否則,客戶端將永遠不會在中心注冊。 請參閱此處的文檔中的此說明 ...
通常,您在調用start方法建立連接之前注冊事件處理程序。 如果要在建立連接后注冊一些事件處理程序,則可以這樣做,但是在調用start方法之前,必須至少注冊一個事件處理程序。 原因之一是應用程序中可能有許多集線器,但是如果您只想使用其中一個集線器,則不想在每個集線器上觸發OnConnected事件。 建立連接后,指示集線器觸發OnConnected事件的集線器代理上存在客戶端方法。 如果您在調用start方法之前未注冊任何事件處理程序,則可以在Hub上調用方法,但是不會調用Hub的OnConnected方法,並且不會從服務器調用任何客戶端方法。
嘗試這個...
.factory("NotificationHub", function(){
var NotificationHubFactory = {};
NotificationHubFactory.proxy = null;
var initialize = function(){
$.connection.hub.url = "http://localhost:18678/signalr";
$.connection.notificationHub.client.hello = function () {};
$.connection.hub.start().done(function(response){
NotificationHubFactory.proxy = $.connection.notificationHub;
}).fail(function(error){
console.log(error);
});
};
initialize();
return NotificationHubFactory;
});
然后在調用服務器之前替換hello
處理程序...
NotificationHub.proxy.client.hello = function(data){
console.log(data);
};
NotificationHub.proxy.server.hello();
該代碼還有一個潛在的問題,因為hub.start()
是異步的,並且調用可以在Hub准備好之前進行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.