Как улучшить скорость потоковой передачи net-tcp?

У меня есть служба net-tcp WCF, работающая в общедоступном облаке. Проблема в том, что я получаю только около 3 Мбит/с на соединение. Очень далеко от предела как сети, так и сервера. При параллельной загрузке 2-х потоков с одного сервера у меня скорость 6 мбит/сек и так далее.

Можно ли увеличить скорость этих соединений? Меня не слишком волнует использование ресурсов сервера (каждый сервер имеет 90 ГБ ОЗУ) или атаки типа «отказ в обслуживании» (сервер требует аутентификации и имеет очень мало одновременных пользователей).

Сервисный контракт выглядит так:

[ServiceContract( Namespace = "http://mycompany.com", SessionMode = SessionMode.Allowed )]
public interface iStreaming
{
    [OperationContract]
    Task<Stream> downloadStuff( string a, long b );
}

Конфигурация привязки:

NetTcpBinding ntb = new NetTcpBinding();
ntb.Security = new NetTcpSecurity() { Mode = SecurityMode.None };
ntb.TransferMode = TransferMode.Streamed;
ntb.MaxReceivedMessageSize = 1024 * 1024 * 1024;
ntb.MaxBufferSize = 1024 * 256;
ntb.MaxBufferPoolSize = 1024 * 1024;
ntb.SendTimeout = TimeSpan.FromMinutes( 30 );

Реализация сервера:

[ServiceBehavior( InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple )]
class Streaming: iStreaming
{
    Task<Stream> iStreaming.downloadStuff( string a, long b )
    {
        // Send a file from local disk
        string sourcePath = makePath( a, b );
        return File.OpenRead( sourcePath );
    }
}

Клиент вызывает stream.CopyTo() или stream.CopyToAsync() в MemoryStream или в файл на быстром SSD. Сервер работает под управлением Windows Server 2019.

Обновление: измерена пропускная способность с 1–12 подключениями, и вот результат:

скорость против соединений

Почти линейно. Похоже, что-то в WCF ограничивает скорость для каждого потока. В идеале мне нужна полная скорость для одного соединения, моим конечным пользователям нужен только 1 файл/каждый.


person Soonts    schedule 10.06.2021    source источник
comment
Попробуйте настройки в этом ответе: stackoverflow.com/questions/451376/   -  person Theobald Du    schedule 11.06.2021