如何将TCP套接字的KeepAliveValues放入docker中,即使在Windows环境中也是如此



我正在开发我的第一个Docker应用程序,我想配置KeepAlive设置。在旧的Windows环境中,它运行良好,如下所示:

[SupportedOSPlatform("windows")]
public static void ... (...)
{
Socket socket = ...;
bool useKeepAlive = ...;
int keepAliveInterval = ...;
int retryInterval = ...;
byte[] KAValues = new byte[size * 3];
Array.Copy(BitConverter.GetBytes(on), 0, KAValues, 0, size);
Array.Copy(BitConverter.GetBytes(keepAliveInterval), 0, KAValues, size, size);
Array.Copy(BitConverter.GetBytes(retryInterval), 0, KAValues, size * 2, size);
socket.IOControl(IOControlCode.KeepAliveValues, KAValues, null);
...

在基于docker的应用程序中尝试执行此代码时,最后一行生成PlatformNotSupportedException

编译器(实际上是intellisense(在IOControlCode.KeepAliveValues部分生成一个警告CA1416,并提到Windows支持这段代码。现在我确实在Windows机器上工作,但我相信基于Docker的环境会把这件事搞砸。

第1版:我添加了;属性";[SupportedOSPlatform("windows")]之前刚刚声明了函数,但这并没有解决问题。

Edit2
我查看了我的项目文件,在其中我发现了以下条目:

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<UserSecretsId>7505f631-669c-4db7-ay10-4fc92e9b4b79</UserSecretsId>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileContext>......</DockerfileContext>
<DockerComposeProjectPath>....docker-compose.dcproj</DockerComposeProjectPath>
</PropertyGroup>

正如你所看到的;DockerDefaultTargetOS";似乎是";Linux";,当我使用Windows机器时。

有解决方案吗?

在WSL2中,Linux docker容器在虚拟化Linux内核上运行,而不是像在WSL1中那样在Windows内核上运行。因此,这就像在Hyper-V虚拟机中安装Linux并在Linux虚拟机上运行Docker一样。

相关内容

  • 没有找到相关文章

最新更新