生命周期事件
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();