SignalR教程10-浅谈JavaScript客户端代理

Keywords:
对于使用SignalR service,js客户端可以选择使用代理或者不使用代理。使用代理可以简化连接的代码。如果使用代理调用服务器方法,代码语法看上去好像在执行一个本地方法。例如调用写成 serverMethod(arg1, arg2) 而不是 invoke('serverMethod', arg1, arg2).并且代理提供了一些智能提示和错误纠正。
例如,假设在服务器上有下面的代码。
public class ContosoChatHub : Hub
{
    public void NewContosoChatMessage(string name, string message)
    {
        Clients.All.addContosoChatMessageToPage(name, message);
    }
}
在客户端上,使用生成的代理
var contosoChatHubProxy = $.connection.contosoChatHub;
contosoChatHubProxy.client.addContosoChatMessageToPage = function (name, message) {
    console.log(name + ' ' + message);
};
$.connection.hub.start().done(function () {
    // Wire up Send button to call NewContosoChatMessage on the server.
    $('#newContosoChatMessage').click(function () {
         contosoChatHubProxy.server.newContosoChatMessage($('#displayname').val(), $('#message').val());
         $('#message').val('').focus();
     });
});
如不使用代理
var connection = $.hubConnection();
var contosoChatHubProxy = connection.createHubProxy('contosoChatHub');
contosoChatHubProxy.on('addContosoChatMessageToPage', function(name, message) {
    console.log(name + ' ' + message);
});
connection.start().done(function() {
    // Wire up Send button to call NewContosoChatMessage on the server.
    $('#newContosoChatMessage').click(function () {
        contosoChatHubProxy.invoke('newContosoChatMessage', $('#displayname').val(), $('#message').val());
        $('#message').val('').focus();
                });
    });

$.connection.hub和$.hubConnection()产生的对象是同一个对象。从例子中可以看出,当时用生成的代理$.connection.hub指的是connection object.这个和不是用代理的语法$.hubConnection()是一样的。如果使用生成代理,使用$.connection.hub可以同样访问连接对象。

什么时候适合使用代理?

如果一个客户端方法注册多个事件处理,则不能使用生成的代理.否则,可以选择使用代理。如果不使用代理,就不需要引用"signalr/hubs" URL。


作者:songshizhao 发表于:2017-11-17T07:18:30 访问量:209