作者:可爱的嗨-我喜欢你 | 来源:互联网 | 2023-02-01 11:49
我有一个小型的Web应用程序,使用部署在Azure上的Asp.Net Core 1.1开发,效果很好.我刚刚迁移了项目以使用Asp.Net Core 2.0并尝试在Azure上部署它.部署进行得很顺利,但是当我打开网站时,出现了502.5错误.当我检查我的Azure日志流时,我收到以下错误:
当CGI应用程序未返回有效的HTTP标头集,或者代理或网关无法将请求发送到父网关时,会发生此错误.如果不是CGI问题,您可能需要获取网络跟踪或联系代理服务器管理员.
毫无疑问,它在我的开发机器上使用相同的代码运行良好.请注意,我也在使用Entity Framework Core 2.0,尽管我在Azure上停用了数据库创建(以检查它是否不是原因).
有关信息,我从1.1迁移到2.0的方法是将目标框架设置更改为"netcoreapp2.0"并使用NuGet包"Microsoft.AspNetCore.All".只是为了确定,我还删除了我的发布配置文件并重新创建了一个.
是否有可能Azure上尚未提供Asp.Net Core 2.0?我是Asp.Net Core的新手,因此我不知道Azure上何时提供新版本.
编辑
当我尝试通过natemcmaster提出的调试控制台使用dot net CLI运行我的应用程序时,我遇到了以下问题:
未处理的异常:System.IO.FileLoadException:无法加载文件或程序集'Microsoft.AspNetCore.Hosting.Abstractions,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = adb9793829ddae60'.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
我在我的桌面上下载了DLL并使用Dot Net Peak检查了版本,事实上,DLL是1.1.2,虽然我使用Visual Studio创建项目并直接发布它,因此它是Visual Studio的问题吗?还是Nuget?
1> ssougnez..:
问题实际上来自这样一个事实,起初,我的网络应用程序正在使用.net核心1.1,它将所有DLL部署在Web应用程序的"wwwroot"文件夹中.但是,使用asp.net core 2.0时,它不会再这样做,因为DLL是从全局存储中获取的.但是,由于Visual Studio在发布之前没有清理目标文件夹,我最终得到了1.1 DLL在我的wwwroot中的情况,因此网站正在拾取这些而不是商店文件夹中的2.0.
这里有更详细的解释:https://github.com/Azure/app-service-announcements-discussions/issues/2#issuecomment-313816550
2> Sam..:
其他人已经解释了为什么会这样.我想提供另一个 - 可以说更容易 - 解决问题的方法.
只需更改设置即可删除Azure上已有的文件 - 请参阅以下内容:
请注意,如果该服务上有任何Web作业(例如“ Let's Encrypt”加载项),这些作业将被这些设置删除。
3> natemcmaster..:
检查门户中的日志文件或远程访问D:\home\LogFiles
.
有时,日志不会指示出现了什么问题.进一步调查的另一个好方法是尝试从调试控制台启动ASP.NET Core应用程序.如果您缺少共享框架版本或存在另一个启动错误,则从调试控制台可以更明显地看到这一点.
去
https://(your web site name here).scm.azurewebsites.net/DebugConsole/
您的网站将在 D:\home\site\wwwroot
.您可以通过执行以下命令启动它
cd D:\home\site\wwwroot
dotnet MyWebApp.dll
如果您仍无法启动应用程序,请确保该应用程序D:\home\site\wwwroot\web.config
可用并配置为使用ASP.NET核心模块.https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module