HttpListener在Mono上运行良好吗?

时间:2010-05-27 18:50:36

标签: c# mono httplistener

我正在寻找一个小型的Web服务来在一个小型的Linux机器上运行。我更喜欢用C#编写代码,所以我希望使用Mono。

我不希望运行完整的Web服务器或Mono的ASP.NET版本。我正在考虑使用一个处理每个客户端连接的线程的单个进程。线程之间共享内存而不是数据库。

我已经阅读了微软的HttpListener版本以及它如何与Http.sys驱动程序一起使用。唉,Mono关于这个类的文档只是自动化的类接口,没有讨论它是如何工作的。 (Linux没有Http.sys,所以我认为它的实现方式大不相同。)

有人能指点我讨论讨论这个模块的资源吗?

非常感谢Bill,billpg.com

(对我感兴趣的问题有一点背景。)

前段时间,我问this question,有兴趣长时间保持对话,并且有很多来回。我已经决定设计我自己的ad-hoc协议,但我采访过的人真的想要一个REST接口,即使代价是“好的,现在发送你的命令”信号。

所以,我想知道在Linux / Mono服务器上运行ASP.NET,但偶然发现了HttpListener。这似乎是理想的,因为每个“对话”可以在一个单独的线程中运行。在循环中调用HttpListener的线程可以查找每个进程连接的线程,并将引用传递给该线程。

ASP.NET驱动服务的替代方案是让ASPX代码从数据库中获取状态,并在完成时写回新状态。是的,它会起作用,但这是一个很大的开销。

2 个答案:

答案 0 :(得分:26)

问候,    Mono中的HttpListener类没有太大问题。我认为在MS环境和Linux环境中使用它之间最显着的区别是,如果没有root / su / sudo安全性,端口80就无法绑定。其他端口没有此限制。例如,如果指定前缀:http://localhost:1234/,则HttpListener将按预期工作。但是,如果添加前缀http://localhost/(您希望在端口80上侦听),则会无声地失败。如果您显式尝试绑定到端口80(http://localhost:80/),则会抛出异常。如果以超级用户或root用户身份调用应用程序,则可以显式绑定到端口80(http://localhost:80/)    我还没有详细探讨其余的HttpListener成员,以便对它在linux环境中的运行情况做出任何有用的评论。但是,如果有兴趣,我会继续发表我的意见。

chickenSandwich

答案 1 :(得分:2)

我不确定你为什么要深入了解引擎盖。即使在Microsoft方面,如果您使用.NET Framework,有关http.sys的文档可能无法提供真正有价值的信息。

要知道Mono上的某些东西是否足够好,您总是应该下载其VMware或VPC映像,并在其上测试您的应用程序。

http://www.go-mono.com/mono-downloads/download.html

虽然Mono比几年前更加成熟,但我们不能说它已被足够的真实应用程序(如Microsoft.NET)测试过。因此,请测试您的应用程序并将您发现的问题提交给Mono团队。

根据我的经验,小问题仅在几天内得到修复,而对于重大问题则需要较长时间。但是使用Mono源代码,你可以自己修复或者在大多数时候找到好的解决方法。

相关问题