【发布时间】:2019-03-27 12:24:33
【问题描述】:
由于需要 Oracle 实体框架,我们有一个针对 net461 的 ASP.NET Core MVC 应用程序。
直到最近,这个应用程序在我们的 DEV 和 QA 服务器上都运行良好。
我们将其部署为一个独立的应用程序,但还在服务器上安装了 .NET Core 运行时和 ASP.NET Core IIS 托管包。
最近,我们开始在部署后遇到应用程序无法启动的问题。在浏览器中,我们得到502.5 Process Failure。
在服务器上,我们能找到的唯一错误是在 Windows 事件日志中:Application 'MACHINE/WEBROOT/APPHOST/DEFAULT WEB SITE/<appname>' with physical root 'D:\path\' created process with commandline 'D:\path\<appname>.exe ' but failed to listen on the given port '<randomport>'。
我发现的各种 SO 帖子和文章都说这通常是由于服务器与客户端上安装的运行时版本不同。
这是独立的,因此运行时是捆绑的,所以我不确定这是问题所在。
我们并未更改我们的开发 PC 或服务器上安装的内容,但已尝试在服务器上卸载并重新安装运行时。
既然这针对的是完整框架
net461,那么 .NET Core 版本是否重要?还是只有 .NET 版本才重要?
我们有些人认为问题在于它获得了一个监听端口。我尝试在Program.cs 中添加.UseUrls() 并在appSettings.json 中添加Kestrel 端口,但没有任何区别,我们仍然遇到同样的错误。
更令人困惑的是,我们当前的构建现在在 QA 服务器上运行良好,但无法在 DEV 中启动。有时我们尝试发布,但它在一种环境中工作,但在另一种环境中不起作用,有时在两种环境中都失败。我们遵循相同的部署步骤,唯一的区别是配置文件。
我们尝试了<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest> 和没有。
我们已尝试从 VS 和 dotnet publish 发布。
我们试过net stop was /ynet start w3svc。
我们甚至将服务器恢复到这些问题开始之前的较早时间。
到目前为止,我们无法找到任何模式来说明某些部署何时/为什么会运行,而另一些会失败。有没有人可以提供一些意见?
【问题讨论】:
-
听起来应用程序在启动过程中抛出异常。尝试打开已发布应用目录的命令提示符并运行
dotnet MyApp.dll。如果您看到控制台窗口中记录了任何异常,请使用这些异常以及堆栈跟踪来更新您的问题。 -
是.exe文件,所以没有.dll。如果我在本地尝试这个,它需要一分钟但最终会启动。如果我在服务器上尝试它,它只是挂起并且控制台窗口中没有显示任何内容。
-
对不起。我读过它,但它并没有陷入困境。运行 exe 与我正在寻找的效果相同。如果它挂起,则可能是连接超时或其他原因。您可能需要在
Startup类周围添加一些更广泛的日志记录。 -
这不是一个坏主意。如果我在 web.config 中设置
stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout",则会在此处创建日志文件,但永远不会写入。我将手动尝试一些File.WriteAllText()s,看看我是否无法获得任何东西。 -
ILoggerFactory是一个托管服务,因此可以将其注入Startup(以及更具体的日志接口,例如ILogger<Startup>)。简而言之,您可以将ILogger<Startup>参数添加到Startup构造函数,将其保存到ivar,然后在ConfigureServices和Configure中使用它。这应该会让您的日志记录工作更加轻松。
标签: .net iis asp.net-core port