Signalr 信号机和500错误

Signalr 信号机和500错误,signalr,Signalr,到目前为止,我已经非常成功地与SignalR进行了交流,但我发现了一种情况,即我没有真正能够找到任何文档化的参考或解决方案 我有一个服务器端函数,其类参数具有Double属性 public bool AddThing(Thing thing) { // add and notify client } public class Thing { public Double Foo { get; set; } } 如果我发送一个带有文本而不是属性Foo的数字的Thing对象,服务器

到目前为止,我已经非常成功地与SignalR进行了交流,但我发现了一种情况,即我没有真正能够找到任何文档化的参考或解决方案

我有一个服务器端函数,其类参数具有Double属性

public bool AddThing(Thing thing)
{
    // add and notify client
}

public class Thing {
    public Double Foo { get; set; }
}
如果我发送一个带有文本而不是属性Foo的数字的Thing对象,服务器将正确地返回500错误

{"hub":"ThingHub","method":"AddThing","args":[{"Foo":"bar"}],"state":{},"id":1}
既然这是在signer上下文启动之前发生的,那么如何在客户端处理错误呢?集线器是否有任何特殊回调或属性要检查?我需要对服务器端的集线器做什么特殊的处理吗


谢谢

signar在客户端有一些逻辑,可以用来检查来自客户端的服务器端集线器方法调用是否成功

首先,要处理连接故障,可以在集线器连接(,)上使用错误处理程序,如下所示:

$.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"});
调用
错误
处理功能,并将文本
错误发生…
打印到控制台

您可以做的另一件事是——因为在服务器上调用一个方法会返回一个jQuery deferred对象(),所以您可以从调用中对返回的对象链接几个回调。例如,文档提供了以下示例:

myHub.someMethod()
     .done(function(result) {
     })
     .fail(function(error) {
     });
但是应该注意的是,
fail
仅在集线器调用过程中出现错误时才被调用(例如,在服务器端方法中引发异常)-

最后一点——我认为这是一个有趣的问题,因为在我看来,引发异常的是JSON序列化程序——例如,在您的案例中:

Newtonsoft.Json.JsonSerializationException:将值“Bar”转换为类型“System.Double”时出错。第1行,位置54。-->System.FormatException:


。。。但是可以肯定的是,如果有比我上面描述的更好的方法来处理这个场景,那可能会很有趣——比如能够判断是哪个确切的集线器调用导致了
500内部服务器错误

,这是一个非常清楚和简洁的答案,我会这样标记,因为我还没有找到更好的解决方案。我仍然无法确定asp.net管道信号器的位置,以及如何以有意义的格式捕获和返回上述错误。该文档还将$.connection.error作为函数引用,而我所能找到和使用的只是$.connection.hub.error。不确定这是否是文档或理解错误。