不管是在Linux系統還是Windows系統部署.NET Core項目,都會有自定義項目端口號的需求
一、默認的端口號
環境:Linux系統/Windows系統。正常情況下,.NET Core項目發布后的默認端口是5000,發布如下:
二、使用UserUrls自定義端口號
環境:Linux系統/Windows系統,.NET Core項目中UserUrls方式
發布后的情況如下:
但是該種方式有個缺點,如果項目發布后發現8001和服務器上的端口沖突,還需要打開代碼重新修改端口號,比較麻煩,所以使用這種方式一定要確保端口號沒有沖突。那么有沒有更好的方式,發現沖突后,可以修改配置文件進行端口號修改,下面介紹。
三、使用host.json方式自定義端口號
環境:Linux系統/Windows系統。在.NET Core項目中提供了AddJsonFile來加載自定義的配置文件,所以我們可以把端口號的寫在配置里面,然后使用AddJsonFile加載到項目中,需要更改端口號的時候直接更改配置文件就可以了,不需要修改代碼再發布了,比上一種方案要簡單些。
新增一個host.json,配置文件名稱可以自定義
{ "urls": "http://*:9099" }
main代碼修改
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace HelloFontWebsocket { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureKestrel((context, options) => { options.Limits.MaxRequestBodySize = int.MaxValue; }) .ConfigureAppConfiguration((h, c) =>//指定應用的配置提供程序 { c.AddJsonFile($"host.json", true, true); }) // .UseUrls("http://*:9010") .UseStartup<Startup>(); }); } }
四、啟動程序時手動指定綁定的端口
環境: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項目