SignalR和500错误

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-6754425http://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

+0

这是一个非常明确和简洁的答案,我将其标记为这样,因为我还没有找到更好的解决方案。我仍然无法确定SignalR坐在asp.net管道中的位置,以及如何以有意义的格式捕获并返回上述错误。该文档还将$ .connection.error作为一个函数,而我可以找到并使用的是$ .connection.hub.error。不确定如果这是一个文档或理解错误。 – Jason 2012-07-24 12:21:27