Tcp WireMock.Net在进程终止后保持端口打开

Tcp WireMock.Net在进程终止后保持端口打开,tcp,port,wiremock,Tcp,Port,Wiremock,我开始在测试中使用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 norm

我开始在测试中使用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.
很明显,故障出现在前一次未关闭端口的运行中。使用SysInternals中的TCPView,我看到保存该端口的进程是“”,我无法终止它,也无法在任务管理器中找到PID,也无法使用
taskkill
终止它我找到的唯一解决方案是重新启动或至少注销/登录到Windows。我搜索了Web(和StackOverflow)以了解进程如何在端口被终止的情况下仍然保持端口,但没有找到任何有用的解释

因为它只是偶尔发生,而且每次发生都需要重新启动,这使得调试和调查成为一场噩梦。似乎当发送应用程序在发送或接收消息时崩溃时会发生这种情况,但我不确定

我想知道:

  • 如果有人知道进程终止后端口可以保持打开的条件是什么
  • 如何预防或减轻这种情况
  • 如果发生这种情况,是否有更简单的方法释放端口?(也许有一个服务我可以重新启动?)

  • 提前感谢。

    为了所有可能遇到相同问题的人:

    似乎是终止客户端进程释放了端口。然而,自从我写了这个问题后,它只发生在我身上一次,所以我无法验证它。这回答了我的第三个问题,但我仍然无法确切地找到它发生的时间和原因以及如何预防。

    一些建议:

    • 在单元测试中,在随机端口而不是固定端口上运行WireMock.Net。在生成服务器上运行这些单元测试时,使用固定端口可能会导致问题,因此无法100%保证此端口在操作系统上可用
    有关某些分析,请参阅