例如,假设在服务器上有下面的代码。
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。