Я начал использовать WireMock. net в своих тестах, но иногда, когда я запускаю тест, я получаю исключение:
Failed to bind to address http://0.0.0.0:9999: address already in use. ---> Microsoft.AspNetCore.Connections.AddressInUseException: Only one usage of each socket address (protocol/network address/port) is normally permitted ---> System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.
Ясно, что ошибка произошла в предыдущем запуске, который не закрыл порт. Используя TCPView из SysInternals, я вижу, что процесс, который удерживает этот порт, является «», и я не могу ни его убить, ни найти PID в диспетчере задач, ни уничтожить его с помощью taskkill
. Единственное решение, которое я нашел, - это перезапустить или, по крайней мере, выйти / войти в систему Windows. Я искал в Интернете (и StackOverflow), чтобы понять, как процесс может удерживать порт, даже если он был прерван, но не нашел какого-либо полезного объяснения.
Потому что это происходит только изредка, и потому что время, когда это происходит, требует перезапуска, это делает кошмаром отладку и расследование. Кажется, что это происходит, когда происходит сбой отправляющего приложения при отправке или получении сообщения, но я не уверен.
Я хотел бы знать:
- Если кто-то знает, что условие, при котором порт можно оставить открытым после завершения процесса
- Как это можно предотвратить или смягчить?
- В случае, если это происходит, существует ли более простой способ освободить порт? (может быть, есть служба, которую я могу перезапустить?)
Заранее спасибо.