signalr-hub – 未调用SignalR JS客户端方法

我无法获得SignalR服务器端Hub代码调用JS客户端方法.反过来工作正常 – 所以当我的客户端向服务器发送消息时,它按预期交付.我一直都非常小心避免明显的陷阱,但我想我仍然会忽略一些东西.这是我的代码

来自MessageHub.cs:

public bool SendMessage( ClientMessage message )
{
    ...
    Clients.All.addMessage("my message");
    ...
}

使用Javascript:

$.connection.hub.start()
    .done(function () {
        messageHub = $.connection.message;

        // addMessage is never invoked.
        messageHub.client.addMessage = function (message) {
            alert('message added');
        };

        /* // I tried this based on some sample code but still not invoked.
        messageHub.addMessage = function (message) {
            alert('message added');
        };
        */

        // This works as expected.
        messageHub.server.registerUser(userId);
        ...
    });

如上所述,我找不到任何明显的设置缺陷,但这里有一些可能的相关点:

>建立连接并调用服务器端方法.
>这可能是无关紧要的,但我尝试强制不同的传输而不改变行为.
>客户端方法名称在任何时候都不会与服务器方法名称冲突.
>我也尝试向特定的客户端连接发送消息(在这种情况下,这实际上是目标).
>我在客户端和服务器上都启用了日志记录,但在任何一种情况下都没有看到任何相关内容.

所以,鉴于上述情况,我错过了一些明显的东西吗?如果没有,识别故障点的最佳方法是什么?

附:这与问题没有特别的关系,但是,由于某些原因,fiddler不再从我的任何浏览器捕获任何流量,这使调试WS或HTTP流量有点挑战 – 我猜这是Windows 8的事情.. .

解决方法

所以,答案实际上非常简单(尽管从上一个版本开始我已经从1.0.0.0-rc1升级到1.0.0.0 – 但我相当确定这并没有显着改变这种情况).

在这里找到了答案:https://stackoverflow.com/a/15074002/32935(请注意,具体来说,我的解决方案是提供第一个答案 – 尽管第二个答案帮助我找出原因).

从本质上讲,对于那些不想回答原始答案的人,我必须在针对连接调用start()方法之前设置我的客户端方法,而不是像我在做的那样使用done()回调.这是一个例子:

$.connection.message.client.addMessage = function (message) {
    alert( 'Now it works!' );
};

$.connection.hub.start()
    .done(function () {
        console.log( 'Connection established!' );
    });

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...