HttpListener - 无需停机即可在同一地址无缝启动/停止?

时间:2012-05-21 18:40:59

标签: c# httplistener

我正在尝试在同一地址上的两个独立的HttpListener实例之间无缝切换。目前,在停止实例1并启动实例2之后,有几秒钟的停机时间(用户将得到404)(显然,如果实例2在实例1关闭之前启动,我得到经典的“已经注册了http” .sys“错误)。

有关如何在同一地址无缝切换(无停机)的任何想法?

1 个答案:

答案 0 :(得分:1)

这里的经典答案是外部负载均衡器,例如HAProxy,它可以在多台机器,进程,端口,主机等之间分配负载。例如,即使在一台机器上,您可以在不同的端口上有两个实例(与客户端认为它们正在联系的内容无关),并通过HAProxy切换到它们的负载。这会自动处理所有端口/主机重映射。

如果你想要一个进程(例如服务),那么这里的一个技巧就是使用AppDomain:

  • 服务我们是一个只处理http的shell,但通过...处理请求
  • ... MarshalByRefObject,它是子AppDomain中真实对象的代理......
  • ...您可以在需要升级时动态创建,只需在新域准备就绪时交换代理实例...
  • ...然后卸载过时的AppDomain

有点乱(你需要担心为每个版本的应用程序创建临时位置等),但可能非常有效。