2009-08-13 16 views
7

¿Es realista utilizar la clase HttpListener de C# .Net como base para un servidor web de calibre de producción?¿Utiliza HttpListener para un servidor web de calibre de producción?

El servicio web http que necesito alojar no contiene archivos .aspx ni estáticos. Todas las respuestas http son dinámicas y se generan en código C# que se invoca a través de unas pocas instrucciones switch que inspeccionan un formato de url relajante.

Mi idea es que IIS es realmente un contenedor de modo de usuario alrededor del módulo del kernel HTTP-SYS de Windows o/s que hace todo el manejo de redes de servicio pesado y también lo es HttpListener.

Ya tengo un servidor web multiproceso básico en ejecución, que es excelente para el desarrollo porque se inicia en modo de depuración en una instancia, ahora estoy pensando que necesito la sobrecarga de IIS para la producción. Una huella de memoria baja es otra atracción.

+2

Por cierto, es la clase de .NET 'HttpListener', no la "clase C# .NET 'HttpListener'". Todo en .NET puede ser utilizado por todos los lenguajes, no solo C#. –

+1

@ John Saunders - Estaba tratando de aclarar que mi pregunta no era acerca de una clase Java del mismo nombre, obviamente intenté demasiado. –

+1

No utilizaría HttpListener, no es el mejor contenedor para httpapi.dll, podría escribir su propio contenedor o, si está realmente loco, podría compilar uno desde TcpListener ... alguien ya está trabajando en eso: http: // webserver.codeplex.com – meandmycode

Respuesta

6

Tiene dos opciones serias aquí. Y no, la codificación de su propio servidor web con HttpListener no es de grado de producción.

1) Use IIS. Tiene un montón de características para la seguridad, el rendimiento y, quizás más importante, la capacidad de administración , que tendría que reinventarse a sí mismo. Al igual que la administración remota, el registro, la seguridad integrada de Windows, etc.

2) Use WCF y cree un ServiceHost para alojar sus archivos. Luego tendrá que implementar sus propios servicios y encontrar la manera de administrar sus vidas. Puede hacerlo, pero nuevamente, si está hablando de llamadas web RESTFul, IIS realmente es el camino a seguir.

Se debe evitar hacer rodar manualmente. IIS ha cambiado mucho en los últimos 10 años. De ninguna manera es un gran servidor monolítico. Han modularizado casi todo, especialmente en Windows 2008, por lo que obtienes un sistema ágil y rápido.

+0

@Dave Markle - Gracias Necesito leer sobre las mejoras de IIS, mi conocimiento se estancó en Windows 2003. Lean y rápido es lo que necesito. –

+6

@Dave Markle - No administrador remoto = un agujero de seguridad de configuración menos bueno. Sin registro = no hay problema, con servicios web dinámicos, gran parte de la naturaleza de la solicitud está oculta en los datos de la publicación, por lo que los registros no exponen demasiado a los diagnósticos. Sin seguridad integrada = bueno, no lo necesito así que una cosa menos para configurar mal. –

+1

Estás a juzgar por los estándares de Windows Server 2003. 2008-2003 = 5 años de diferencia. El registro es mucho mejor, no está limitado a los line-ins en el registro de IIS, e incluye el registro detallado de solicitudes fallidas. –

2

Si lo escribe, tendrá que mantenerlo. Microsoft ya ha escrito un servidor web; debe usarlo.

+1

El consumo de memoria es una buena razón para no usar IIS. La última vez que lo usé con enojo tuvimos que habilitar el conmutador de 3GB para darle a IIS más memoria libre que 1.7Gb. Haz los cálculos para alojar en una plataforma en la nube y verás el problema de $$$. –

+0

Sugiero que intente con IIS 7 y vea si esto sigue siendo un problema. También puede haber sido debido a la aplicación específica, y no a IIS. –

+1

@JS "Le sugiero que pruebe con IIS 7 y vea si esto sigue siendo un problema". Ok, sí, estoy en BizSpark ahora, así que puedo iniciar algunas herramientas de prueba de MS para una prueba de memoria. Uno gotcha, la plataforma de la nube de Amazon está atrapada en Windows 2003 por el momento ... ho hmm. –

6

Bueno, como se dijo, trate de usar IIS al principio.

HttpListener no está nada mal, es el servidor de escucha administrado más rápido que puedes tener ahora (más rápido que TcpListener y más rápido que la clase Socket). Y en realidad es el mismo núcleo que con IIS. Pero IIS tiene muchas más cosas.

No puedo decir que IIS sea un monolito: el uso del alojamiento demostró que empeoró en Win2008 en términos de estabilidad y administración. Pero su solución hecha a mano puede ser mucho peor. Y tampoco lo olvides: http.sys es mucho más personalizable que HttpListener. Es decir. no puede hacer streaming con HttpListener, pero puede hacerlo con http.sys - Question about HttpListener streaming

Pero si tiene suficiente poder como desarrollador, puede intentar escribir su propio contenedor http.sys y eso es lo mejor enfoque de escribir propio servidor web en Windows.

+0

¿Tiene una URL que detalla cómo Win2008 disminuyó en estabilidad y administración? –

3

Basura, rueda el tuyo. La arquitectura lo permite. Tenga en cuenta que hay algunos comportamientos extraños en la clase. Cerrarlo un par de veces en un servicio NT lo hace flakey como una bolsa de hojaldres.

Si lo ejecuta en la consola, no hay problema alguno, ejecútelo de forma asíncrona y todo debería estar bien, sin embargo, iniciar y detener lo maldito. ese es un problema diferente con el que actualmente estoy luchando, ya que no se producen errores de las clases selladas herméticamente de Microsoft.

me siento pitón viene con un pequeño toque de cherrypy

+5

-1: no es tanto una respuesta como una diatriba. –

Cuestiones relacionadas