У меня есть 500 компьютеров, которые подключаются к серверу MySql. Большинство из них работают нормально, за исключением одной группы из примерно 30 компьютеров со странным поведением. Иногда они могут подключиться к MySql, а иногда нет. Я использую приложение .NET 8.0 и MySqlConnector.
dbConnection = new MySqlConnector.MySqlConnection(conString);
dbConnection.Open(); // exception here: "got timeout reading communication packets"
Как хорошие, так и неправильные захваты одинаковы до пакета ACK. Вы можете увидеть 10-секундную задержку при неправильной попытке после пакета ACK № 249. Я не знаю, чего ждет клиент, потому что при хорошей попытке такой задержки нет после пакета ACK № 650, и клиент немедленно отправляет еще один пакет.
Неправильная попытка захвата:
Неправильный журнал попыток:
Хорошая попытка захвата:
Журнал удачных попыток:
Группа этих компьютеров находится за одним маршрутизатором, но я не знаю, может ли этот маршрутизатор вызвать какие-либо проблемы, поскольку, судя по записям, похоже, что клиент вызывает задержку.
Попробуйте Net 7, в которой нет ошибок.
Мы не размещаем здесь изображения отладочной информации.
В коде вы можете видеть, что следующее, что происходит после «создания атрибутов соединения», — это отправка пакета ответа на рукопожатие: github.com/mysql-net/MySqlConnector/blob/2.3.7/src/…. Единственное, что я могу придумать о том, что «этот клиент вызывает задержку», — это если вы написали обычай ProvidePasswordCallback
(или .UsePeriodicPasswordProvider
). А ты?
@Брэдли Грейнджер, спасибо, что указали мне на github MySqlConnector, я добавил ответ
Задержка в 15 секунд была вызвана методом sslStream.AuthenticateAsClient() в MySqlConnector (https://github.com/mysql-net/MySqlConnector/blob/72ee684ed0e04e5f39d6e0757a1963e4aa36807f/src/MySqlConnector/Core/ServerSession.cs#L14 74). Клиент в течение 15 секунд пытался загрузить сертификаты CA с ctldl.windowsupdate.com, но на маршрутизаторе все заблокировано (кроме сервера MySql). Тем временем на сервере произошел тайм-аут около 10 секунд (см. Неправильную попытку захвата), и вся связь завершилась с ошибкой. Решением была установка сертификата MySql (экспортированного из захвата Wireshark) на всех компьютерах в хранилище доверенных корневых центров сертификации, чтобы клиент больше не пытался загрузить сертификаты CA.
foz net 8 по-прежнему очень глючит, но вам следует посмотреть журнал ошибок сервера mysql, если есть другая проблема