在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); }); }