Непоследовательное поведение из ServicePointManager.SetTcpKeepAlive - PullRequest
1 голос
/ 29 мая 2019

Я пытался заставить 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. Независимо от того, что оба подхода, используемые в этом тестовом приложении, не дают пакетов поддержки активности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...