Скачать сервер с ASP.NET, как выполнить длительные синхронные запросы? - PullRequest
1 голос
/ 24 октября 2010

Мое приложение ASP.NET - это приложение для загрузки (без страниц), которое считывает огромные двоичные файлы (1-2 ГБ -> более 1 часа времени загрузки с поддержкой возобновления) из локальной сети и передает их веб-клиентам (каждый запрос -> один большой двоичный ответ, поэтому нет никакого текстового / html ответа).Я использую обработчик HTTP (.ashx) вместо страницы (.aspx) для обработки запросов.Использование общего буфера и основного потока шаблона производитель-потребитель (из пула потоков ASP.NET) создает другой поток, и вместе они выполняют эту работу.В конце оба потока завершаются (возвращаются в пул).

Итак, у меня есть длительный запрос с использованием потоков из пула потоков, который обычно не рекомендуется, но у меня нет страницы в приложении, не так ли?все еще узкое место при использовании потоков из пула потоков ASP.NET?

Среда: 64-разрядная версия сервера 2008, IIS 7.0 и .NET 4.0

Какие соображения следует принять для этого сценария?Любой комментарий приветствуется.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2011

Как я объяснил здесь , просто используйте реализацию IHttpAsyncHandler в ASHX, чтобы запустить собственный поток и завершить обработку внутри потока asp.net (таким образом, вернув его в пул).Используя это, вы можете инициировать тысячи загрузок в секунду, не исчерпывая потоков пула потоков asp.net.(Как и если вы хотите обслуживать столько запросов, это еще одна тема для обсуждения)

Изменить: просто не забудьте позвонить asyncRequestState.CompleteRequest() в конце вашей ветки, иначе asp.net не узнаетчто вы закончили обслуживать запрос.

0 голосов
/ 24 октября 2010

Если вы используете потоки из пула ASP.NET для обслуживания этих файлов, вы быстро достигнете жесткого предела одновременных загрузок, независимо от доступной пропускной способности. Неважно, что делают потоки; если они все заняты / заблокированы, другие запросы не будут выполнены.

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

В чем причина передачи этих файлов через обработчики ASHX?

...