3 分钟无操作后,Firestore“流已删除”错误
Posted
技术标签:
【中文标题】3 分钟无操作后,Firestore“流已删除”错误【英文标题】:Firestore "Stream Removed" Error After 3 Minutes Doing Nothing 【发布时间】:2022-01-23 12:10:49 【问题描述】:我正在开发使用 Google Cloud Firestore 作为数据库的 .NET Windows 窗体应用程序。我创建了函数(使用 Google.Cloud.Firestore NuGet Package 函数)来读取/写入数据库文档。一切正常,但如果应用程序不使用任何读/写功能超过 2-3 分钟,我会收到此错误:Grpc.Core.RpcException: 'Status(StatusCode="Unknown", Detail="Stream removed"
但如果每 1-2 分钟使用读/写功能,我不会在短时间内得到这个错误。我可以创建一个线程函数来保持我的数据库连接处于活动状态,但这会导致不必要的读取或写入。我该如何解决?
重现错误
string Path = AppDomain.CurrentDomain.BaseDirectory + @"AdminSDKName.json";
Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", Path);
FirestoreDb DataBase = FirestoreDb.Create("DatabaseID");
Query QRef = DataBase.Collection("CollectionID").Document("DocID").Collection("CollectionID").WhereEqualTo("isTrue", false);
QuerySnapshot snap = await QRef.GetSnapshotAsync();
Console.WriteLine(snap.Count.ToString());
Console.WriteLine("Waiting for 5 minutes..");
Task.Delay(300000).Wait();
Console.WriteLine("Waited for 5 minutes");
snap = await QRef.GetSnapshotAsync();
Console.WriteLine(snap.Count.ToString());
Console.WriteLine("Done without any error.");
“等待 5 分钟”行后出现错误。
更新
如果我将计算机网络连接到手机网络,则不会出现任何错误。
【问题讨论】:
这个Github issue link 解释说问题出在使用默认开发证书启用的 GRPC 服务器上,如果有帮助,请告诉我。 @ZeenathSN 我没有使用 API.NET,他提到“需要 SSL”。有没有办法可以更改 FirestoreDB 客户端设置? 【参考方案1】:我感觉您在这里看到了 Firestore 连接管理的一部分。如果这确实是我们所看到的,则应在需要时重新建立连接,并且您无法通过 API 对此进行任何更改。
【讨论】:
我更改了我的网络,但没有收到错误消息。这与我的网络有关。有东西关闭了我的 TCP 连接,但我不知道它是什么。 嗯...有趣。它可能是客户端和服务器之间的任何东西,但我希望 Firestore SDK 在许多此类情况下处理恢复。除了正在记录的错误之外,还有其他功能问题吗? 不,它只是“流已删除”错误。防火墙或其他防御者可能会导致该问题? 是的,可能是这样。但是,在您看到该消息后,Firestore SDK 是否工作? 如何查看?【参考方案2】:解决方案是找出过早关闭流的原因。 Grpc.Core每分钟发送一次keepalive数据包的配置可以在Github找到。
如果可以的话,我建议您在几个不同的网络上尝试该代码,保持其他所有内容相同,看看您是否可以识别关闭连接的原因。
【讨论】:
我用不同的网络(移动网络)试过了,但我不知道如何识别正在关闭的连接。【参考方案3】:请参考User guide。
如果这不能解决,请使用最少的可重现代码更新您的问题。
【讨论】:
我已经更新了问题。您可以重现错误。以上是关于3 分钟无操作后,Firestore“流已删除”错误的主要内容,如果未能解决你的问题,请参考以下文章