在由ASP.Net MVC应用程序处理的长时间运行的帖子中,我们看到服务器再次收到请求一两分钟后的行为。也就是说,在没有做任何客户端的情况下,再次调用控制器方法。
这对我们来说是一个影响很大的错误,因为我们依赖于长时间运行的后期操作。
为了隔离错误,我已经开始从发生此错误的设置中删除变量。我已经设法将它与一个玩具ASP.Net MVC项目隔离,该项目包含一个控制器和静态html文件。控制器由以下代码组成:
public class UploadController : Controller
{
[HttpPost]
public ActionResult Upload()
{
Debug.WriteLine("Starting upload");
while (true) Thread.Sleep(2000);
return View();
}
}
静态html文件:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
</head>
<body>
<form action="../Upload/Upload" method="post">
<input type="submit" />
</form>
</body>
</html>
如果打开单个选项卡到upload.html
,请将调试器附加到AppPool,提交表单然后打开浏览器窗口,观察到以下行为:按下按钮后立即{{1在输出窗口中出现,几分钟后(从2m30s变化到5 + m),输出窗口中出现第二行,与第一行相同。
此错误发生在Chrome,Edge和使用API测试工具Postman。这让我相信它不是一个浏览器问题。
对于发生它的环境:使用IISExpress调试站点时不会发生,如果我将简单站点部署到运行在Windows 10 dev环境中的IIS 10.0实例,也不会发生这种情况。但是,如果我使用IIS 8.5在Windows Server 2012上部署到测试或登台环境,则会显示错误。并且Starting upload
在输出中出现两次。
在本地运行的IIS实例上没有发生这一事实让我相信我在测试和暂存时错误配置了一些东西。是否有人熟悉可能产生此效果的设置?因为我在网上找不到任何信息。
编辑:我刚刚劫持了另一个运行Server 2016和IIS 10.0的开发团队的服务器,并且该请求也发生在该服务器上。