c# - HttpListener - 在没有停机的情况下在同一地址上无缝启动/停止?

标签 c# httplistener

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

关于如何在同一地址上无缝切换(无需停机)有什么想法吗?

最佳答案

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

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

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

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

关于c# - HttpListener - 在没有停机的情况下在同一地址上无缝启动/停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10690751/

相关文章:

c# - 如何将原始 HTTP 响应解析为 HttpListenerResponse?

c# - 在 Ubuntu VPS (14.04.1 LTS) 上使用单声道,为什么我的 HTTPS HttpListener 从未收到上下文?

c# - System.Net.HttpListener (C#) 的最大 URL 长度

c# - .NET HttpListener 前缀问题与本地主机以外的任何东西

c# - Skip 的性能(以及类似的功能,如 Take)

c# - System.IO.Path.GetFileNameWithoutExtension 不修剪文件路径

c# - SQL Server 2005 UniqueIdentifier 和 C# 数据类型

javascript - 我可以以编程方式从 Power BI Embedded 报表导出筛选的数据吗?

c# - 为什么在 asp.net MVC Controller 中需要显式 Dispose() 方法?谁能解释它的复杂性? (特定于 asp.net)

C# HttpListener 部分内容