Я пытался заставить tcp поддерживать пакеты для отправки с помощью System.Net.Http.HttpClient
. Насколько я вижу, единственный способ сделать это - использовать ServicePointManager.SetTcpKeepAlive(true, X, Y)
. При тестировании этого в сценарии LinqPad у меня это работает, хотя это не согласовано. Например, если я выполняю ручной вызов ServicePointManager.FindServicePoint(myUrl)
перед тем, как позвонить ServicePointManager.SetTcpKeepAlive
, тогда он не будет работать, я полагаю, из-за кэширования, однако, если это первое, что происходит, это обычно работает (я уверен, что это все еще несовместимо здесь). Обратите внимание, что я проверяю, работает ли он с помощью Wireshark.
Однако, когда я пытаюсь использовать это в моем реальном приложении UWP, это терпит неудачу. Я попытался установить его в качестве первого конструктора App.xaml.cs и непосредственно перед созданием HttpClient
и различных мест между ними без какой-либо удачи.
Я что-то упустил?
Обратите внимание, что я понимаю, что можно использовать HttpWebRequest
напрямую и установить его в своем экземпляре ServicePoint
, но я хотел бы знать, почему это не работает в первую очередь, прежде чем прибегнуть к чему-то подобному.
РЕДАКТИРОВАТЬ: я закончил тем, что пытался реализовать это с HttpWebRequest
и ServicePoint.SetTcpKeepAlive
, и пока он компилируется, происходит сбой при вызове с исключением Operation is not supported on this platform
. Я предполагаю, что это означает, что основная проблема здесь может заключаться в том, что UWP просто не поддерживает отправку пакетов TCP для поддержки активности?
EDIT2: я создал минимальный воспроизводимый пример: https://github.com/csuzw/TcpKeepAliveTest. В этом случае подход HttpWebRequest
не завершается с исключением Operation is not support on this platform
, но он также не отправляет пакеты поддержки активности. Интересно, разница в том, что мое настоящее приложение - целевое приложение Xamarin.Forms UWP, тогда как это тестовое приложение - прямое приложение UWP. Независимо от того, что оба подхода, используемые в этом тестовом приложении, не дают пакетов поддержки активности.