VS 2015,C#6,MVC5,Roslyn--Azure web应用程序上的502个网关错误



我正在诊断这个问题,我会随着了解更多信息而更新,但我想发布我的信息,以防有快速解决方案/有人已经看到了这个问题。

我有一个MVC5项目,.NET 4.5.2,Visual Studio 2015。我最近开始使用C#6,所以为了让Razor工作,我不得不安装CodeDOM编译器Nuget包。一切都在我的本地机器上工作(当然是这样)。

我目前稳定的Azure站点是在Git上提交的,它没有使用C#6,而是使用.NET 4.5.2和VS 2015。因此,我的最新提交和稳定提交之间唯一的区别是引入了C#和Roslyn。

当我将新的提交部署到Azure时,在它旋转长达2分钟后,我总是会收到502个网关错误。对于不返回视图但返回内容操作结果的MVC操作,它最终会返回内容,尽管速度相当慢。当我去Kudu查看进程时,我可以看到Roslyn编译器在运行,昨晚我注意到w3wp进程每隔一段时间就会重新启动,通常是在我收到502请求之后。

如果我重新部署我以前的提交,它工作得很好。

我接下来的步骤实际上是使用C#6和MVC 5将问题隔离到一个空白的web应用程序中,看看这是否是根本原因——但我有根据的猜测是,Roslyn编译器的引入在Azure中搞砸了事情。

有人有什么想法吗?我会在了解更多信息时更新这篇文章,但我接下来的一天和周末都很忙。

慢慢但肯定地想明白了,花了我一整天的时间。我部署了自上一次稳定提交以来的每一次提交,并找到了引入该问题的提交。在提交过程中,我引入了更多的TypeScript文件。事实证明,这些文件不是在Kudu/AAzure中编译的,因此JS文件丢失了,导致我的绑定/缩小框架(Cassette)试图解析引用——它从未解析过,并导致StackOverflow或循环问题(单独的错误),导致w3wp进程崩溃。这就是为什么几乎不可能调试的原因,也是为什么我的非Razor操作返回的原因——他们没有呈现捆绑包,所以它没有调用Cassette。

我在项目中包含了生成的JS文件,从而解决了问题。我想我只需要编辑我的Kudu部署脚本,并在tsconfig.json文件上手动调用tsc,这样它就可以在构建时正确编译。

相关内容

最新更新