【问题标题】:Configure a timeout in web.config for a web service在 web.config 中为 Web 服务配置超时
【发布时间】:2020-10-10 14:05:29
【问题描述】:

我有一个托管在 IIS 7.5 中的 Web 服务。 网络服务工作正常。 我尝试在 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 中搜索过,但无法找到这一分钟对应的内容。

有人有想法吗?

【问题讨论】:

  • 这是什么网络服务?是 wcf 的吗?网络API?还有什么?
  • 第一个问题:这是建立在 ASP.NET MVC WebAPI 之上的 Web 服务还是旧式 ASP.NET SOAP Web 服务基础设施?
  • 第二个问题:这是一个异步端点吗?
  • 感谢您的帖子。 vivek nuna :我尝试按照您的建议在 IIS 中设置超时,但它仍然是一样的。 rene, Kev:我的 Web 服务是用 C# 编写的 REST Web 服务,它不是 MVC 也不是 SOAP。

标签: c# iis


【解决方案1】:

IIS 超时或 httpruntime 执行超时将无法终止睡眠线程。

如您所见,线程睡眠不受 IIS 限制

要使执行超时起作用,您需要执行实际进程而不是线程休眠。

因此,如果您需要实现此目的,请在您的代码中尝试类似的操作。

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

或者使用CancellationTokenSource()CancelAfter(10000)

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

【讨论】:

    【解决方案2】:

    Jokies 丁: 感谢 CancellationToken。 你给我指路了。 并感谢此链接: How to stop a thread if thread takes too long 我使用比原始线程更干净的任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 2011-12-30
      • 2018-07-31
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多