Embedded C# web server? [closed]
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 4开发者_如何学编程 years ago.
Improve this questionIn Java I've been able to embed* the jetty server in my apps, but is there an equivalent embedded* server technology for .Net?
Open source (FLOSS) would be preferred if possible.
*by embedded I mean a lightweight web server app that could be packaged with my application and run on a user's local desktop machine to provide a web service locally.
The closest equivalent to Jetty I've found so far is Nancy, described as:
a lightweight, low-ceremony, framework for building HTTP based services on .Net and Mono.
Nancy is designed to handle DELETE, GET, HEAD, OPTIONS, POST, PUT and PATCH requests
Nancy was designed to not have any dependencies on existing frameworks. Built with the .NET framework client profile, Nancy can be used pretty much wherever you want to, since it’s completely self contained with it’s own request and response objects.
One of the core concepts in Nancy is hosts. A host acts as an adaptor for a hosting environment and Nancy, thus enabling Nancy to run on existing technologies such as ASP.NET, WCF and OWIN, or integrated in any given application.
An even more lightweight option is Kayak (Update: project looks dead as of 2014-01-18), which its documentation describes as:
a simple web server. It listens for connections, creates an in-memory representation of requests, and allows you to easily generate responses. It can be used in any C# program. Your code loads Kayak into its process space—not the other way around!
and both Nancy and Kayak are MIT licensed.
Here's another alternative I wrote last year and and has served me well.
EmbedIO: https://github.com/unosquare/embedio
I use it mostly to create RESTful services on the Raspberry Pi (soft-float).
Edit: Updated code for Mono 3.10, support for WebSockets, and Asynchronous handling of requests.
Update for 2016:
The new kid on the block is Kestrel.
Kestrel is an open source web server that is a part of the ASP NET Core initiative by Microsoft. It is an event based webserver built upon libuv (it basically *node.js
- js
+ .net
). This means that it should be easily portable between different operating system. Unfortunately, it does mean it requires an external native dependency.
https://github.com/aspnet/KestrelHttpServer
An older project that does this is Nowin
https://github.com/Bobris/Nowin/tree/master/Nowin
This is an implementation of Owin built entirely within .net. Unfortunately, it has been deprecated in favor for Kestrel.
Edit: * The newest version of Kestrel has dropped libuv for a managed dotnet socket approach. This of course means Kestrel no longer has a native dependency.
The one that is used with Visual Studio is called cassini. There is a good derivative called UltiCassini.
The solution from Microsoft itself is called Katana,
https://katanaproject.codeplex.com/
Note that it is fully open sourced, under Apache license.
精彩评论