假设您有2个ASP.NET核心项目; API和网站。
我想使用以下网址(devapi.website.com
和dev.website.com
在本地(同时,因为网站使用api)处理这些内容。
目前,我只能在Program.cs
文件中为两个项目指定不同的端口号(以及在我的浏览器中使用所述端口号)时才能使用此功能:
API
var host = new WebHostBuilder()
.UseUrls("http://devapi.website.com:81")
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
网站
var host = new WebHostBuilder()
.UseUrls("http://dev.website.com:82")
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
在我的主持人档案中:
127.0.0.1 devapi.website.com
127.0.0.1 dev.website.com
如果我在Program.cs
中指定相同的端口号(或者,事实上,根本没有 - 我想使用端口80),一个项目将运行而另一个项目将抛出
Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvException:错误-4091 EADDRINUSE地址已在使用
启动时。
如何在不指定不同端口号的情况下同时运行这两个项目?
答案 0 :(得分:2)
您尝试做的事情是不可能的,至少没有解决方法。原因如下:
将Kestrel绑定到像dev.website.com
这样的DNS名称对Kestrel监听请求的方式没有任何影响。它仍然必须绑定一个端口(默认为80)。如果您尝试将两个Kestrel绑定实例绑定到80,则先启动哪个实际获取端口,另一个实际生成错误。
将名称添加到主机文件无关紧要;所有这一切都使devapi.website.com
和dev.website.com
解析为127.0.0.1
。您只有一个端口80要绑定。在您的计算机上运行两个HTTP服务器的唯一方法是将它们绑定到不同的端口。
您可以采用略微不同的方式实现相同的功能:
80/81
或50080/50080
等。例如,使用localtunnel,
lt --port 50080
lt --port 50081
您将获得两个网址,例如https://gqgh.localtunnel.me和https://fydh.localtunnel.me,它们将指向您单独的Kestrel服务器。它们不在您的域中(根据您的具体情况,可能不是首发),但至少它们是单独的公共网址。