【问题标题】:Deploying a .Net Core app that targets .Net Framework 4.62 to Azure将面向 .Net Framework 4.62 的 .Net Core 应用程序部署到 Azure
【发布时间】:2017-09-01 19:38:49
【问题描述】:

我们使用 .Net Core Web 模板在 VS 2017 中创建了一个应用程序。从那以后我们意识到我们实际上需要引用一些完整的框架包。

所以我们把目标框架改成了4.6.2。

但是,现在当 Web 应用程序部署到 azure 时,我一直收到错误消息:

HTTP 错误 502.5 - 进程失败 此问题的常见原因: 申请进程启动失败 应用程序进程开始但随后停止 应用程序进程已启动但未能侦听配置的端口 故障排除步骤: 检查系统事件日志中的错误消息 启用记录应用程序进程的标准输出消息 将调试器附加到应用程序进程并检查 欲了解更多信息,请访问:https://go.microsoft.com/fwlink/?LinkID=808681

它似乎甚至无法启动,但我不确定我需要进行哪些更改才能使其正常工作。

当我发布它时,会在服务器上创建一个 web.config 文件,其中包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--ProjectGuid: db77cdb1-05c4-450e-94d8-5dabc48c6d76-->
<system.webServer>
<handlers>
<add resourceType="Unspecified" modules="AspNetCoreModule" verb="*" path="*" name="aspNetCore"/>
</handlers>
<aspNetCore stdoutLogFile=".\logs\stdout" stdoutLogEnabled="true" processPath=".\Genesis.IdentityServer.exe"/>
</system.webServer>
</configuration>

我启用了日志记录。

天蓝色调试控制台上的事件日志报错如下:

<Event>
<System>
<Provider Name=".NET Runtime"/>
<EventID>1026</EventID>
<Level>0</Level>
<Task>0</Task>
<Keywords>Keywords</Keywords>
<TimeCreated SystemTime="2017-09-01T06:14:38Z"/>
<EventRecordID>868107718</EventRecordID>
<Channel>Application</Channel>
<Computer>RD0003FFC3731F</Computer>
<Security/>
</System>
<EventData>
<Data>Application: Genesis.IdentityServer.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: Microsoft.Net.Http.Server.WebListenerException at Microsoft.Net.Http.Server.ServerSession..ctor() at Microsoft.Net.Http.Server.WebListener..ctor(Microsoft.Net.Http.Server.WebListenerSettings) at Microsoft.AspNetCore.Server.WebListener.MessagePump..ctor(Microsoft.Extensions.Options.IOptions`1<Microsoft.AspNetCore.Server.WebListener.WebListenerOptions>, Microsoft.Extensions.Logging.ILoggerFactory) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(Microsoft.Extensions.DependencyInjection.ServiceLookup.ConstructorCallSite, Microsoft.Extensions.DependencyInjection.ServiceProvider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].VisitCallSite(Microsoft.Extensions.DependencyInjection.ServiceLookup.IServiceCallSite, System.__Canon) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(Microsoft.Extensions.DependencyInjection.ServiceLookup.ScopedCallSite, Microsoft.Extensions.DependencyInjection.ServiceProvider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton(Microsoft.Extensions.DependencyInjection.ServiceLookup.SingletonCallSite, Microsoft.Extensions.DependencyInjection.ServiceProvider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].VisitCallSite(Microsoft.Extensions.DependencyInjection.ServiceLookup.IServiceCallSite, System.__Canon) at Microsoft.Extensions.DependencyInjection.ServiceProvider+<>c__DisplayClass16_0.<RealizeService>b__0(Microsoft.Extensions.DependencyInjection.ServiceProvider) at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(System.Type) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(System.IServiceProvider, System.Type) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.IServiceProvider) at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureServer() at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication() at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build() at Genesis.IdentityServer.Program.Main(System.String[]) </Data>
</EventData>
</Event>
<Event>
<System>
<Provider Name="IIS AspNetCore Module"/>
<EventID>1000</EventID>
<Level>0</Level>
<Task>0</Task>
<Keywords>Keywords</Keywords>
<TimeCreated SystemTime="2017-09-01T06:14:38Z"/>
<EventRecordID>868107937</EventRecordID>
<Channel>Application</Channel>
<Computer>RD0003FFC3731F</Computer>
<Security/>
</System>
<EventData>
<Data>Application 'MACHINE/WEBROOT/APPHOST/GENIDENTITYSERVER' with physical root 'D:\home\site\wwwroot\' failed to start process with commandline 'D:\home\site\wwwroot\Genesis.IdentityServer.exe ', ErrorCode = '0x80004005 : e0434352.</Data>
</EventData>
</Event>
</Events>

这让我很困惑,我不能简单地从我的 .net 核心应用程序中定位框架 462 吗?

编辑

我打开了详细错误,现在看到:

HTTP 错误 502.5 - 网关错误 指定的 CGI 应用程序遇到错误,服务器终止了进程。

最可能的原因: CGI 应用程序没有返回一组有效的 HTTP 错误。 由于父网关中的错误,充当代理或网关的服务器无法处理请求。

您可以尝试的事情: 使用 DebugDiag 对 CGI 应用程序进行故障排除。 确定代理或网关是否会导致此错误。

详细错误信息: 模块 AspNetCoreModule 通知 ExecuteRequestHandler 处理程序 aspNetCore 错误代码 0x00000000 请求的 URL http://GenIdentityServer:80/favicon.ico 物理路径 D:\home\site\wwwroot\favicon.ico 登录方法匿名 登录用户匿名

我在 WebHostBuilder().build 调用周围放了一个 try catch,这是记录的内容:

Access is denied   at Microsoft.Net.Http.Server.ServerSession..ctor()
   at Microsoft.Net.Http.Server.WebListener..ctor(WebListenerSettings settings)
   at Microsoft.AspNetCore.Server.WebListener.MessagePump..ctor(IOptions`1 options, ILoggerFactory loggerFactory)
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton(SingletonCallSite singletonCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass16_0.<RealizeService>b__0(ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureServer()
   at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
   at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
   at Genesis.IdentityServer.Program.Main(String[] args)

【问题讨论】:

  • 事件日志中的堆栈跟踪几乎无法读取,并且由于某种原因,没有与似乎是罪魁祸首的WebListenerException 关联的消息。我建议您在 Main 方法中使用 try-catch 包围对 WebHostBuilder.Build() 的调用,然后以某种方式记录抛出的任何异常,以便您可以读取它(将 exception.ToString() 写入日志)。您可能会收到 WebListenerException 的一个原因是该进程正在尝试绑定到无法访问或已在使用的端口。
  • 我用我从 azure 的详细错误日志中看到的错误更新了问题

标签: .net azure


【解决方案1】:

好吧,我没有意识到这已被添加到代码中:

//.UseWebListener(选项 => //{ // options.ListenerSettings.Authentication.Schemes = AuthenticationSchemes.Negotiate | AuthenticationSchemes.NTLM; // options.ListenerSettings.Authentication.AllowAnonymous = true; //})

这当然不适用于 azure!

【讨论】:

    猜你喜欢
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    相关资源
    最近更新 更多