SignalR 在客户端有一些逻辑,您可以使用它来检查来自客户端的服务器端集线器方法调用是否成功。
首先,要处理连接失败,您可以在集线器连接上使用错误处理程序(https://github.com/SignalR/SignalR/issues/404#issuecomment-6754425,http://www.asp.net/signalr /overview/guide-to-the-api/hubs-api-guide-javascript-client)像这样:
$.connection.hub.error(function() {
console.log('An error occurred...');
});
因此,当我通过在服务器端实现它来重新创建您的场景时:
public bool AddThing(Thing thing)
{
return true;
}
public class Thing
{
public Double Foo { get; set; }
}
..然后从客户端调用它:
myHub.addThing({"Foo":"Bar"});
error
调用处理函数,并将文本打印An error occurred...
到控制台。
你可以做的另一件事——因为在服务器上调用一个方法会返回一个 jQuery 延迟对象(https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client-Hubs),你可以链接几个回调调用的返回对象。例如文档给出了这个示例:
myHub.someMethod()
.done(function(result) {
})
.fail(function(error) {
});
应该注意的是,fail
只有在集线器调用期间出现错误时才会调用它(例如,在服务器端方法中引发异常) - https://github.com/SignalR/SignalR/issues/404#issuecomment-6754425。
最后一点 - 我认为这是一个有趣的问题,因为在我看来,它是 JSON 序列化程序引发异常 - 例如,在你的情况下:
Newtonsoft.Json.JsonSerializationException: Error converting value "Bar" to type 'System.Double'. Line 1, position 54. ---> System.FormatException:
...但是可以肯定的是,如果有比我上面描述的更好的方法来处理这种情况,那可能会很有趣——比如能够分辨出哪个确切的集线器调用导致了500 Internal Server Error
.