pvv*_*pvv 2 windows docker .net-core
.Net Core 版本:3.1 操作系统:Windows 10 (1903) Docker 版本:19.03.5
你好
我正在 docker 和 .Net Core 上进行第一个概念验证,以便研究使用 .Net Core 将我们所有基础设施迁移到 docker 的可能性。我试图构建一个简单的 http 侦听器,它将返回一个 hello world 页面。我发现问题 https://github.com/dotnet/core/issues/3072 非常有帮助。
简而言之,我正在尝试打开两个 http 侦听器: http://+:1234 https://+:12345
为此,主机操作系统上有两个 URL ACL 保留:
Reserved URL : http://+:1234/
User: \Everyone
Listen: Yes
Delegate: No
SDDL: D:(A;;GX;;;WD)
Reserved URL : https://+:12345/
User: \Everyone
Listen: Yes
Delegate: No
SDDL: D:(A;;GX;;;WD)
Run Code Online (Sandbox Code Playgroud)
此外,还有应用于 https 端口的有效证书:
IP:port : 0.0.0.0:12345
Certificate Hash : a05077849c0835b0db2b16656cd42651122f283d
Application ID : {00000000-0000-0000-0000-000000000000}
Run Code Online (Sandbox Code Playgroud)
...
此外,两个端口都转发到容器:
docker run --user ContainerAdministrator -p 1234:1234 -p 12345:12345 --name=https_container https_server_image
并且容器在 ContainerAdministrator 下运行。
HttpListener 在 http 端口上工作得很好。例如,尝试加载“ http://localhost:1234/ ”工作正常(示例代码仅返回“Hello word”html 页面)。尝试访问“ https://localhost:12345/ ”上的 SSL 连接在浏览器中失败,在 Chrome/Edge 中显示“ERR_CONNECTION_RESET”,在 Mozilla 中显示“PR_CONNECT_RESET_ERROR”。
有趣的是,两个 HttpListener 实例在容器中启动都没有问题,并且没有任何异常。当然,在没有 Docker 容器化的情况下直接在主机上启动时,相同的测试应用程序会像魅力一样工作。
所以我想知道我是否错过了什么?这是有意的行为吗?在此先感谢您的帮助 !
根据.NET Core论坛中的“官方”答案:
“一般来说,HttpListener 类是我们从 .NET Framework(仅限 Windows)移植到 .NET Core 的遗留组件。但是 Linux 上不支持 HTTPS 功能。请参阅:#19752
如果您需要跨平台的 HTTP/HTTPS 服务器,我们建议您使用 ASP.NET Core。“Kestrel”组件完全支持 HTTPS,并且可跨平台使用(Windows/Linux/Mac)。请参阅: https: //learn.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel ?view=aspnetcore-3.1 “
| 归档时间: |
|
| 查看次数: |
1642 次 |
| 最近记录: |