在同一IIS服务器上使用互连的ASP.NET WebApis时,我们遇到了一些死锁。我们想知道这是否是某种预期的行为,因为在同一服务器和相同的应用程序池上托管所有API,因为我们已经设法通过将WebApi移动到另一个池来避免这个问题。或者如果我们的代码有问题。
对于生产,我们可能会在不同的服务器或池上托管API,但我们仍然想了解为什么会发生这种情况。我们主要担心的是,如果这是我们错误的代码,即使主机设置正确,问题也可以在更大范围内重现。
我们已经创建了一个小解决方案来重现死锁hosted in GitHub。
复制步骤如下:
预期的行为是最终解决所有请求。
实际行为是,某些请求已完成,而其他一些请求将失败,原因是TaskCancelledException
似乎是由于请求超时所致。
我能找到的唯一一篇文章似乎提到同一个问题是从2014年开始:“Do Not Send ServerXMLHTTP or WinHTTP Requests to the Same Server”,我相信这是我们遇到的问题,我们如何确认?
上下文
我们已被分配任务,为我们所在公司的多个内部API创建集中式身份验证服务器。 我们使用带有引用标记的IdentityServer3,因此当某些API使用引用标记请求第二个API时,第二个API将请求验证服务器进行标记验证,以再现该问题。
我添加了IdentityServer标记,因为在进行多个API通信和使用引用标记时,这可能是一个常见问题。 Sample on GitHub