使用 {0}.domain.com 格式的 aspboilerplate 多租户配置

aspboilerplate multi-tenant configuration using {0}.domain.com format

我下载了最新的aspboilerplate. In documentation 它列出了 3 个租户解析器。

文档要求添加;

Configuration.Modules.AbpWebCommon().MultiTenancy.DomainFormat = "{0}.mydomain.com";

获取基于域的租户解析。

我正在使用主机文件来模拟实际的 URL。所以,我觉得应用程序配置应该如下所示(除了上面代码更改为 Abp 模块);

"App": {
    "ServerRootAddress": "http://server.mydomain.com",
    "ClientRootAddress": "http://{0}.mydomain.com",
    "CorsOrigins": "...."
},

但是文档没有提到任何与此相关的内容。所以,我不认为文档是完整的。

然后在 IIS 中,我有两个站点。

  1. API 站点:server.mydomain.com。绑定设置为 server.mydomain.com
  2. 客户站点:mydomain.com。将为新租户添加新的绑定,例如子域。mydomain.com。所以基本上在用于客户端站点的 IIS 中,可以有许多具有不同子域部分的绑定,但指向同一个站点。

然后我 运行 api 站点 xxxx.web.host.exe。我认为它应该从 appsettings 中选择正确的 url 来收听。但事实并非如此。它显示;

Now listening on: http://localhost:5000

我不确定它来自哪里,因为代码中没有提到它。

如何使用基于子域的租户解析器在 IIS 上将其正确配置为 运行?

实际问题超出了我的想象。简而言之;

  1. https://edi.wang/post/2018/12/27/path-caveat-with-aspnet-core-22-iis-hosting 是一个导致应用程序一开始就崩溃的问题。原因是它在 Startup() 加载 log4net 配置文件,并且由于 asp.net core 2.2 的工作方式,在 IIS inproc 模式下它找不到文件。
  2. https://weblog.west-wind.com/posts/2019/Mar/16/ASPNET-Core-Hosting-on-IIS-with-ASPNET-Core-22 这对理解和解决问题有很大帮助。
  3. 确保在 IIS 中托管时不要混用 32 位和 64 位。