Служба WCF не отвечает под нагрузкой процессора - PullRequest
0 голосов
/ 30 июня 2011

У меня довольно простой сервис WCF. Большинство сервисных вызовов выполняются за 300 мс или меньше. Загрузка от этих звонков будет довольно легкой.

Однажды «отчетный» вызов - это длительный (от 10 до 15 минут) вызов. Процессор связан с IO, происходящим только в первые и последние несколько миллисекунд вызова. Эти звонки должны быть последовательными.

Во время звонка с сообщением я хочу опросить службу о ее прогрессе. Я надеялся, что просто настрою два ServiceHosts ... один с ConcurrencyMode.Single для долговременных отчетов и один с ConcurrencyMode.Multiple для опроса.

Тем не менее, после выполнения вызова «создания отчетов» (с привязкой ЦП системы к 100%) вызовы состояния опроса никогда не поступают в службу. Я надеялся, что планировщик ЦП ОС позволит новым запросам иметь часть ЦП, но это не совсем так.

Я прочитал еще один вопрос о том, что .NET ThreadPool может не создавать новые потоки при высокой загрузке процессора. «Отчетный» вызов поступает в стороннюю DLL, поэтому у меня нет очевидного способа остановить этот процесс обратно.

Есть какие-нибудь идеи о том, как позволить вызовам опроса обрабатываться параллельно с продолжительным вызовом "отчетности"?

(я использую netTcpBinding.)

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Я прочитал еще один вопрос, который .NET ThreadPool может не породить новый потоки под большой загрузкой процессора. «отчетный» звонок выходит на 3-й партийная DLL, поэтому у меня нет очевидного способ остановить этот процесс обратно.

Неважно, что он в сторонней DLL. Вы по-прежнему можете вызывать стороннюю DLL из другого потока (с более низким приоритетом потока) и использовать примитив синхронизации потока, чтобы перевести основной поток в спящий режим, пока не закончите.

0 голосов
/ 30 июня 2011

Если вы установите операцию обработки на OneWay, это по существу создаст асинхронный вызов, который позволит вам затем «опросить» статус этой операции. В данный момент он будет ждать ответа, прежде чем продолжить.

Я использую похожий процесс для вставки и обработки больших текстовых файлов.

http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapdocumentmethodattribute.oneway(v=vs.71).aspx

...