0

当我每次尝试添加新的服务器回调函数时,我似乎无法让回调显示在 $.connection 服务器回调列表中。

我需要做什么来刷新 SignalR 生成并使用最新的服务器回调列表发送到客户端的 javascript。

我认为我应该能够为客户端添加一个服务器回调来调用和重建我的应用程序并启动一个新的 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);
    }

这是调试模式下客户端的快照 调试快照

4.) 最后这里是我需要服务器调用的客户端回调,以便新加入的组成员可以更新他们当前组成员的列表。

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

我认为我应该能够添加任意数量的服务器回调,并且它们应该出现在下一次构建和重新启动 Google Chrome 的新实例时;然而,这种情况并非如此。我需要做什么才能让新添加的服务器回调显示在客户端的可用服务器回调中?这对我来说并没有,但我在想这可能是兑现问题还是什么?

唯一可用的回调是提供的快照中显示的回调。目前我只有两个回调,一个是在快照中看到的,一个是不可见的。

4

1 回答 1

0

在此过程中,我从生成的 JavaScript 文件中创建了一个 signalr-hubs.js 文件,该文件可以由我的集线器检索http://localhost:3250/signalr/hubs并向我的集线器添加新的服务器功能,但没有更新 signalr-hugs.js 文件。

此时,每次我添加新的服务器回调时,我都会通过将此 urlhttp://localhost:3250/signalr/hubs放入浏览器、处理代码、然后更新我的 signalr-hubs.js 文件来检索新生成的代理。

于 2013-03-15T19:11:22.747 回答