C# ASP Web API在不同应用程序实例之间共享代码库?

C# ASP Web API在不同应用程序实例之间共享代码库?,c#,asp.net,asp.net-web-api,web-config,C#,Asp.net,Asp.net Web Api,Web Config,这个问题已经被问了好几次了,但我还没有找到一个针对我的问题的答案 基本上,我有一个ASP Web API应用程序,可以部署任意次数(目前为50次),将连接到不同的数据库。除了web.config中的DB连接字符串及其所在的虚拟目录外,所有内容都完全相同 现在,我们正在使用WebDeploy使用代码更新手动更新所有子目录。我们已经实现了自动化,但仍然很痛苦,尤其是当出现错误时 只是想知道是否有一种方法可以将主代码库放在某个地方(比如说站点的根目录),并在其下只包含web.config的虚拟目录?基

这个问题已经被问了好几次了,但我还没有找到一个针对我的问题的答案

基本上,我有一个ASP Web API应用程序,可以部署任意次数(目前为50次),将连接到不同的数据库。除了web.config中的DB连接字符串及其所在的虚拟目录外,所有内容都完全相同

现在,我们正在使用WebDeploy使用代码更新手动更新所有子目录。我们已经实现了自动化,但仍然很痛苦,尤其是当出现错误时

只是想知道是否有一种方法可以将主代码库放在某个地方(比如说站点的根目录),并在其下只包含web.config的虚拟目录?基于我发现的其他线程,我认为这是不可能的(尽管它们要老得多)

我试着这样设置它,在父站点下有虚拟目录(物理上指向父站点),在物理子目录下有不同的web.config,但它什么也不做

或者,在代码中动态生成DB连接字符串的更好方法是什么?我真的不喜欢这个解决方案,但还有别的办法吗


谢谢

我也希望API中支持多租户。API调用的一个入口点有很多优点—统计、节流、日志记录等

根据提供的api密钥创建HTTP安全模块以选择数据库。非常重要的是,此映射是安全的,并且经过良好测试


我也会考虑合并到一个数据库中,限制模式或某事,但这可能超出了范围……p> 您不需要生成连接字符串。我想说的是,与50个实例不同,您可以有1个实例和50个不同的配置/连接字符串,并且可以根据您当前的请求上下文选择相应的连接字符串。您可以使用某种约定来命名连接字符串或类似的东西,这取决于您,然后我将创建一个连接工厂类,并将所有连接创建逻辑放在那里

下面的链接是一个很好的起点,这是一个非常类似的例子


您有50个实例还有其他原因吗。如果它只是一个不同的数据库连接,你应该有一个“多租户”实例,并根据请求决定你将连接到哪个数据库..不,没有理由,不确定为什么选择这种方法,但我最终选择了它。这是否意味着连接字符串将在代码中动态生成?是的,不幸的是,单独的数据库是业务需求。多租户支持是ASP特有的还是通用的?如果它是泛型的,我想你的意思是在头中解析一些东西(可能是简单的虚拟目录名),然后用代码将其映射到数据库?啊,对,明白了。但有一件事我可能没有弄清楚,那就是任何人都可以随时创建新实例(只要它们提供支付信息)。因此,我不想手动将连接字符串添加到web.config,因为这会导致应用程序池回收,不是吗?是的,当您保存webconfig时,应用程序池将回收,但如果您在IIS之外保留会话状态,则非常安全。下面是如何配置SQLServer以保持会话状态Hmmm,这样我就可以让它工作了,但不确定这是解决它的最佳方法。本质上,对于我拥有的每个API调用:DataModel db=newdatamodel(Request.GetRequestContext().virtualpathoot.Substring(1))。这将获取当前请求来自的虚拟目录。在我的DataModel初始值设定项类中,我有一个方法,该方法将虚拟目录映射到一个DB名称,然后使用新的DB名称动态更改连接字符串。这不应该对性能造成太大的影响,因为我认为数据库是通过每次API调用初始化的?在这种情况下,您唯一应该关心的是获取正确的连接字符串以及所需的时间。关于实现,没有代码很难说,但无论如何,这不是本文讨论的主题