gpt4 book ai didi

c# - ServerPool 中的 MySqlClient 黑名单服务器

转载 作者:IT王子 更新时间:2023-10-29 00:36:29 26 4
gpt4 key购买 nike

在 .NET MySqlClient (6.9.5.0) 中,当服务器池中的 MySQL 服务器没有响应(可能是由于临时网络问题)时,服务器是否被列入黑名单或永久绕过?在我们的日志记录中,我们注意到抛出了身份验证错误:

MySql.Data.MySqlClient.MySqlException (0x80004005): Authentication to host '<HOST>' for user '<USER>' using method 'mysql_native_password' failed with message: Reading from the stream has failed. ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Reading from the stream has failed. ---> System.IO.EndOfStreamException: Attempted to read past the end of the stream.

此错误发生后,每次尝试写入或读取数据库都会失败,并显示此错误消息:

MySql.Data.MySqlClient.MySqlException (0x80004005): No available server found.

有什么想法吗?当数据库服务器移动到运行我们的应用程序的同一主机上时,问题不再出现。

最佳答案

这里有两件事让我印象深刻:

  1. 您的异常的性质:System.IO.EndOfStreamException:试图读取超过流的末尾。

  2. 事实上,当数据库与数据库位于同一台机器上时调用应用程序,您不会遇到问题。

对我来说,这告诉我正在发生与传输或网络相关的错误,这会中断您的直播。一旦发生这种情况,您的连接将被重置,因此对数据库的后续调用将失败。

我会 try catch EndOfStreamException,并尝试优雅地关闭和重新打开连接。像下面的东西。如果这允许后续调用成功,那么您已经发现了问题......尽管请记住,在此结构中,原始调用(在 try block 内)不会再次被调用。在进行后续调用之前,您还需要正确地重新创建并打开您的连接,因为它现在总是被释放在 finally block 中。

try
{
//your work
}
catch (System.IO.EndOfStreamException ex)
{
System.Diagnostics.Debug.WriteLine("Stream exception caught: " + ex.Message.ToString());


}
finally
{
if(myConnection != null)
{
myConnection.Close();
myConnection.Dispose();
}
}

关于c# - ServerPool 中的 MySqlClient 黑名单服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28113030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com