2012-04-18 10 views
5

Actualmente tenemos una aplicación .NET 4 que consiste en Windows Service ejecutándose en segundo plano y clientes locales o remotos (solo 1-3 normalmente).La mejor opción para un servidor robusto de alojamiento propio: WCF frente a ASP.NET Web Api

Los clientes tienen una GUI de WPF y necesitan algunos datos del servicio de Windows. Por lo tanto, usamos WCF con el enlace NamedPipe para un cliente local y el enlace NetTcp para clientes remotos. Esto funciona, pero a menudo tenemos problemas con puntos finales que no son alcanzables (canal con fallas o no encontrado, etc.). Ya intentamos reconstruir las conexiones con errores, pero parece ser bastante frágil ...

Ahora ingrese la API web: parece que una pila basada en HTTP podría ser más robusta (sin canales, sin puntos finales, puede ser alojada automáticamente en servicio de ventanas también). Parece que no hay problemas con los canales rotos porque cada solicitud se maneja individualmente. Entonces, si algo falla, simplemente repite la solicitud. (Y tenemos experiencia con ASP.NET MVC de otras aplicaciones, por lo que no es nuevo para nosotros).

Ahora estamos pensando cuál podría ser nuestra mejor opción. ¿Es mejor "endurecer" nuestro servicio WCF existente (una interfaz de servicio con aproximadamente 15 operaciones) o mover la interfaz a la API web y ejecutarla como solicitudes HTTP (con datos JSON)? El rendimiento no es nuestro principal problema aquí ...

¿Alguna idea? Hartmut

Respuesta

4

Le recomiendo que se quede con los servicios de WCF (SOAP) para su aplicación WPF en lugar de pasar a la API web. Hay un número de razones para esto. Primero, creo que debemos considerar lo que la nueva API web intenta abordar, es decir, proporcionar un marco para soportar servicios RESTful/HTTP/hypermedia. Es probable que sea una buena opción para crear aplicaciones que hagan un uso intensivo de HTTP, como aplicaciones web, móviles y JavaScript, en las que desee maximizar el "alcance" o la interoperabilidad de sus servicios (independientemente de la plataforma). Esto no quiere decir que no pueda usarlo para clientes de WPF, pero en su caso, donde todo el tráfico es local para su dominio, tiene más sentido seguir con su implementación actual.

Las opciones de encuadernación que ha realizado para sus servicios/clientes suenan bien para mí. Me centraría en por qué sus canales están fallando y abordar estos problemas. También puede considerar alojar sus servicios a través de IIS y usar WAS para exponer sus puntos finales que no sean HTTP. He tenido mucho éxito con esto en el pasado y la mayor parte ha sido bastante estable. También le quita algunos de los dolores de cabeza con la administración de su propio host. Si le preocupan las fallas de enlace TCP, simplemente cree un nuevo punto final HTTP o wsHTTP y utilícelo en su lugar. Esto le proporcionará exactamente el mismo transporte que utiliza la API web sin tener que cambiar su modelo de programación.

+0

¿Te importaría actualizarnos si todavía la WebAPI autohospedada es una mejor opción que la WCF autohospedada? –

Cuestiones relacionadas