Настройте тайм-аут в web.config для веб-службы - PullRequest
0 голосов
/ 20 июня 2020

У меня есть веб-служба, размещенная в IIS 7.5. Веб-сервис работает нормально. Я пытаюсь настроить тайм-аут в web.config, но не могу. Я пробовал в своем web.config:

<Configuration>
<system.web>
<compilation debug="false" targetFramework="4.8" />
<httpRuntime targetFramework="4.8" executionTimeout="10" /> <!-- 10 seconds -->
<sessionState timeout="2" /> <!-- 2 minutes -->
</system.web>
</Configuration>

и в контроллере веб-службы:

Thread.Sleep(180000) //3 minutes

Я думал, что выполнение остановится через 10 секунд, но вместо этого оно остановится через 1 минуту, что бы я ни поместил в параметры «executionTimeout» и «timeout». Я искал в IIS, но не могу найти, чему соответствует эта минута.

У кого-нибудь есть идея?

Ответы [ 2 ]

0 голосов
/ 03 июля 2020

Jokies Ding: Спасибо за CancellationToken. Ты показал мне путь. И благодаря этой ссылке: Как остановить поток, если поток занимает слишком много времени Я использую задачи, которые более чистые, чем сырые потоки.

0 голосов
/ 22 июня 2020

Тайм-аут IIS или тайм-аут выполнения httpruntime не сможет убить спящий поток.

Как видите, спящий режим потока не будет ограничен IIS

enter image description here

To make execution timeout work, you need to do actural process instead of a thread sleep.

So if you need to achieve this, please try something like this in your code.

thread.Start();
            thread.Join(1500);
            thread.Abort();

Or use CancellationTokenSource() and CancelAfter(10000).

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/cancel-async-tasks-after-a-period-of-time

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