解决Linux部署.Net Core Web API出现的ERR_CONNECTION_RESET错误
2024-10-18 10:42:49
在Linux系统上部署.Net Core Web API,你可能会碰到浏览器突然中断连接,并抛出"ERR_CONNECTION_RESET"错误,API访问也就中断了。这个问题很棘手,因为它出现的时机捉摸不定,重启应用后可能暂时恢复正常,但过一段时间又会再次出现。
经过调查,我发现这个问题通常与WebHost.CreateDefaultBuilder(args)
方法的使用有关。当你用这个方法创建WebHost时,它会自动进行一些配置,其中一些设置可能与Linux系统不兼容,最终导致连接重置错误。
那么,我们该如何解决这个问题呢?
我们可以考虑放弃使用WebHost.CreateDefaultBuilder(args)
,转而使用new WebHostBuilder()
手动构建WebHost。这样做能让你更精细地控制WebHost的配置,避免使用默认配置中可能存在的隐患。
具体操作步骤:
- 打开你的
Program.cs
文件。 - 找到使用
WebHost.CreateDefaultBuilder(args)
创建WebHost的代码,例如:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
- 将这段代码替换成以下代码:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
})
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
config.AddEnvironmentVariables();
});
这段代码手动配置了Kestrel服务器、内容根目录、IIS集成、日志记录和应用程序配置。其中,ConfigureAppConfiguration
方法用于加载appsettings.json
文件中的配置信息,解决了使用new WebHostBuilder()
后无法读取配置文件的问题。
- 保存文件并重新编译你的应用程序。
完成以上步骤后,你的应用程序应该能在Linux系统上稳定运行,不会再出现"ERR_CONNECTION_RESET"错误。
需要注意的是, 手动配置WebHost需要你对.Net Core应用程序的运行机制有一定的了解。如果你对这些配置项不熟悉,可以参考.Net Core官方文档或其他相关资料。
这种方法虽然能解决问题,但同时也增加了配置的复杂度。如果你希望用更简单的方法解决问题,可以尝试升级.Net Core版本,或者检查Linux系统是否存在其他配置问题,比如防火墙设置、网络连接稳定性等。
"ERR_CONNECTION_RESET"错误的出现可能由多种因素导致。通过仔细分析错误信息和应用程序的配置,你应该能找到解决问题的方法,让你的.Net Core Web API在Linux系统上稳定运行。
常见问题及其解答:
1. 为什么使用WebHost.CreateDefaultBuilder(args)
会导致"ERR_CONNECTION_RESET"错误?
WebHost.CreateDefaultBuilder(args)
会自动应用一些默认配置,这些配置在某些Linux环境下可能不适用,例如它可能会使用与Linux内核不兼容的网络设置,从而导致连接重置。
2. 手动配置WebHost有哪些需要注意的地方?
手动配置WebHost需要你对.Net Core应用程序的运行机制有一定的了解。你需要确保配置的各个组件(如Kestrel、日志记录、应用程序配置等)都能正常工作,并且相互之间没有冲突。
3. 除了手动配置WebHost,还有其他解决"ERR_CONNECTION_RESET"错误的方法吗?
可以尝试升级.Net Core版本,或者检查Linux系统是否存在其他配置问题,例如防火墙设置、网络连接稳定性等。一些情况下,这个问题也可能是由应用程序代码中的Bug导致的,需要进行代码调试来排查问题。
4. ConfigureAppConfiguration
方法的作用是什么?
ConfigureAppConfiguration
方法用于配置应用程序的配置源。在手动配置WebHost时,我们需要使用这个方法来加载appsettings.json
文件中的配置信息,否则应用程序将无法读取配置文件。
5. 如果我仍然无法解决问题,该怎么办?
你可以尝试搜索网络,查看是否有其他人遇到过类似的问题,并找到了解决方案。你也可以在.Net Core社区或论坛上寻求帮助,或者联系微软的技术支持团队。