我们从频道订阅的服务器事件中收到了比例较低但一致的404。这似乎只能通过我们的react接口在此处使用打字稿适配器:
https://docs.servicestack.net/typescript-server-events-client
如果我正确理解,则当客户端在超时设置之前未能通过心跳响应时,404返回,因此传递的ID无效。 (HeartbeatInterval = 60,IdleTimeout = 180)
查看应用程序见解可以在一小时内消除330个故障中的6个:
深入到请求中,似乎没有什么不对劲:
问题是,即使DebugMode和ReturnInnerException都为true,我也看不到服务器上有任何东西引发错误或报告中缺少ID。我已经对本地副本和服务器(具有连接到服务器事件源的c#客户端)运行了此文件,并且在使用提琴手观察时似乎无法返回404。
有没有一种方法可以捕获这些服务器端并查看为什么它们返回404?我只能假设发生故障并返回404,但是它被隐藏在服务堆栈日志处理层的后面。是否将此消息报告给日志记录层,因为它很可能会定期发生并因此被丢弃?
答案 0 :(得分:2)
心跳中的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
得到一个回调时订阅退订是这应该有助于查明为什么要被移除的订阅。
要帮助调试你可以升级到latest v5.4.1 on MyGet现在有embedded pdbs and source-link enabled这将让你轻松调试到ServiceStack源代码。