VS 2015、C# 6、MVC5、Roslyn——Azure Web 应用程序上的 502 网关错误
VS 2015, C# 6, MVC5, Roslyn -- 502 gateway errors on Azure web app
我正在诊断这个问题,我会在了解更多信息后进行更新,但我想 post 我所拥有的以防万一 fix/someone 已经看到了这个.
我有一个 MVC5 项目,.NET 4.5.2,Visual Studio 2015。我最近开始使用 C# 6,所以为了让 Razor 工作,我必须安装 CodeDOM 编译器 Nuget 包。在我的本地机器上一切正常(当然可以)。
我当前的稳定版 Azure 站点在 Git 提交上,该提交未使用 C# 6,但使用的是 .NET 4.5.2 和 VS 2015。所以我最新的提交与稳定版之间唯一的大区别commit是C#6和Roslyn的介绍。
当我将新提交部署到 Azure 时,在它旋转最多 2 分钟后,我一直收到 502 网关错误。在不 return 视图而是内容操作结果的 MVC 操作上,它最终会 return 内容,尽管它很慢。当我去 Kudu 并查看进程时,我可以看到 Roslyn 编译器正在运行,我昨晚注意到 w3wp 进程会经常重启,通常是在我收到 502 请求后。
如果我重新部署我之前的提交,它工作正常。
我的下一步确实是将问题隔离到使用 C# 6 和 MVC 5 的空白 Web 应用程序,看看这是否是根本原因——但我有根据的猜测是 Roslyn 编译器的引入把事情搞砸了在 Azure 中。
有人有什么想法吗?我会在了解更多信息后更新此内容,但接下来的一天和周末都很忙。
慢慢地但肯定地想出来,花了我一整天。我部署了自上次稳定提交以来的每个提交,并找到了引入问题的提交。在提交中,我引入了更多的 TypeScript 文件。事实证明这些没有在 Kudu/Azure 中编译,因此 JS 文件丢失,导致我的 bundling/minification 框架(Cassette)尝试解析引用——它从未解决并导致 Whosebug 或循环问题(单独的错误)导致我的 w3wp 进程崩溃。这就是为什么调试几乎不可能,也是为什么我的非 Razor 操作返回的原因——它们没有渲染包,所以它没有调用 Cassette。
我将生成的 JS 文件包含在项目中并解决了问题。我想我将只编辑我的 Kudu 部署脚本并在我的 tsconfig.json 文件上手动调用 tsc 以便它在构建时正确编译。
我正在诊断这个问题,我会在了解更多信息后进行更新,但我想 post 我所拥有的以防万一 fix/someone 已经看到了这个.
我有一个 MVC5 项目,.NET 4.5.2,Visual Studio 2015。我最近开始使用 C# 6,所以为了让 Razor 工作,我必须安装 CodeDOM 编译器 Nuget 包。在我的本地机器上一切正常(当然可以)。
我当前的稳定版 Azure 站点在 Git 提交上,该提交未使用 C# 6,但使用的是 .NET 4.5.2 和 VS 2015。所以我最新的提交与稳定版之间唯一的大区别commit是C#6和Roslyn的介绍。
当我将新提交部署到 Azure 时,在它旋转最多 2 分钟后,我一直收到 502 网关错误。在不 return 视图而是内容操作结果的 MVC 操作上,它最终会 return 内容,尽管它很慢。当我去 Kudu 并查看进程时,我可以看到 Roslyn 编译器正在运行,我昨晚注意到 w3wp 进程会经常重启,通常是在我收到 502 请求后。
如果我重新部署我之前的提交,它工作正常。
我的下一步确实是将问题隔离到使用 C# 6 和 MVC 5 的空白 Web 应用程序,看看这是否是根本原因——但我有根据的猜测是 Roslyn 编译器的引入把事情搞砸了在 Azure 中。
有人有什么想法吗?我会在了解更多信息后更新此内容,但接下来的一天和周末都很忙。
慢慢地但肯定地想出来,花了我一整天。我部署了自上次稳定提交以来的每个提交,并找到了引入问题的提交。在提交中,我引入了更多的 TypeScript 文件。事实证明这些没有在 Kudu/Azure 中编译,因此 JS 文件丢失,导致我的 bundling/minification 框架(Cassette)尝试解析引用——它从未解决并导致 Whosebug 或循环问题(单独的错误)导致我的 w3wp 进程崩溃。这就是为什么调试几乎不可能,也是为什么我的非 Razor 操作返回的原因——它们没有渲染包,所以它没有调用 Cassette。
我将生成的 JS 文件包含在项目中并解决了问题。我想我将只编辑我的 Kudu 部署脚本并在我的 tsconfig.json 文件上手动调用 tsc 以便它在构建时正确编译。