Первое, что я вижу здесь, это то, что вы на самом деле не вызывали context.Response.Close, что вам нужно сделать.Закрытие ответа закроет поток, но закрытие потока не задокументировано (насколько я могу найти), чтобы закрыть ответ.Закрытие ответа также закроет объект запроса, который также не закрывается здесь.
Возможно, это решит проблему.Я могу представить, что в вашем тесте VPN были другие различия, кроме скорости сети;тест VPN мог быть выполнен из браузеров или через прокси-серверы, которые поддерживали только HTTP 1.0, что означает, что они ожидают, что соединение будет закрыто (или это может быть HTTP 1.1, но отправка соединения: закрыть в заголовке), прежде чем они будут думатьони получили весь ответ.Вызов Close в выходном потоке, вероятно, не закроет сокет, но вызов close для самого ответа сделает, и это может в конечном итоге решить вашу проблему.
Надеюсь, это будет полезно для всех, кто читает в будущем.
Гарольд