C# 在多租户环境中,使用.Net Core,如何配置Windows服务以正确的数据库为目标 问题的快速版本:
如何配置.Net Core windows服务,以便在多租户环境中以正确的数据库为目标,在多租户环境中,每个租户都有自己的数据库,并且都运行在同一个自托管服务器上 一些背景信息: 我正在开发一个新的windows服务,因为它是全新的,所以我们将使用.NETCore。我读过这篇文章,它确实讨论了如何在IIS应用程序中设置环境变量,azure,全局,每个命令窗口,但它并没有真正提到windows服务,azure devops或如何处理多租户环境 我能想到的最好的办法是,在windows服务创建后,您应该在开始参数中设置环境变量,但这似乎非常脆弱。当你看到25家公司的潜力达到或超过100家(我们是一家成长中的小公司)时,这就成了一个更大的问题。如果我们决定将服务迁移到另一台服务器,那么必须返回并手动设置所有这些变量的想法并不令人愉快 因此,问题的较长版本是:我是否在正确的轨道上,或者是否有更好的方法来设置它,使其不会变成这样一个手动过程?也许在将服务部署到服务器时设置一个变量就可以做到这一点?但是,我如何使用azure devops实现这一点 编辑1 下面是我们运行这些服务的环境的表示C# 在多租户环境中,使用.Net Core,如何配置Windows服务以正确的数据库为目标 问题的快速版本:,c#,.net-core,azure-devops,windows-services,C#,.net Core,Azure Devops,Windows Services,如何配置.Net Core windows服务,以便在多租户环境中以正确的数据库为目标,在多租户环境中,每个租户都有自己的数据库,并且都运行在同一个自托管服务器上 一些背景信息: 我正在开发一个新的windows服务,因为它是全新的,所以我们将使用.NETCore。我读过这篇文章,它确实讨论了如何在IIS应用程序中设置环境变量,azure,全局,每个命令窗口,但它并没有真正提到windows服务,azure devops或如何处理多租户环境 我能想到的最好的办法是,在windows服务创建后,您
Databases (separate machine):
Shared1
Db1
Db2
Db3
Machines:
Server1
Windows Services:
Service1
Service2
Service3
数据库正在数据库服务器上运行。每个服务有一个数据库,并且有一个共享数据库存储一些公共信息(不要认为这与问题相关)。有一台服务器。在这台服务器上有需要作为windows服务运行的代码副本。服务的副本数与数据库数相对应。因此,对于上述场景:Serivce1
连接到Db1
,Service2
连接到Db2
,Service3
连接到Db3
,等等
因为我只有一台机器,如果我将一个环境变量设置为类似于ASPNETCORE_DB1
的值,那么所有三个服务都将读取该变量并连接到DB1
,这是不需要的
如果我设置了多个环境变量:
ASPNETCORE\u Db1
,ASPNETCORE\u Db2
,ASPNETCORE\u Db2
,每个服务如何知道要读取哪个环境变量?我感觉您在这里混合了一些东西
CreateHostBuilder
方法即可。你可以看看这个。然后,您需要在托管应用程序的计算机上设置ASPNETCORE\u环境
环境变量。在这种方法中,运行时应用程序选择适当的配置。但是,请不要在配置文件中保留敏感数据。在这种方法中,您有一个针对所有租户的编译代码CreateHostBuilder
中从适当的KeyVault加载机密(如果您使用租户名称命名KeyVault,将简化选择适当的KeyVault)。你可以看看这个我希望它能帮助您做出正确的决定。为每个环境变量获取相应的数据库连接字符串是更好的方法。简单步骤:
对于#1,听起来我不能在同一台服务器上拥有多个服务,因为您谈到了在服务器级别设置环境变量。这对我不起作用,因为一台服务器将承载此应用程序的副本,而每个租户都有一个副本。我正试图避免#2,因为我不希望每个租户都进行构建。我不确定#3将如何在#1之上构建它。如果#1不起作用,那么这将使我没有选择进行一次构建?好几天没有得到您的回复,starian的回答有用吗?如果您有任何问题,请随意在这里分享。@Hugh Lin-MSFT根据我的理解,没有。我的阅读方式是:Server1:EnvVar_Db1、EnvVar_Db2、EnvVar_Db2。那么,服务的每个实例如何知道要查找哪个环境变量呢?我看到这一点的唯一方法是定义一个构建值,每个租户都需要自己的构建。我真的希望避免这种情况。另外,似乎.Net Core是使用build once开发的,部署了很多,但这在多租户环境中似乎会出现问题。我想我也会在这里回答:如果没有某种特殊的构建标志,每个服务如何知道要获取哪个环境变量?文档介绍了如何将环境变量设置为d