SignalR教程15-在js客户端调用服务器方法

Keywords:
要从客户端调用服务器方法,如果未使用生成的代理,使用生成的代理的服务器属性或Hub代理上的invoke方法。 返回值可以时可是复杂的对象。
在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);
    });
}

作者:songshizhao 发表于:2017-11-17T08:29:11 访问量:255