个人资料

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

SignalR教程16-js客户端处理连接生命周期事件和处理错误

分类:

生命周期事件

SignalR提供了您可以处理的以下连接生命周期事件:

connecting

connected

connectionSlow

disconnected

reconnected

例如,如果想警告用户连接可能延迟,即处理connectionSlow事件,如下:

//使用代理
$.connection.hub.connectionSlow(function () {
    console.log('We are currently experiencing difficulties with the connection.')
});
//不用代理
var connection = $.hubConnection();
connection.connectionSlow(function () {
    console.log('We are currently experiencing difficulties with the connection.')
});

处理错误

SignalR JavaScript客户端提供了一个错误事件,您可以添加一个处理程序。 还可以使用失败方法为由服务器方法调用导致的错误添加处理程序。

如果没有明确地在服务器上启用详细的错误消息,则在错误包含关于错误的最少信息之后,SignalR返回的异常对象。 例如,如果对newContosoChatMessage的调用失败,则错误对象中的错误消息包含“调用Hub方法有错误contosoChatHub.newContosoChatMessage”。 由于安全原因,建议不要将生产中的详细错误消息发送到客户端,但是如果要为故障排除目的启用详细的错误消息,请在服务器上使用以下代码。

var hubConfiguration = new HubConfiguration(); 
hubConfiguration.EnableDetailedErrors = true; 
app.MapSignalR(hubConfiguration);

下面展示了如何为错误添加一个事件处理:

//使用代理
$.connection.hub.error(function (error) {
    console.log('SignalR error: ' + error)
});
//不使用代理
var connection = $.hubConnection();
connection.error(function (error) {
    console.log('SignalR error: ' + error)
});

以下示例显示如何处理来自方法调用的错误。

//使用代理
contosoChatHubProxy.newContosoChatMessage(userName, message)
    .fail(function(error) { 
        console.log( 'newContosoChatMessage error: ' + error) 
    });
//不使用代理
contosoChatHubProxy.invoke('newContosoChatMessage', userName, message)
    .fail(function(error) { 
        console.log( 'newContosoChatMessage error: ' + error) 
    });

如果一个方法调用失败,那么也会引发错误事件,所以你的代码在错误方法处理程序和.fail方法回调中被执行。

启用客户端日志记录

要在连接上启用客户端日志记录,请在调用start方法建立连接之前,在连接对象上设置日志记录属性。

//启用日志。使用代理
$.connection.hub.logging = true;
$.connection.hub.start();
//不用代理
var connection = $.hubConnection();
connection.logging = true;
connection.start();

songshizhao
最初发表2017/11/17 20:46:54 最近更新2017/11/17 20:46:54 6422
为此篇作品打分
10
   评论