gpt4 book ai didi

.net - DotNet 似乎允许两个进程打开同一个端口?

转载 作者:太空狗 更新时间:2023-10-29 12:39:14 25 4
gpt4 key购买 nike

我在 Docker centos:7 容器上运行 DotNet 服务,我遇到了在 dotnet publish 下以不同方式运行的代码问题vs dotnet run 情况。

我目前正在运行监听端口 3480 的 dotnet 服务。看来我正在运行的 dotnet 代码也尝试在同一端口上实例化 TcpListener

dotnet run 模式下,它似乎让这种情况发生,而在 publish 中,我得到一个 address in use 错误。

所以在我运行我的代码之前,我有这个 net stat -lntp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3840 0.0.0.0:* LISTEN 5017/dotnet
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN -

pid 5017 我的服务正在监听 TCP 端口

在我启动我的代码之后,事情看起来像这样:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 1 0 0.0.0.0:3840 0.0.0.0:* LISTEN 5247/dotnet
tcp 0 0 172.17.0.2:4000 0.0.0.0:* LISTEN 5247/dotnet
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN -

PID 5247 好像接管了??

然后当我终止代码时,我们回到这个状态:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3840 0.0.0.0:* LISTEN 5017/dotnet
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN -

我能想到的唯一区别是当我执行 ps -eo pid, command 时,我得到了这个:

 5017 /usr/bin/dotnet /usr/share/my-agent/My.Agent.Linux.dll
5247 dotnet exec /devel/SandBox/bin/Debug/netcoreapp2.0/ServerSandbox.dll

如果我运行发布的版本 dotnet publish -o publish -r linux-x64 -c Debug 我得到这个:

 5017 /usr/bin/dotnet /usr/share/my-agent/My.Agent.Linux.dll
8405 ./publish/My.ServerSandbox

当代码崩溃时,PID 控制端口 4080 保持不变。

虽然我的过程是 DotNet Runtime 实际上以某种方式管理端口本身 - 这就是为什么它允许同一个端口打开两次,而当我发布我的代码时我'我使用的是嵌入式运行时,因此我们会在做一些不应该发生的事情时被发现。

有没有人见过这种行为?我一直在兜圈子,为什么我不能让发布的版本工作,在深入研究之后,我认为它的运行版本不应该工作。

感谢您提供的任何建议/帮助。

最佳答案

经过一些研究后,我们的服务器确实在做我们怀疑的事情。我们更改了源代码以不两次打开同一个端口,一切都井井有条。至于为什么这甚至是可能的,我仍然感到困惑 - 因此,如果您遇到类似情况,希望这个问题可以为您提供一些安慰。

关于.net - DotNet 似乎允许两个进程打开同一个端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54579418/

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