我们从来自频道订阅的服务器事件中收到比例较低但一致的404。这似乎只是通过我们的react接口实现的,它在这里使用了typescript适配器:
https://docs.servicestack.net/typescript-server-events-client
如果我理解正确的话,404会在客户端在超时设置之前没有响应心跳时返回,因此传递的id是无效的。(HeartbeatInterval =60,IdleTimeout = 180)
查看应用程序洞察发现,330个应用程序中有6个在一小时内失败:
深入研究请求,似乎没有什么不对劲的地方:
问题是,即使DebugMode和ReturnInnerException都为真,我也看不到服务器上的任何东西在报告中抛出错误或缺少is。我已经在一个本地副本和服务器上运行了这个程序,其中的c#客户端连接到服务器事件提要,在观察fiddler时,似乎无法返回404。
有没有一种方法可以捕获这些服务器端,并了解它们为什么返回404?我只能假设有一些东西失败并返回404,但它隐藏在服务堆栈日志处理层后面。这是否会报告给记录层,因为它可能会重复发生,因此被丢弃?
发布于 2019-02-01 02:39:23
心跳中的404响应是由subscription no longer existing引起的,您可以使用OnHeartbeatInit回调来检查每个心跳,例如:
Plugins.Add(new ServerEventsFeature
{
OnHeartbeatInit = req =>
{
var subscriptionId = req.QueryString["id"];
var subscription = req.TryResolve<IServerEvents>().GetSubscriptionInfo(subscriptionId);
if (subscription == null)
{
//... subscription no longer exists
}
}
});这将允许您检查404个心跳响应的订阅,但它不会告诉您订阅被删除的原因。
当订阅被取消订阅时,您可以处理OnUnsubscribe来获取回调,这应该有助于确定订阅被删除的原因。
为了帮助调试,您可以升级到现在具有embedded pdbs and source-link enabled的latest v5.4.1 on MyGet,它允许您轻松地调试到ServiceStack源代码中。
https://stackoverflow.com/questions/54461684
复制相似问题