哪些.NET功能允许我加载“重新加载”和“重启”嵌入式服务器?我不知道如何好好问这个问题。我正在编写一个需要定期更新其他功能的服务器。我希望它在不同的端口上运行2个相同的服务器(用于冗余)然后当我推出新的更改时,请关闭其中一个服务器,加载新代码,运行测试,开始将流量移动到新版本然后开始第二台服务器上的进程相同。
我想也许AppDomains或MEF可能正是我正在寻找的,但对这些技术知之甚少。我想知道.NET框架中是否还有其他一些我不知道会有帮助的东西。
有什么建议吗?如果我关闭AppDomains或MEF,请随时告诉我。
答案 0 :(得分:5)
我在使用AppDomains的Windows服务中执行此操作。该服务只具有network-IO代码,以及下载新版本和实例化app-domains的代码。所有真正的代码都在一个众所周知且不变的接口背后,它具有“处理请求”代码,以及用于长期本地状态的序列化/反序列化机制。
结果是单一服务可以永久运行。当新版本可用并且已通过冒烟测试时,它可以简单地更改单个引用(编组/解包的实例),并且嘿presto:已升级。然后它可以卸载旧的app-domain。
对于冗余(硬件等),我们仍然使用多个节点,在客户端应用负载平衡(尽管你也可以在NLB上使用它;我们有理由不这么做)。
答案 1 :(得分:1)
如何将每个服务器作为单独的进程运行?您可以在命令行上传入端口号,以便它可以从磁盘上的一个exe运行(在生产中)。