我想知道是否有人可以帮助我。 (道歉,这可能是TL;某些人的DR ......)
我们最近将C#MVC网站从一台服务器迁移到另一台类似规格的云服务器(第一台是2个vCPU 4GB 64位WS2012 IIS 8,新版本是4个vCPU 4GB 64位WS2012 R2 IIS 8.5)。 / p>
经历了设置MVC,重写模块等的初始障碍,我们成功地建立了新系统 - 除了一个小问题。作为系统中的存储过程,有一些较长时间运行的报告通常运行大约5分钟。以前我们不得不为这些增加script-和commandTimeout,这样它们就不会抛出通常的“连接超时”异常。 我们再次检查,这些报告仍在旧服务器上运行完美。 但是,在新服务器上,相同的报告在执行时开始抛出“服务不可用”错误,这实际上会导致站点停顿几分钟,除非我们重新启动站点并回收应用程序池(基于appcmd命令,apppool仍保留在“已启动”状态,但网站的所有其他部分都出现了相同的“服务不可用”错误。
因此,与托管服务提供商进行了一起检查,我们设法识别的是,一旦存储过程被触发,它就会在后台运行 - 并且可能已完成 - 但是30秒后出现服务不可用消息(1在某些情况下,分钟5秒)。
认为这可能是由两件事造成的:资源短缺或进程的长度,我模拟了一个只执行2分钟WAITFOR命令的存储过程。此过程导致相同的服务不可用。
这对我来说意味着问题出在IIS或代码中。然后我经历了所有必要的循环:
然后我在错误位周围应用了try-catch块,希望我能获得有关该问题的更多信息,但是在发出错误之前,应用程序池似乎关闭了,而不是出现任何错误。
所以我的问题是:有没有办法让我更深入地了解为什么会这样?
但更重要的是:有没有办法强制系统抛出错误而不是关闭?
感谢您的帮助。 如需更多信息,请告知我们。
更新
与此同时,我设法发现了另一个重点。在IIS中设置本地网站(如通过主机连接到localhost)指向与远程URL相同的代码和数据库 - 实际上工作正常。没有“服务不可用”错误,执行在没有超时的情况下完成。
我尝试关闭防火墙,看看是否会导致它,但这并没有改变一件事。 我希望这可能会促使某人......
答案 0 :(得分:1)
即使我花了大约一个星期,我终于设法解决了我的问题 - 发布的最后一次更新促使我看看服务器外面,并且瞧!
不幸的是,在设置新服务器时,Rackspace建议我们使用负载均衡器,忽略任何超时扩展,只需在30秒超时后关闭进出站点的所有流量。为什么?我说不出来。我希望那里有人可以。
仍然在研究如何以及为什么会发生这种情况,但我想我会把这个留在这里而不是删除问题,以防有人遇到同样的问题 - 希望它可以节省一些浪费的时间。