Асинхронные удаленные вызовы

У нас есть удаленный одноранговый сервер, работающий в отдельной службе Windows (назовем ее RemotingService). Клиентами RemotingService являются экземпляры ASP.NET (многие многие).

В настоящее время клиенты удаленного взаимодействия вызывают RemotingService и блокируют во время обслуживания вызова RemotingService. Однако служба удаленного взаимодействия становится достаточно сложной (с большим количеством вызовов RPC и сложными алгоритмами), так что рабочие потоки asp.net блокируются на длительное время (4-5 секунд).

Согласно этой статье MSDN , это не будет хорошо масштабироваться, потому что рабочий поток asp.net блокируется для каждого удаленного RPC. Рекомендуется переключиться на асинхронные обработчики, чтобы освободить рабочие потоки asp.net.

Цель асинхронного обработчика - освободить поток пула потоков ASP.NET для обслуживания дополнительных запросов, пока обработчик обрабатывает исходный запрос.

Это выглядит нормально, за исключением того, что вызов удаленного взаимодействия по-прежнему занимает поток из пула потоков. Это тот же пул потоков, что и рабочие потоки asp.net?

Как мне превратить мой удаленный одноранговый сервер в асинхронную систему, чтобы освободить рабочие потоки asp.net?

Я, вероятно, пропустил некоторую важную информацию, пожалуйста, дайте мне знать, если что-то еще нужно знать, чтобы ответить на вопрос.

14.08.2008 04:35:16
1 ОТВЕТ
РЕШЕНИЕ

Идея использования ThreadPool заключается в том, что с его помощью вы можете контролировать количество синхронных потоков, а если их становится слишком много, то пул потоков автоматически управляет ожиданием новых потоков.

Работающий поток Asp.Net (AFAIK) не поступает из пула потоков и не должен зависеть от вашего звонка в службу удаленного взаимодействия (если только это не очень медленный процессор, а ваша функция удаленного взаимодействия очень интенсивно использует процессор - в котором случай, все на вашем компьютере будет затронуто).

Вы всегда можете разместить службу удаленного взаимодействия на другом физическом сервере. В этом случае ваш рабочий поток asp.net будет полностью независим от вашего удаленного вызова (если вызов удаленного вызова вызывается в отдельном потоке).

0
14.08.2008 05:53:40
Как указано в статье, указанной в этом вопросе, рабочий поток asp.net действительно происходит из пула потоков времени выполнения.
CVertex 7.09.2008 08:37:54