在Hub上传入方法名称的骆驼版本。 SignalR自动进行此更改,以便JavaScript代码可以符合JavaScript约定。
以下示例显示如何调用不具有返回值的服务器方法,以及如何调用具有返回值的服务器方法。
服务器上代码如下:
public class ContosoChatHub : Hub
{
public void NewContosoChatMessage(ChatMessage message)
{
Clients.All.addContosoChatMessageToPage(message);
}
}
服务器上定义传入符合对象的原型
public class ChatMessage { public string UserName { get; set; } public string Message { get; set; } }
使用代理调用服务器方法
contosoChatHubProxy.server.newContosoChatMessage({ UserName: userName, Message: message}).done(function () {
console.log ('Invocation of NewContosoChatMessage succeeded');
}).fail(function (error) {
console.log('Invocation of NewContosoChatMessage failed. Error: ' + error);
});
不用代理
contosoChatHubProxy.invoke('newContosoChatMessage', { UserName: userName, Message: message}).done(function () {
console.log ('Invocation of NewContosoChatMessage succeeded');
}).fail(function (error) {
console.log('Invocation of NewContosoChatMessage failed. Error: ' + error);
});
注意:如果在服务器端使用了HubMethodName修饰,那么在客户端就不需要将方法名称改为小驼峰。上面的例子调用了一个无返回值的服务器方法,下面调用一个有返回值的服务器方法:
public class StockTickerHub : Hub
{
public IEnumerable<Stock> GetAllStocks()
{
return _stockTicker.GetAllStocks();
}
}
public class Stock
{
public string Symbol { get; set; }
public decimal Price { get; set; }
}
//使用代理:
function init() {
return stockTickerProxy.server.getAllStocks().done(function (stocks) {
$.each(stocks, function () {
var stock = this;
console.log("Symbol=" + stock.Symbol + " Price=" + stock.Price);
});
}).fail(function (error) {
console.log('Error: ' + error);
});
}
//不使用代理
JavaScriptCopy
function init() {
return stockTickerProxy.invoke('getAllStocks').done(function (stocks) {
$.each(stocks, function () {
var stock = this;
console.log("Symbol=" + stock.Symbol + " Price=" + stock.Price);
});
}).fail(function (error) {
console.log('Error: ' + error);
});
}