【问题标题】:How does calling web services lead to a deadlock?调用 Web 服务如何导致死锁?
【发布时间】:2012-06-15 05:00:43
【问题描述】:

This 令人困惑的 MSDN 文章讨论了如何从 ASP.Net 应用程序调用 Web 服务会导致死锁。我了解每个 Web 服务调用需要第二个线程来完成 IO 的部分。我了解可能并不总是有这样的线程可用,这意味着进行 Web 服务调用的线程将阻塞并且在这样的线程可用之前不会取得进展。但在我看来,确实获得 IO 线程的 Web 服务调用会提前,最终两个线程都将被释放回线程池以供先前阻塞的调用使用。那么僵局从何而来?在 IIS 终止进程时,您能描述一下死锁线程在等待什么吗?

【问题讨论】:

    标签: asp.net web-services


    【解决方案1】:

    本文适用于 .NET 1.0 / IIS 6,并不真正适用于较新版本的 .NET/IIS。在框架的较新版本中,线程池和 IOCP 线程的数量限制要高得多,您遇到它们的可能性非常非常小。

    过去发生的基本问题是 ASP.NET 会限制它允许使用任何东西的线程数,并且 Web 请求在 I/O 线程上处理,因此传入的 Web 请求将消耗所有可用线程和未完成(异步)调用的 IO 完成将排在等待它们的 Web 请求后面。

    另见http://blogs.msdn.com/b/nicd/archive/2007/04/16/dissection-of-an-asp-net-2-0-request-processing-flow.aspx

    【讨论】:

    • 你确定吗?我在 v2.0 应用程序中收到了这个确切的消息,并且限制传出 Web 服务调用的数量似乎可以缓解这个问题。
    • 您使用的是 IIS 6 吗?我编辑了答案-问题确实出在 IIS 6 上,而不是 .NET 1.0
    • 我理解你描述的场景可能是一个问题,但 minFreeThreads 不会阻止 ASP.Net 从池中获取所有线程吗?
    猜你喜欢
    • 1970-01-01
    • 2013-02-14
    • 2021-11-08
    • 1970-01-01
    • 2020-01-11
    • 2018-04-20
    • 2012-09-20
    • 2018-06-04
    • 2016-12-22
    相关资源
    最近更新 更多