gpt4 book ai didi

SignalR 和 500 错误

转载 作者:行者123 更新时间:2023-12-04 17:11:21 26 4
gpt4 key购买 nike

到目前为止,我一直在非常成功地使用 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}

由于这发生在 SignalR 上下文启动之前,如何在客户端处理错误? Hub 是否有任何特殊的回调或属性需要检查?我需要对服务器端的 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 Serializer - 例如,在您的情况下:
Newtonsoft.Json.JsonSerializationException: Error converting value "Bar" to type 'System.Double'. Line 1, position 54. ---> System.FormatException:
...但可以肯定的是,如果有比我上面描述的更好的方法来处理这种情况,那可能会很有趣——比如能够判断哪个确切的集线器调用导致了 500 Internal Server Error .

关于SignalR 和 500 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com