WCF Los enlaces basados en HTTP dependen de la clase HttpListener
que es un contenedor administrado alrededor de la API HTTP. HTTP API depende de la forma en que el sistema de operación procesa las solicitudes http. Por lo tanto, si usa el sistema operativo que usa el controlador http.sys (Windows 2003 y posterior), depende de él.
Editar:
Sobre la base de muy buena discusión sobre Cassini pasé dos horas en el reflector. La siguiente descripción es solo mi suposición. No he encontrado ninguna información al respecto así que tal vez estoy completamente equivocado.
WCF contiene internamente alguna clase abstracta llamada HttpTransportManager
esta clase se deriva por las clases internas HostedHttpTransportManager
y SharedHttpTransportManager
(esta también existe en la versión para HTTPS). El primero no depende de HttpListener
, pero el último sí lo es. El primero se utiliza cuando WCF está alojado en ASP.NET pipeline - clases internas HttpModule
y HttpHandler
del ensamblado System.ServiceModel.Activation use HostedHttpRequestAsyncResult
según HostedHttpTransportManager
. El último se usa cuando se crea HttpChannelListener
(autohospedaje).
Mi conclusión es que el servicio WCF alojado en la canalización ASP.NET no depende directamente de http.sys, pero IIS es el que aloja la canalización. Esto permite crear un servidor web personalizado que no dependerá de http.sys, pero podrá alojar ASP.NET y, por lo tanto, WCF. Creo que esto es lo que hace Cassini. El servicio WCF alojado automáticamente siempre depende de http.sys.
Como escribí anteriormente, esto es solo mi suposición basada en una ingeniería inversa rápida.
El servidor web visual (Cassini) en VS se ejecuta como un no administrador, puede escuchar las solicitudes HTTP e incluso puede servir servicios WCF de BasicHttpBinding. Otros servidores web tampoco necesitan depender de HTTP.SYS. Entonces debe haber una forma de eludirlo. –