C# Unity Firebase实时数据库内部异常

C# Unity Firebase实时数据库内部异常,c#,firebase,unity3d,firebase-realtime-database,firebase-authentication,C#,Firebase,Unity3d,Firebase Realtime Database,Firebase Authentication,我使用firebase实时数据库保存游戏数据。当没有互联网,我试图发送JSON数据时,它经常给我内部错误。它似乎无休止地试图发送数据,但我只打了一次电话。这会导致控制台内出现错误日志垃圾 FirebaseDatabase.DefaultInstance.RootReference .Child("users") .Child(GetUserID()) .SetRawJsonValueAsync(json) .Continue

我使用firebase实时数据库保存游戏数据。当没有互联网,我试图发送JSON数据时,它经常给我内部错误。它似乎无休止地试图发送数据,但我只打了一次电话。这会导致控制台内出现错误日志垃圾

    FirebaseDatabase.DefaultInstance.RootReference
        .Child("users")
        .Child(GetUserID())
        .SetRawJsonValueAsync(json)
        .ContinueWith(task => {
            if (task.Exception != null || task.IsCanceled || task.IsFaulted) {
                Debug.LogError("FirebaseStorageService - Upload User Data - FAILED!");
            } else {
                Debug.Log("FirebaseStorageService - Upload User Data - DONE");
            }
        });
我希望进入传递给ContinueWith的回调方法内部,并能够在那里处理异常。这似乎是“任务。例外”我应该有的。我也不能去那个街区

我反复收到的错误消息:

09-13 11:50:51.777 30555 31681 E Unity   : 09/13/2018 08:50:51 [Error] WebSocket: ws_5 - WebSocketException during handshake
09-13 11:50:51.777 30555 31681 E Unity   : Firebase.Database.Internal.TubeSock.WebSocketException: unknown host: cooking-game-88ssd.firebaseio.com ---> System.Net.Sockets.SocketException: No such host is known
09-13 11:50:51.777 30555 31681 E Unity   :   at System.Net.Dns.GetHostByName (System.String hostName) [0x00000] in <filename unknown>:0
09-13 11:50:51.777 30555 31681 E Unity   :   at System.Net.Dns.GetHostEntry (System.String hostNameOrAddress) [0x00000] in <filename unknown>:0
09-13 11:50:51.777 30555 31681 E Unity   :   at Firebase.Database.Internal.TubeSock.WebSocket.GetIpAddress (System.String hostName) [0x00000] in <filename unknown>:0
09-13 11:50:51.777 30555 31681 E Unity   :   --- End of inner exception stack trace ---
09-13 11:50:51.777 30555 31681 E Unity   :   at Firebase.Database.Internal.TubeSock.WebSocket.CreateSocket () [0x00000] in <filename unknown>:0
09-13 11:50:51.777 30555 31681 E Unity   :   at Firebase.Database.Internal.TubeSock.WebSocket.RunReader () [0x00000] in <filename unknown>:0
更新2:

09-13 11:50:51.777 30555 31681 E Unity   : 09/13/2018 08:50:51 [Error] WebSocket: ws_5 - WebSocketException during handshake
09-13 11:50:51.777 30555 31681 E Unity   : Firebase.Database.Internal.TubeSock.WebSocketException: unknown host: cooking-game-88ssd.firebaseio.com ---> System.Net.Sockets.SocketException: No such host is known
09-13 11:50:51.777 30555 31681 E Unity   :   at System.Net.Dns.GetHostByName (System.String hostName) [0x00000] in <filename unknown>:0
09-13 11:50:51.777 30555 31681 E Unity   :   at System.Net.Dns.GetHostEntry (System.String hostNameOrAddress) [0x00000] in <filename unknown>:0
09-13 11:50:51.777 30555 31681 E Unity   :   at Firebase.Database.Internal.TubeSock.WebSocket.GetIpAddress (System.String hostName) [0x00000] in <filename unknown>:0
09-13 11:50:51.777 30555 31681 E Unity   :   --- End of inner exception stack trace ---
09-13 11:50:51.777 30555 31681 E Unity   :   at Firebase.Database.Internal.TubeSock.WebSocket.CreateSocket () [0x00000] in <filename unknown>:0
09-13 11:50:51.777 30555 31681 E Unity   :   at Firebase.Database.Internal.TubeSock.WebSocket.RunReader () [0x00000] in <filename unknown>:0

Firebase 4.2版

虽然显然没有达到您的预期,但仍按预期工作。:-)

只有在以下情况下,任务才会完成:

  • 写入操作提交到服务器上的磁盘
  • 或者写入被(服务器上的安全规则)拒绝
Firebase SDK不会将丢失的连接视为致命错误。它保留一个挂起的写入操作队列,并重试这些操作,直到它们在服务器上成功/失败。只有到那时,任务才能完成

当您的连接偶尔中断(即移动时在移动设备上)时,这通常非常好,因为Firebase会自动处理间歇性连接丢失


如果您希望您的代码在没有连接的情况下甚至不尝试编写,那么您需要使用平台的internet检测API,或者使用path来确保在尝试编写之前已连接到Firebase后端。您通常会将后者置于全局状态,然后在写入数据库之前进行检查。

这也可能是由于路径(
.Child
)名称中的无效字符造成的

您可以通过手动添加数据来测试无效字符。如果看到“路径包含无效字符”,它将抛出内部异常



在我的例子中,我必须将类似
House-content-324xn4.txt的字符串更改为简单的
House-content-324xn4

这对所有版本的Firebase都是一样的吗?完成侦听器的处理和
的逻辑自推出以来没有实质性的改变。