.NET 5应用可在IIS Express运行,但通过CLI启动Kestrel失败如何解决?
问题原因
报错核心是Kestrel尝试绑定的https://127.0.0.1:5001端口已经被其他进程占用,同时你在代码的UseKestrel()方法里自定义了监听端点,覆盖了默认的5000/5001端口配置,所以启动时会先打印覆盖提示,再抛出端口占用异常。
解决方案
1. 临时解决:终止占用5001端口的进程
- Windows系统打开管理员权限的命令提示符/PowerShell,执行命令查询占用端口的进程PID:
netstat -ano | findstr :5001
输出结果最后一列就是对应进程的PID,替换下方命令中的<PID>执行即可终止进程:
taskkill /PID <PID> /F
- Linux/macOS系统执行命令查询PID:
lsof -i :5001
拿到PID后执行终止命令:
kill -9 <PID>
2. 永久解决:修改Kestrel监听端口
如果不想终止占用端口的进程,可以直接修改应用的监听端口,避免冲突,共有三种修改方式:
方式1:修改代码中的UseKestrel配置
找到Program.cs文件里的UseKestrel()代码段,修改绑定的端口号为未被占用的端口即可,示例:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseKestrel(options => { // 替换为其他未被占用的端口 options.ListenLocalhost(5002); // HTTP监听端口 options.ListenLocalhost(5003, o => o.UseHttps()); // HTTPS监听端口 }); webBuilder.UseStartup<Startup>(); });
如果没有特殊的自定义监听需求,也可以直接删除UseKestrel()里的端口配置,Kestrel会优先读取配置文件的端口规则,灵活度更高。
方式2:启动时通过命令参数指定端口
不需要修改代码,CLI启动时直接加urls参数指定端口即可:
dotnet run --urls "http://localhost:5002;https://localhost:5003"
方式3:通过appsettings.json配置端口
在appsettings.json文件中添加Kestrel节点,统一配置监听规则:
{ "Kestrel": { "Endpoints": { "Http": { "Url": "http://localhost:5002" }, "Https": { "Url": "https://localhost:5003" } } } }
3. 同时运行IIS Express和Kestrel的配置方法
只要保证两者的监听端口不重复即可,打开项目Properties文件夹下的launchSettings.json文件,分别配置两种启动方式的端口:
{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:12345", // IIS Express的HTTP端口,和Kestrel端口不重复 "sslPort": 44398 // IIS Express的HTTPS端口,和Kestrel端口不重复 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "EmployeeManagement": { "commandName": "Project", "launchBrowser": true, "applicationUrl": "http://localhost:5002;https://localhost:5003", // Kestrel的监听端口 "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } }
配置完成后即可同时启动两种服务,不会出现端口冲突。
内容的提问来源于stack exchange,提问作者Akshaya Sakthivel
相关产品推荐
相关产品推荐

