Я использую метод Socket.IOControl
, чтобы сохранить мое TCP-соединение живым.Этот метод хорошо работает на моем компьютере win10, но он не поддерживается в среде докера.
Здесь используется Socket.IOControl
var keepAliveParameter = KeepAliveParameter( 5000, 5000 );
TcpClient.Client.IOControl( IOControlCode.KeepAliveValues, keepAliveParameter, null );
//...
private byte[] KeepAliveParameter( int time, int interval )
{
int[] parameters = { 1, time, interval };
byte[] byteArray = new byte[3 * sizeof( int )];
System.Buffer.BlockCopy( parameters, 0, byteArray, 0, 3 * sizeof( int ) );
return byteArray;
}
. Выдает следующее исключение:
* 1009.*
System.PlatformNotSupportedException: Socket.IOControl обрабатывает специфичные для Windows управляющие коды и не поддерживается на этой платформе.
Файл Docker:
FROM microsoft/dotnet:2.2-sdk AS publish
COPY . /src
RUN dotnet restore /src/StressTestingServer/StressTestingServer.csproj --source http://192.168.10.149:5080/nuget --source https://api.nuget.org/v3/index.json
RUN dotnet publish /src/StressTestingServer/StressTestingServer.csproj --no-restore -c Release -o /app
RUN rm /app/appsettings.json
FROM microsoft/dotnet:2.2-runtime-alpine
WORKDIR /app
EXPOSE 8080
COPY --from=publish /app .
ENTRYPOINT dotnet StressTestingServer.dll
Есть ли обходной путьили лучшее решение для поддержания TCP-соединения живым?