我正在诊断这个问题,我会更新,因为我了解更多,但我想发布我所拥有的内容,以防有快速修复/有人已经看过这个。
我有一个MVC5项目,.NET 4.5.2,Visual Studio 2015.我最近开始使用C#6,所以为了让Razor工作,我必须安装CodeDOM编译器Nuget包。一切都在我的本地机器上运行(当然它确实如此)。
我当前的稳定Azure站点是在不使用C#6的Git提交中,但是使用的是.NET 4.5.2和VS 2015.因此,我的最新提交和稳定提交之间唯一的重大区别是引入了C# 6和罗斯林。
当我将新提交部署到Azure时,在旋转最多2分钟后,我始终会遇到502网关错误。在不返回视图而是返回内容操作结果的MVC操作上,它最终会返回内容,尽管它很慢。当我去Kudu并查看进程时,我可以看到Roslyn编译器运行,我昨晚注意到w3wp进程每隔一段时间就会重启,通常是在我获得502请求后。
如果我重新部署我之前的提交,它可以正常工作。
我接下来的步骤实际上是将问题隔离到使用C#6和MVC 5的空白Web应用程序,看看这是否是根本原因 - 但我有根据的猜测是Roslyn编译器的引入正在弄乱天青。
有人有什么想法吗?我会更新这个,因为我了解更多,但我有一个忙碌的一天和周末。
答案 0 :(得分:0)
想出来,慢慢地,但肯定地,把我整天带走了。我从上一个稳定版本开始部署了每个提交,并找到了引入该问题的提交。在提交中,我介绍了一些更多的TypeScript文件。事实证明这些都没有在Kudu / Azure中编译,因此JS文件丢失,导致我的捆绑/缩小框架(Cassette)尝试解析引用 - 它从未解决并导致StackOverflow或循环问题(单独的bug)导致我的w3wp进程崩溃。这就是为什么几乎不可能进行调试以及为什么我的非Razor动作返回 - 他们没有渲染捆绑所以它没有调用Cassette。
我将生成的JS文件包含在项目中并修复了问题。我想我会编辑我的Kudu部署脚本并在我的tsconfig.json文件上手动调用tsc,以便在构建时正确编译。