个人资料

跳过导航链接首页 > 博客列表 > 博客正文

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

分类:
要从客户端调用服务器方法,如果未使用生成的代理,使用生成的代理的服务器属性或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/17 20:29:11 最近更新2017/11/17 20:29:11 6473
为此篇作品打分
10
   评论