2

哪些 .NET 功能允许我加载“重新加载”和“重新启动”嵌入式服务器?我不知道如何很好地问这个问题。我正在编写一个需要定期更新附加功能的服务器。我希望它在不同的端口上运行 2 台相同的服务器(为了冗余),然后当我推出新的更改时,关闭其中一台服务器,加载新代码,运行测试,开始将流量转移到新版本,然后开始第二台服务器上的相同过程。

我在想也许 AppDomains 或 MEF 可能是我正在寻找的东西,但对这些技术知之甚少。我想知道 .NET 框架中是否可能还有其他一些我缺少的东西会有所帮助。

有什么建议么?如果我对 AppDomains 或 MEF 不感兴趣,请随时告诉我。

4

2 回答 2

5

我在带有 AppDomains 的 Windows 服务中执行此操作。该服务只有网络 IO 代码,以及下载新版本和实例化应用程序域的代码。所有真正的代码都在一个众所周知且不变的接口后面,该接口具有“处理请求”代码,以及用于长期本地状态的序列化/反序列化机制。

结果是单一服务可以永久运行。当新版本可用并通过了冒烟测试时,它可以简单地更改单个引用(编组/解包的实例),然后嘿:升级。然后它可以卸载旧的应用程序域。

对于冗余(硬件等),我们仍然为此使用多个节点,并在客户端应用负载平衡(尽管您也可以在 NLB 上这样做;我们这次有理由不这样做)。

于 2012-08-17T22:26:36.323 回答
1

将每个服务器作为单独的进程运行怎么样?您可以在命令行中传入端口号,这样它就可以从磁盘上的一个 exe 运行(在生产中)。

于 2012-08-17T22:07:24.357 回答