【问题标题】:Hosting a shared dll in azure在 azure 中托管共享 dll
【发布时间】:2012-09-01 18:26:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# asp.net winforms dll azure


    【解决方案1】:

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

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

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

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

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

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

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

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

    【讨论】:

    • 感谢您添加到 David 的解决方案中。好东西,非常适合我的架构!
    【解决方案2】:

    如何将共享 DLL 存储在 blob 存储中,在同一个数据中心?在角色启动时,每个实例都会将最新的 DLL 下载到其本地存储(在应用的根目录或其他需要的文件夹中)。

    在同一个数据中心内,blob 存储和您的角色实例之间的带宽是免费的,并且 100Mbps x # 的内核,所以速度非常快。而且,要更新 DLL,您只需要将其上传到一个地方(blob 容器)。

    在更新其中一个 DLL 时,您需要向您的角色实例发出信号以进行回收(最安全的方法),或者使用最新的 DLL 更新自己。您不能像拥有文件监视程序那样拥有“blob 监视程序”(因此建议发送信号)。或者,您可以让某种类型的后台线程每隔几分钟检查一次“dll”容器,并在发现一个已更改的容器时,在本地触发更新。

    请注意:如果您更新了 DLL,并且每个角色实例都在轮询更改(或收到回收信号),请注意不要同时回收所有实例。否则,您将获得暂时不可用的服务。

    【讨论】:

    • 谢谢大卫,这是有道理的,我希望有一个像这样的解决方案!
    【解决方案3】:

    我也有同样的问题。我的方案是根据某些条件保留几个在运行时加载的插件,这些插件应该能够在不干扰主应用程序的情况下进行更新。

    我所做的是将 dll 存储在 SQL 表中并在需要时检索它们,并在运行时使用反射加载它们。这是在内存中完成的,我不必将 dll 存储在应用程序根目录或其他地方。我认为在 Azure 中引用本地路径不是一个好习惯。

    【讨论】:

      猜你喜欢
      • 2014-12-06
      • 2021-07-02
      • 2013-07-14
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 2010-11-15
      相关资源
      最近更新 更多