2013-03-15 59 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文件来检索新生成的代理。