SignalR和500错误
到目前为止,我一直在玩SignalR非常成功,但我发现了一种情况,我没有真正能够找到任何记录的参考或解决方案。SignalR和500错误
我有一个具有双重属性
public bool AddThing(Thing thing)
{
// add and notify client
}
public class Thing {
public Double Foo { get; set; }
}
如果我送东西对象随文字而不是数量的财产美孚
服务器理所当然地返回500错误类参数的服务器端功能{"hub":"ThingHub","method":"AddThing","args":[{"Foo":"bar"}],"state":{},"id":1}
由于这发生在SignalR上下文启动之前,在客户端如何处理错误? Hub是否有任何特殊的回调或属性检查?服务器端需要做什么特别的事情吗?
谢谢!
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
。
这是一个非常明确和简洁的答案,我将其标记为这样,因为我还没有找到更好的解决方案。我仍然无法确定SignalR坐在asp.net管道中的位置,以及如何以有意义的格式捕获并返回上述错误。该文档还将$ .connection.error作为一个函数,而我可以找到并使用的是$ .connection.hub.error。不确定如果这是一个文档或理解错误。 – Jason 2012-07-24 12:21:27