将HttpListener用于生产型口径Web服务器?

时间:2009-08-13 09:51:41

标签: c# .net webserver httplistener

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

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

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

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

4 个答案:

答案 0 :(得分:6)

你有两个认真的选择。不,使用HttpListener编写自己的Web服务器不是生产级别的。

1)使用IIS。它具有很多安全性,性能,或者更重要的是可管理性的功能,您必须重塑自己。与远程管理,日志记录,集成Windows安全性等一样。

2)使用WCF并创建ServiceHost来托管您的文件。然后,您将不得不实施自己的服务,并找到管理其生命周期的方法。你可以这样做,但是,如果你正在谈论RESTFul网络电话,那么IIS真的是可行的方式。

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

答案 1 :(得分:6)

嗯,正如所说的那样 - 首先尝试使用IIS。

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

我不能说IIS是巨石 - 托管使用表明它在稳定性和管理方面在Win2008中变得更糟。但是你手工制作的解决方案会更糟糕。并且不要忘记 - http.sys比HttpListener更可定制。即你不能用HttpListener做流媒体,但你可以用http.sys做到 - Question about HttpListener streaming

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

答案 2 :(得分:4)

垃圾,滚动你自己。架构允许它。请注意,虽然班级中有一些奇怪的行为。在NT服务中关闭它几次使它成为一袋泡芙糕点。

如果你在Console上运行它,没有任何问题,运行它async,一切都应该很好,但是,启动和停止darn的事情。这是我目前正在努力解决的另一个问题,因为密封的Microsoft密封课程没有产生任何错误。

我觉得python正以一点点的CherryPy

开始

答案 3 :(得分:2)

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