【问题标题】:Use HttpListener for a production caliber web server?将 HttpListener 用于生产口径的 Web 服务器?
【发布时间】:2010-11-19 06:07:45
【问题描述】:

使用 C# .Net 类 HttpListener 作为生产级 Web 服务器的基础是否现实?

我需要托管的 http Web 服务不包含 .aspx 或静态文件。所有 http 响应都是动态的,并在 c# 代码中生成,这些代码通过一些检查 restful url 格式的 switch 语句调用。

我的想法是 IIS 确实是一个围绕 Windows o/s HTTP-SYS 内核模块的用户模式包装器,它执行所有繁重的网络处理,HttpListener 也是如此。

我已经运行了一个基本的多线程 Web 服务器,它非常适合开发,因为它在一个实例中以调试模式启动,现在我在想我是否需要 IIS 的过度杀伤来进行生产。低内存占用是另一个吸引力。

【问题讨论】:

  • 顺便说一句,它是 .NET 类 HttpListener,而不是“C# .NET 类 HttpListener”。 .NET 中的所有内容都可以被每种语言使用,而不仅仅是 C#。
  • @John Saunders - 我试图澄清我的问题不是关于同名的 Java 类,显然我太努力了。
  • 我不会使用 HttpListener,它不是 httpapi.dll 最好的包装器,你可以编写自己的包装器,或者如果你真的很疯狂,你可以从 TcpListener 构建一个......有人已经在工作了对此:webserver.codeplex.com

标签: c# .net webserver httplistener


【解决方案1】:

你在这里有两个严肃的选择。不,使用 HttpListener 编写自己的 Web 服务器不是生产级的。

1) 使用 IIS。它具有大量的安全性、性能以及可能更重要的可管理性功能,您必须重新改造自己。像远程管理、日志记录、集成 Windows 安全等。

2) 使用 WCF 并创建一个 ServiceHost 来托管您的文件。然后,您将不得不实现自己的服务并找到一种方法来管理它们的生命周期。你可以这样做,但同样,如果你在谈论 RESTFul 网络调用,那么 IIS 确实是要走的路。

应避免手动滚动。 IIS 在过去 10 年中发生了很大变化。它不再是一个大型的单片服务器。他们几乎将所有东西都模块化了,尤其是在 Windows 2008 中,因此您获得了一个精简而快速的系统。

【讨论】:

  • @Dave Markle - 谢谢我需要阅读有关 IIS 改进的信息,我的知识在 Windows 2003 上停滞不前。我需要精益和快速。
  • @Dave Markle - 没有远程管理员 = 少了一个配置安全漏洞。没有日志记录 = 没问题,对于动态 Web 服务,请求的大部分性质都隐藏在发布数据中,因此日志不会暴露太多用于诊断。没有集成的安全性 = 好,不需要它,所以少了一件错误配置的事情。
  • 您以 Windows Server 2003 的标准来判断。2008-2003 = 5 年的差异。日志记录要好得多,不仅限于 IIS 日志中的一行,还包括详细的失败请求日志记录。
【解决方案2】:

好吧,正如人们所说 - 首先尝试使用 IIS。

HttpListener 一点也不差 - 这是您现在可以拥有的最快的托管侦听器服务器(比 TcpListener 快,比 Socket 类快)。它实际上与 IIS 的核心相同。但是IIS还有很多东西。

我不能说 IIS 是整体式的 - 托管使用表明它在 Win2008 中在稳定性和管理方面变得更糟。但是您的手工解决方案可能会更糟。并且不要忘记 - http.sys 比 HttpListener 更可定制。 IE。你不能使用 HttpListener 进行流式传输,但你可以使用 http.sys - Question about HttpListener streaming

但是,如果您作为开发人员有足够的能力 - 您可以尝试编写自己的 http.sys 包装器,这是在 Windows 中编写自己的 Web 服务器的最佳方法。

【讨论】:

  • 你有详细说明Win2008稳定性和管理下降的网址吗?
【解决方案3】:

垃圾,自己动手。架构允许它。请注意,尽管班级中有一些奇怪的行为。在 NT 服务中将其关闭几次会使它像一袋酥皮一样松软。

如果你在控制台上运行它,没有任何问题,异步运行它,一切都应该很好,但是,启动和停止该死的东西。这是一个不同的问题,我目前正在努力解决,因为密封的 Microsoft 密封类没有产生任何错误。

我觉得 python 带有一点cherryPy

【讨论】:

    【解决方案4】:

    如果您编写它,那么您将不得不维护它。 Microsoft 已经编写了一个 Web 服务器 - 你应该使用它。

    【讨论】:

    • 内存消耗是不使用 IIS 的一个很好的理由。上次我愤怒地使用它时,我们不得不启用 3GB 开关,以便为 IIS 提供超过 1.7Gb 的更多内存空间。计算一下在云平台上托管的情况,您会发现 $$$ 问题。
    • 我强烈建议您尝试 IIS 7,看看这是否仍然是一个问题。这也可能是由于特定的应用程序,而不是 IIS。
    • @JS “我强烈建议你试试 IIS 7,看看这是否仍然是个问题。”好吧,我现在在 BizSpark 上,所以我可以启动一些 MS 测试工具来进行内存浸泡测试。有个问题,亚马逊云平台目前卡在 Windows 2003 上……嗯嗯。
    猜你喜欢
    • 1970-01-01
    • 2015-07-19
    • 2013-05-01
    • 2021-03-12
    • 2012-08-03
    • 2011-10-13
    • 2012-08-17
    • 2013-12-05
    • 1970-01-01
    相关资源
    最近更新 更多