Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which build of Cassini should I choose for production? There are 8 public builds from 5 different authors

I found several versions of an IIS-free Cassini webserver built by Microsoft. I'd use it but I'm unsure of which one is best, since there are many forks/builds:

  • the original
  • dmitryr's v3 (with corresponding bug), v3.5, and v3.5.1,
  • A VB-based fork by MPosseth
  • Cassini++ Based on one of dmitryr's builds
  • Cassini Dev by Sky
  • Another version by zippy1981
  • UtiDev Cassini (not a direct Cassini port/fork but close enough)

  • Hostable Web Core

What web server do you recommend of the forks above; is Hostable Web Core the new Cassini, or do I still have a dependency on IIS with HWC?

I'd appreciate it if you would elaborate:

  • The project's security
  • If the fork is suitable for serving a lightweight "Admin" interface
  • Website features
  • Any dependency on IIS (such as HWC).
like image 588
makerofthings7 Avatar asked Mar 21 '11 23:03

makerofthings7


2 Answers

a quick rundown of my view currently is that:

None of these, including my code, is suitable for production purposes. The limitations and restrictions of the simpleworker usage that all share does not lend itself to mission critical (what i perceive 'production' to mean) processes. Not the least of which is the complete inability to serve WCF (does not include WebHttp bindings, IIRC) on any IP other than LoopBack. Another limitation is that they all service requests as a queue, one at a time and as of today ALL requests are processed by the runtime including static text and image files. This may change in CassiniDev (sooner than later if funding is secured). Caching is also all but non-existent in all implementations IIRC.

  • HWC requires IIS7
  • Original is a museum piece
  • Dmitry retired from the Cassini business after a few of us forked so don't look for updates there. His code is a good place to start if you choose to start yet another cassini fork for some odd reason.
  • Cassini++ is Dmitry's code with a few enhancements, primarily the ability to use an external IP but has had no activity since before I started CassiniDev 2 years ago.
  • zippy1981 initially forked Dmitry to solve a content type issue after I was a bit lazy in implementing it. No activity since 04-2010
  • I have no experience with MPosseth's VB port, appears dormant.

  • UtiDev has some great features such as running as a service and is not strictly a Cassini fork. It is free and redistributable but has been dormant since 2008.

CassiniDev is a tool that I use a lot and the features reflect this. It supports 2.0, 3.5 and 4.0. It is built as an exe, a dll and as a 100% compatible (enhanced) drop in replacement for Visual Studio's dev server. It is suitable and easy to use by testing frameworks and continuous integration environments as well as stand alone exe and embedded in your own applications.

The latest versions of WebDev.WebServer for Visual Studio 2010 have been run through reflector to identify changes and very few were found and the intent has been implemented in CassiniDev.

Development is active and has enjoyed a bit of corporate funding to drive some of the new features such as; a virtual endpoint for sending html/javascript test results back to NUnit, MSTest etc; A browser driver that can open a browser, serve a page and close the browser; a rudimentary start of a configuration system that supports plugins, the current sole implementation is a CORS plugin that will send the headers needed to support cross-domain javascript via CORS, XDomainRequest and Flash.

The codeplex landing page is showing it's age and the documentation hasn't been updated in years but the source shows the activity and I generally have samples/tests that quick start features. I hope to get some time to write some proper docs.

Bugs get fixed and features get implemented as time allows.

From my perspective the only choice is between CassiniDev and UtiDev. Obviously I choose CassiniDev, depending on ones requirements UtiDev could be a better fit.

UtiDev is a very good product but is dormant. It has a few nice features that I will eventually steal such as running as a service and serving multiple sites on one IP.

My .02. Although it may appear that I am shamelessly plugging my own work the fact is that I use CassiniDev every day in development and testing as do 100(0?)s of others. I am glad that others find value in the work but while I do my best as time allows, I cannot guarantee response time to issues and features and don't want to create improper expectations.

like image 138
Sky Sanders Avatar answered Nov 06 '22 19:11

Sky Sanders


UltiDev Cassini is not actually dormant. Its successor, UltiDev Web Server Pro (UWS), has been under development for more than a year and has become closer to IIS (in functionality, not in size or complexity). UltiDev Web Server Pro test builds are being released once every few weeks and are fairly stable already.

To comment on some of Sky's points:

  • New UWS bypasses ASP.NET runtime when serving static content.
  • UltiDev Cassini is not limited to loopback IPs/host names. New UWS uses http.sys kernel driver as listener - same as IIS.
  • UltiDev Cassini and UWS do queue requests but handle in parallel by pooled threads.
  • Inability to serve WCF with WsHttpBinding is not a limitation of SimpleWorkerRequests, but rather of WCF's assumption that whenever it's hosted in an ASP.NET AppDomain, then it's hosted either IIS or original Cassini, and nothing else. Attempts to convince MS to change that spanned more than two years and failed. In the end, WCF hosted in ASP.NET appdomain concludes that it's only safe when it's under IIS, while not making such assumption when it's hosted by a random .net process/appdomain w/o ASP.NET. Still, WCF with BasicHttpBinding works alright.

Cheers, Vlad.

like image 41
VladH Avatar answered Nov 06 '22 17:11

VladH