- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 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/
我在 Ubuntu v16.04 上安装了 dotent core。问题是当我尝试使用 dotnet user-secrets 时它说:未找到匹配命令“dotnet-user-secrets”的可执行
好。这似乎是我看到答案时会面对的问题类型。 所以... 为什么要打扰 dotnet build做之前dotnet publish ? build自动执行 restore .凉爽的。 好像publish
我正在尝试创建一个 dotnet 新模板的 NuGet 包。我创建了一个 nuspec 文件来设置包的详细信息,它位于我的内容文件夹旁边,其中包含我想要打包的所有内容: My.
我正在尝试使用'dotnet dev-certs'工具导出https证书以包含在Docker镜像中。现在我正在使用: dotnet dev-certs https -v -ep $(HOME)\.as
我昨天从 .Net 5 更新到 .Net 6,现在我的项目无法从 dotnet run 开始。然后我得到错误: Building... warn: Microsoft.AspNetCore.Serve
我使用 dockerfile 成功构建,但是当我尝试从构建镜像运行新容器时,出现以下错误: 我必须为解决方案做什么? Error : /bin/sh: 1: [dotnet,: not found d
我有一个引用其他几个项目的 .NET Core 3 项目。我的主根项目有一个 Release-X构建配置,但其他项目只有 Release配置,无匹配 Release-X配置。 当我尝试使用这个发布我的
我的 dotnet new 列表中有许多“孤立的”dotnet 模板。 它们不再存在于我的驱动器上,因为我删除了文件夹,所以我不能 dotnet new --uninstall。 有没有办法从列表中删
编辑: 以下是最初与标题一起发布的前一个问题 xunit show ITestOutputHelper output when run in the console 经过调查(见评论),这个问题仍然非
来自 docs.microsoft.com: dotnet build - Builds a project and all of its dependencies. dotnet run - Run
我有一个 Dotnet 核心项目,我试图在其中安装 Microsoft.EntityFrameworkCore.Tools.Dotnet 以使用迁移。我在 Mac 上,所以我使用 MySql.Data
我已经在这个问题上徘徊了很长一段时间,但仍然没有找到答案,也没有其他帖子处理同样的问题。 我已经发布了一个 .net 5.0 网站,如果我在同一个发布的文件夹中运行 dotnet,一切都会正常运行。在
我正在尝试使用 CLI dotnet 命令复制以下 Azure 管道: - task: DotNetCoreCLI@2 inputs: command: publish publi
假设这个文件夹结构 SampleApp global.json Src Web pro
我正在使用dotnet watch命令来运行asp.net core项目。但是,默认情况下,它选择 Production 作为环境。 我已经尝试了这两个选项: 1) > dotnet watch AS
我正在尝试在 Linux 主机上的官方 Microsoft/dotnet 镜像之外的容器中构建一个 dotnet 项目,因为该镜像与 Windows 和 Linux 都兼容。我只有 linux 主机,
我不是 Linux 用户,所以这可能是一个简单的修复,但我已经尝试了以下方法: 首先我使用命令 curl -sSL https://dot.net/v1/dotnet-install.sh | bas
我在发布配置文件中遇到了 Visual Studio 和 EF 迁移的奇怪情况。鉴于: Visual Studio 2019 v16.4 .NET 核心项目。目标 .NET Core 3.1 EF 3
我已经安装了 .NET Core 1.0.1 以与 VS 2015 Update 3 一起使用,并且以管理员身份运行(在 Windows 8.1 x64 上)。 如果我创建任何 .NET Core 项
我正在尝试为dotnet core 2创建开发Dockerfile。到目前为止,我的工作是: FROM microsoft/aspnetcore-build:2.0 VOLUME /app WORKD
我是一名优秀的程序员,十分优秀!