【问题标题】:"Thread was being aborted" in ASP.NET when waiting for a response from a web service等待来自 Web 服务的响应时,ASP.NET 中的“线程被中止”
【发布时间】:2020-03-06 08:06:14
【问题描述】:

我有一个调用服务的 ASP.NET 站点。在某些情况下,服务可能需要几分钟才能产生响应,在这些情况下我看到“线程被中止”异常。

这是否与某处的超时设置有关?可以增加超时时间吗?

更新:

按照 Brando Zhang 的建议增加超时后,我没有看到“线程被中止”异常,但页面本身由于某种原因超时。 “超时”是指一旦响应内容到达,页面就不会被刷新。

现在我的Web.config 具有以下设置:

<configuration>
    <system.web>
        <httpRuntime executionTimeout="360" />
    </system.web>
</configuration>

更新 2:

由于标题中的原始问题实际上已经解决,我觉得Brando Zhang提供的答案可以作为这个问题的有效答案。

我将尝试通过减少完成请求所需的时间或使用长轮询来解决第一次更新中提到的新问题。

【问题讨论】:

    标签: asp.net web-services iis


    【解决方案1】:

    根据您的描述,我建议您可以尝试增加 executionTimeout 属性以避免线程中止异常。

    详情,可参考以下配置设置:

    <configuration> <system.web>
    
    <httpRuntime executionTimeout="360" />
    
    </system.web>
    
    </configuration>
    

    【讨论】:

    • 感谢您的建议。它确实帮助我摆脱了异常,但现在页面本身超时并且没有使用响应中的内容进行刷新。
    • 据我所知,浏览器有默认的连接超时时间,所以你会遇到超时问题。你能告诉我为什么你的请求需要这么长时间吗?如果您的请求需要很多时间来处理某个线程,我建议您可以尝试将长时间运行的任务与 asp.net 分离,并使用服务(不推荐)或轮询工作的计划任务。然后你可以编写一个 API 或其他接口来让客户端检查工作是否完成。
    • 感谢您提供有关浏览器端超时和使用长轮询的建议。这个设计是在我之前实现的,所以我没有太多关于原因的信息。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多