嵌入式C# Web服务器?

33
在Java中,我已经能够将jetty服务器嵌入到我的应用程序中,但是是否有等效的嵌入式服务器技术适用于.Net?
如果可能的话,最好使用开源(FLOSS)。
*通过嵌入,我指的是一个轻量级的Web服务器应用程序,可以与我的应用程序打包,并在用户的本地桌面计算机上运行,以提供本地Web服务。

2
Cassini很小,对许多目的来说已经足够好了。此外,还有许多Cassini衍生版比原版更好:http://www.codeplex.com/site/search?query=cassini&ac=8 - MatthewMartin
你对CassiniDev、Cassini++或Cassini 3.5有任何偏好吗? - Iain Sproat
5个回答

25
到目前为止,我找到的最接近Jetty的替代品是Nancy,它被描述为:

一个轻量级、低仪式感的框架,用于在.Net和Mono上构建基于HTTP的服务。

Nancy旨在处理DELETE、GET、HEAD、OPTIONS、POST、PUT和PATCH请求。

Nancy的设计不依赖于现有框架。使用.NET框架客户端配置文件构建,Nancy可以在几乎任何地方使用,因为它完全自包含,具有自己的请求和响应对象。

Nancy中的核心概念之一是主机。主机充当托管环境和Nancy的适配器,从而使Nancy能够在现有技术(如ASP.NET、WCF和OWIN)上运行,或集成到任何给定应用程序中。

另一个更轻量级的选择是Kayak(更新:截至2014-01-18,该项目已死亡),它的文档描述为:

一个简单的Web服务器。它监听连接,创建请求的内存表示,并允许您轻松生成响应。它可以在任何C#程序中使用。你的代码将Kayak加载到其进程空间中——而不是反过来!

Nancy和Kayak都是MIT许可证。

Kayak只提供静态HTML,还是可以使用它来托管ASP.Net应用程序? - Jeff LaFay
6
Nancy不是一个Web服务器,而是中间件。你需要在Web服务器上运行Nancy(实际上,当Kayak配置为OWin时,Nancy可以在Kayak上运行)。事实上,我建议你使用Nancy/Kayak堆栈。 - Aron
2
True,Nancy的核心部分本身并不是一个Web服务器。然而,我相信Nancy.SelfHosting库就是一个Web服务器。 - Iain Sproat
1
@sprocketonline Nancy.SelfHosting 使用 HttpListener,通过 WAS 钩入 IIS。 - Aron

15

这是我去年写的另一种备选方案,并且一直以来都很好用。

EmbedIO:https://github.com/unosquare/embedio

我主要使用它在树莓派(软浮点)上创建RESTful服务。

编辑:已更新代码以支持Mono 3.10、WebSockets和请求的异步处理。


不支持 .NET 4,:( - Benny
不到10行代码,我就有了一个提供静态文件服务的Web服务器。 我希望它能在完全提供服务后提供打印URL的方式。否则,它非常小巧可靠。 - videoguy
@videoguy 这是一件非常简单的事情。您可以创建一个扩展WwebModuleBase的模块,并在打印Url后使处理程序返回false。在此处查看示例:https://github.com/unosquare/embedio/blob/master/Unosquare.Labs.EmbedIO/Modules/StaticFilesModule.cs#L147 - Mario
我按照您的建议操作,现在我可以将每个Web请求记录到UI日志面板中了。@Mario 这个库支持监听https端口吗? - videoguy

8

2016年更新:

新宠儿是Kestrel

Kestrel是微软ASP NET Core计划的一部分,是一个开源的Web服务器。它是基于libuv构建的事件驱动型Web服务器(基本上是node.js - js + .net)。这意味着它应该很容易地在不同的操作系统之间移植。不幸的是,这也意味着它需要一个外部的本机依赖项。*

https://github.com/aspnet/KestrelHttpServer

另一个旧项目是Nowin

https://github.com/Bobris/Nowin/tree/master/Nowin

这是一个完全基于.net内部构建的Owin实现。不幸的是,它已被弃用,转而使用Kestrel。

编辑:* Kestrel的最新版本已经放弃了libuv,采用了托管的dotnet socket方法。这当然意味着Kestrel不再有本地依赖项。


3

Visual Studio所使用的服务器叫做cassini。有一个很好的派生版本叫做UltiCassini


1

Katana是微软用于将OWIN与IIS集成的项目。 - Aron
1
@Aron,它可以安全地自主托管,无需IIS。 - Lex Li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接