不管是在Linux系统还是Windows系统部署.NET Core项目,都会有自定义项目端口号的需求,结合网上的说法进行总结下。
一、.NET Core项目默认的端口号(环境:Linux系统/Windows系统)
正常情况下,.NET Core项目发布后的默认端口是5000,发布如下:
二、.NET Core项目中UserUrls方式自定义端口号(环境:Linux系统/Windows系统)
发布后的情况如下:
但是该种方式有个缺点,如果项目发布后发现8001和服务器上的端口冲突,还需要打开代码重新修改端口号,比较麻烦,所以使用这种方式一定要确保端口号没有冲突。那么有没有更好的方式,发现冲突后,可以修改配置文件进行端口号修改,下面介绍。
三、.NET Core项目中host.json方式自定义端口号(环境:Linux系统/Windows系统)
在.NET Core项目中提供了AddJsonFile来加载自定义的配置文件,所以我们可以把端口号的写在配置里面,然后使用AddJsonFile加载到项目中,需要更改端口号的时候直接更改配置文件就可以了,不需要修改代码再发布了,比上一种方案要简单些。
新增一个host.json,配置文件名称可以自定义
{ "urls": "http://*:9099" }
main代码修改
public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }).ConfigureAppConfiguration((h, c) =>//指定应用的配置提供程序 { c.AddJsonFile($"host.json", true, true); });
四、启动程序时手动指定绑定的端口(环境:Linux系统/Windows系统)
现在好多公司职责分的很清楚,研发、运维,好多部署的工作都是运维做的,所以我不喜欢在程序中写死这个配置,因为每次部署的时候改程序或者改配置文件是很有风险和很容易背锅的事情。我们知道.net core可以使用dotnet 命令方式去运行 .net core 应用,这种方式使我们的web不再依赖于iis,实现了跨平台。
所以在启动程序时手动指定绑定的端口是我最推荐的方式,
方法如下:
> dotnet xxx.dll --urls http://*:8001
正常启动程序时,指令是dotnet xxx.dll,我们只要在后面加上要绑定的端口就好了。
但是也存在问题,是不是每次启动程序都需要指定端口号,是不是有点麻烦,其实也是有解决办法的,可以利用supervisor作为守护进程,把启动指令写进supervisor配置文件中就好了,这样就算网站因为意外问题被关掉,supervisor依然可以使用设定好的启动命令将网站拉起来。有时间会总结Linux系统上部署.NET Core项目,才用的就是该种方式
五、IIS部署项目,指定端口号(环境:Windows)
做.NET开发的应该比较熟悉IIS了,我们利用IIS部署Core项目时和以前的Framework项目的部署差不多,可以自定义端口号。不同的地方可以总结如下:
1、需要配置core环境
2、应用程序池需要采用无托管方式
具体可以看看Windows服务器上部署.NET Core项目