mariadb Try / catch无法在远程Ubuntu计算机上捕获

blpfk2vs  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(157)

我有点困惑,因为我的应用程序没有捕捉到异常。然而,这只发生在租用的远程机器上。机器运行Ubuntu 22.04和最新的dotnet运行环境。
在我的本地Windows机器或Docker上一切都按预期工作。如果无法在那里建立连接,您将在catch块中结束。(经典!在我的机器上工作)
await connection.OpenAsync()期间发生错误,整个应用程序被终止。输出窗口的调试日志中输出以下内容:

Exception thrown: 'System.IO.IOException' in System.Private.CoreLib.dll
The program '[77028] dotnet' has exited with code 0 (0x0).

对于数据库连接,我使用与Dapper连接的https://mysqlconnector.net/连接器。
我完全不明白的是,该方法还用于另一个应用程序,并且在同一台机器上工作时没有问题。

行为奇怪的方法

private async Task<MySqlConnection> GetDbConnectionAsync()
{
    Exception? connectionException = default;
    foreach (var connectionString in _connectionStrings)
    {
        var dbHost = connectionString.Split(';')
                                     .First(s => s.Contains("Server", StringComparison.OrdinalIgnoreCase))
                                     .Split('=')[1];
        try
        {
            // Open database connection async
            var connection = new MySqlConnection(connectionString);
            await connection.OpenAsync(); // <-- THIS CRASHING THE APPLICATION

            // Set connection session variables
            await SetSessionVars(connection);

            return connection;
        }
        catch (Exception ex)
        {
            connectionException = ex;
            _log.LogError(ex,
                          $"[Data Access Layer]{Environment.NewLine}" +
                          $"Connection to database failed. Tried host: {dbHost}. Exception Message: {ex.Message}");
        }
    }

    _log.LogError($"[Data Access Layer]{Environment.NewLine}" +
                  "All configured database nodes are not reachable. Connection failure. Wait for 5 seconds and will retry.");
    await Task.Delay(5000);

    throw new
        InvalidOperationException("[Data Access Layer] All configured database nodes are not reachable. Connection failure. Wait for 5 seconds and will retry.",
                                  connectionException);
}

我真的很感谢所有的提示。

k4emjkb1

k4emjkb11#

好的,我的错误。机器已经有一个Blazor应用程序在同一个Kestrel端口5000上运行。对于所有面临这样一个问题的人来说,在Debug -〉Windows -〉Exception settings菜单下设置为所有异常中断执行可能会非常有帮助。

由于BackgroundService已经启动并并行运行,因此很难看出Kestrel Web服务器尚未在后台完全启动,并且在BackgroundService尝试连接到数据库时始终会发生IoException。
不要忘记重置异常设置,这样调试体验就不会受到影响。

相关问题