SignalR - Javascript Hub Proxies

Hit*_*esh 0 signalr signalr-hub

使用SignalR时,在HTML中需要引用以下两个脚本:

<script src="~/Scripts/jquery.signalR-1.0.0.js"></script>
<script src="/signalR/hubs"></script>
Run Code Online (Sandbox Code Playgroud)

第二个是用于自动生成的JavaScript集线器代理.一切正常.但是,如果以某种方式禁用JavaScript Hub Proxy生成会发生什么,可能是通过设置DisableJavaScriptProxies属性(https://github.com/SignalR/SignalR/commit/7e974f4e92551a26f3e3e0a166e1dbf6c064e850).禁用JavaScript代理生成并尝试在HTML中引用/ signalr/hubs时,会出现JavaScript错误:

Uncaught Error: SignalR: JavaScript Hub proxy generation has been disabled.
Run Code Online (Sandbox Code Playgroud)

当我在浏览器中浏览到该路径时,响应为:

throw new Error('SignalR: JavaScript Hub proxy generation has been disabled.')
Run Code Online (Sandbox Code Playgroud)

如果禁用JavaScript代理生成,$.connection.myHub.clientJavaScript代码将如何工作?为了让它有效,还需要做些什么?我得到的JavaScript错误是

Uncaught TypeError: cannot read property 'client' of undefined.
Run Code Online (Sandbox Code Playgroud)

N. *_*len 6

您可以自己创建代理.看到这里.

这也在SignalR源中的示例项目中完成.请参阅MouseTracking示例.JS for it(从这里):

/// <reference path="../../Scripts/jquery-1.8.2.js" />
/// <reference path="../../Scripts/jquery.signalR.js" />

$(function () {
    var hubConnection = $.hubConnection('/signalr', { qs: 'test=1', logging: false, useDefaultPath: false }),
        hub = hubConnection.createHubProxy('mouseTracking');

    hub.on('move', updateCursor);

    function updateCursor(id, x, y) {
        var e = document.getElementById(id);
        if (!e) {
            e = $('<div id="' + id + '"><i class="icon-screenshot"></i>' + id + '</div>').appendTo(document.body);
            e.css('position', 'absolute');
        }
        else {
            e = $(e);
        }
        e.css({ left: x + 15, top: y + 15 });
    }

    hubConnection.logging = true;
    hubConnection.start({ transport: activeTransport })
        .pipe(function () {
            return hub.invoke('join');
        })
        .pipe(function () {
            $(document).mousemove(function (e) {
                hub.invoke('move', e.pageX, e.pageY);
                updateCursor(hub.state.id, e.pageX, e.pageY);
            });
        });
});
Run Code Online (Sandbox Code Playgroud)