gpt4 book ai didi

c# - 在azure中托管共享dll

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:08 26 4
gpt4 key购买 nike

我有一个 C# 类库,正在编译成多个应用程序,所有这些应用程序都作为 Azure 上的 ASP.NET 4.0 WebForm 和/或 MVC 云服务托管。我想集中这个库,以便对包的任何更新不需要在每个更新周期编译和部署每个项目。

显然,我可以选择创建 WCF 服务,但这需要我重构类库以及使用它的每个项目以成为服务的使用者,并且由于系统的复杂性,这可能会导致需要几个月的时间,不是短期的选择。

由于我的所有项目都位于 Azure 上的同一个 Affinity Group 中,是否有其他方法可以集中此 DLL 及其方法供所有项目共享?我在网上找不到任何东西,所以我希望从社区中获得一些好的选择和思想启发。如果我遗漏了任何细节,请告诉我。

最佳答案

David 很好地解释了如何管理库的部署。但除此之外,您还需要对架构进行更改以支持这种相当动态的场景。

首先,您的应用程序不应使用实现,而应使用接口(interface)。假设您的库允许您计算税收,并且该税收计算器的实现每隔几周就会发生变化。您不想每次都为此更改应用程序,而且显然,WCF 服务不适合您。

现在您可以按如下方式实现它:

  • 类库:包含 ITaxCalculator 接口(interface)的 TaxCalculator.Contracts
  • 类库:TaxCalculator.ImplementationABC,包含实现 ITaxCalculator 接口(interface)的 ABCTaxCalculator 类。
  • 类库:TaxCalculator.ImplementationDEF,包含实现 ITaxCalculator 接口(interface)的 DEFTaxCalculator 类(几周后)。
  • 等等...

您的 ASP.NET MVC 网站只能与 ItaxCalculator 界面配合使用。使用MEF您可以扫描文件夹 (LocalResource) 来查找包含实现 ItaxCalculator 接口(interface)的类的任何程序集。因此,您将 Web 应用程序与税收计算器库解耦。

就像 David 已经解释的那样,您可以将最新版本的库存储在 Blob 存储中,并在使用 MEF 加载程序集之前将其下载到本地(在 LocalResource 中)。这样,原始应用程序保持不变,您仍然可以对库进行必要的更改。

为了通知每个实例新版本已发布,您有几种选择。您可以运行一个计时器来检查容器中的更改,您可以使用服务总线主题(每个实例都会订阅该主题),...但是就像 David 已经解释的那样,您需要管理容器的滚动升级自己申请。

另一种方法是重新部署应用程序,而不是让计时器不断轮询 blob 容器中的更改,您可以简单地使用一个下载最新版本库的启动任务。

关于c# - 在azure中托管共享dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12230275/

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