gpt4 book ai didi

c# - 使用子域时使用 EADDRINUSE

转载 作者:行者123 更新时间:2023-11-30 16:45:39 25 4
gpt4 key购买 nike

假设您有 2 个 ASP.NET 核心项目;一个 API 和一个网站。我想使用以下 url 在本地(同时,因为该网站使用 api)处理这些问题:devapi.website.comdev.website.com

目前,只有当我在 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: Error -4091 EADDRINUSE address already in use

启动时。

如何在不指定不同端口号的情况下同时运行这 2 个项目?

最佳答案

您尝试执行的操作是不可能的,至少在没有解决方法的情况下是不可能的。原因如下:

将 Kestrel 绑定(bind)到像 dev.website.com 这样的 DNS 名称对 Kestrel 监听请求的方式没有任何影响。它仍然必须占用一个端口(默认为 80)。如果您尝试将两个 Kestrel 实例绑定(bind)到 80,首先启动的那个实际上会获得端口,而另一个会出错。

将名称添加到您的主机文件并不重要;所做的只是让 devapi.website.comdev.website.com 都解析为 127.0.0.1。您只有一个端口 80 可以绑定(bind)。在您的计算机上运行两个 HTTP 服务器的唯一方法是将它们绑定(bind)到不同的端口。

您可以通过稍微不同的方式实现相同的功能:

  1. 将您的 Kestrel 实例绑定(bind)到单独的端口 - 80/8150080/50080 等。
  2. 使用类似 ngrok 的隧道工具或 localtunnel创建终止于这些端口的单独隧道。

例如,使用localtunnel,

lt --port 50080
lt --port 50081

您将获得两个 URL,例如 https://gqgh.localtunnel.mehttps://fydh.localtunnel.me ,它将指向您单独的 Kestrel 服务器。它们不在您的域中(根据您的情况,这可能不是初学者),但至少它们是单独的公共(public) URL。

关于c# - 使用子域时使用 EADDRINUSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41729362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com