2013-03-15 57 views
0

當我試圖添加一個新的服務器回調函數時,我似乎無法獲得顯示在$ .connection服務器回調列表中的回調。SignalR不添加服務器回調

我需要做什麼來刷新SignalR生成併發送給客戶端的最新的服務器回調列表。

我認爲我應該能夠爲客戶端添加服務器回調以調用並重建我的應用並啓動Google Chrome的新實例,並且新添加的服務器回調將位於可用回調列表中在客戶端。

例如,這裏正是我所做的。

1.)客戶加入一個組,每個人都會收到通知。

 public override Task OnConnected() 
    { 
     string pid = this.Context.QueryString["pid"], 
       uid = this.Context.QueryString["uid"], 
       ispro = this.Context.QueryString["ispro"]; 

     Groups.Add(this.Context.ConnectionId, pid); 

     return Clients.Group(pid).joined(new cmsg(Context.ConnectionId, UtilCommon.GetUserMini(new Guid(uid), bool.Parse(ispro)))); 
    } 

2)在客戶端的連接功能從服務器

 this.collaborateHub.client.joined = function (cmsg) { 
     // 
     that.chatBox.addAttendee(cmsg); 

     //let the new attendee know about you 
     if (cmsg.cnnid !== that.chatBox.getMeAttendee().cnnid) { 
      that.chatBox.getMeAttendee().newbieid = cmsg.cnnid; 
      debugger 
      this.server.addMeNewbie(that.chatBox.getMeAttendee()); 
     }; 
    }; 

3)既然叫,如果有人加入了,這是不是當前打開的窗口的用戶來說,這意味着如何加入的人是我以外的人,所以我需要再次呼叫服務器並通知新加入的用戶將我加入他們的用戶列表。我沒有必要跟上當前在數據庫中給予給定組的用戶的簽名,我只是將組中的每個簽名用作分佈式數據庫,讓他們管理他們自己的信息。

所以,我需要調用名爲addMeNewbie的服務器回調;但是,此回調函數在列表中不可用。

public Task addMeNewbie(cmsg cmsg) { 

     return Clients.Client(cmsg.newbieid).addCurrAttendee(cmsg); 
    } 

下面是客戶端的調試模式 Debug Snapshot

4)快照最後在這裏是客戶端回調,我需要的服務器調用,這樣新加入的組成員可以更新當前組成員的列表。

 this.collaborateHub.client.addCurrAttendee = function (cmsg) { 
     debugger 
     that.chatBox.addAttendee(cmsg); 
    }; 

我認爲我應該可以,因爲我想添加儘可能多的服務器回調,他們應該出現在未來建設和谷歌Chrome瀏覽器的新實例重新啓動;然而,這種情況並非如此。我需要做些什麼才能讓新添加的服務器回調顯示在客戶端的可用服務器回調中? 這並不是因爲我,但我想也許這是一個兌現問題或什麼?

唯一可用的回調是所提供的快照中顯示的回調。目前我只有兩個回調,一個是你在快照中看到的回調,另一個是不可見的回調。

回答

0

在某個程序中,我從生成的JavaScript文件創建了一個signalr-hubs.js文件,該文件可以通過http://localhost:3250/signalr/hubs檢索,並且將新的服務器功能添加到我的集線器,但不更新signalr-hugs.js文件。

在這一點上,每當我添加一個新的服務器回調,我通過將這個url http://localhost:3250/signalr/hubs放入瀏覽器,處理代碼,然後更新我的signalr-hubs.js文件來檢索新生成的代理。