我有一个使用传统
Program
和 Startup
方法运行的 ASP.NET Core 7 Web API。它使用默认设置作为控制台应用程序运行。在 Visual Studio 中,我可以运行或调试,控制台窗口打开,服务器启动,我可以从端口 5000/5001 发送请求和接收回复。
但是,当我在 Visual Studio 之外运行 EXE 时,我得到一个挂起的命令提示符。我无法向端口 5000/5001 发送请求 - 我得到
connection refused
,但如果我尝试运行它两次,它说第二次尝试时这些端口不可用。
我在
ConfigureServices
和 Configure
方法中添加了一些日志记录,并且这些输出到两个实例中的控制台。这些方法都在完成时进行记录,但是除非您在 Visual Studio 中运行应用程序,否则它永远不会进入“侦听端口 5000”。如果我运行它并将 VS 附加到进程,它似乎不会卡在任何地方。
我在 EventViewer 或其他任何地方都没有错误。
在 Visual Studio 中输出到控制台:
info: ApiAppTesting.Startup[0]
App Configure Completed
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
在命令提示符下运行相同的 EXE 时的输出(无论是否以管理员身份,或在 Powershell 中):
info: ApiAppTesting.Startup[0]
App Configure Completed
应用挂在这里。
我不确定如何进一步调试,或者内置代码接下来调用什么方法以便我可以进一步调试。我使用相同的设置创建了一个空白的 Web API 应用程序,但这并没有发生。
是否需要更改某些内容才能使其在 IDE 之外运行,或者是否可以打开额外的日志记录以查看它冻结的确切位置?
编辑:我按照建议运行了
netstat -a
,可以看到端口 5000 (http) 正在监听。如果我通过 Telnet 向该端口发送请求,我会在控制台中记录一条消息:
无法确定重定向的 https 端口
所以我认为这与
https
有关(使用自签名开发证书,但在 Visual Studio 中工作....)。仍然没有收到任何错误消息。
编辑:
Program.cs
中的代码:
public static void Main(string[] args)
{
Console.WriteLine("Press Enter to Start");
Console.ReadLine(); //Added to allow debugger to attach before anything is run
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}