HttpListener在Mono上工作得很好吗?

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

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

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

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

非常感谢Bill,billpg.com

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

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

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

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

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

chickenSandwich

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

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

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

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

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