publicar - ¿La mejor práctica para el servicio WCF grande?
publish wcf service to iis 7 (5)
¿Cuál es la mejor práctica para escribir un servicio wcf bastante grande, que contiene una gran cantidad de OperationContracts y DataContracts?
¿Cómo separaría las áreas funcionales en varios contratos? ¿Sería mejor crear un punto final para cada área funcional?
¿Hay alguna forma de separar la fuente de las diferentes partes, pero aún así usar solo un servicio para todas?
¿Dónde obtengo buena información sobre cómo planificar los contratos, qué incluir, cómo dividir ...?
Esa ha sido una gran pregunta sobre los servicios desde su inicio. SOA hecho con éxito es SOA planificado en la medida en que usted está hablando. Habiendo dicho eso, siempre me he inclinado más hacia dividir los servicios, pero usarlos de manera compuesta. Es decir, varios puntos finales cuando tiene varios contratos, pero la mayoría de ellos solo son consumidos por unos pocos puntos finales que son consumidos por personas que no pertenecen al servicio. (wow, eso fue un bocado, ¿tenía sentido?)
Además, aconsejaría tener el menor número de contratos posible. Demasiados contratos pueden conducir a una mala administración. Un buen diseño de contrato ayudará a limitar el número de puntos finales y llamadas de servicio. La eliminación de los conceptos de OO del diseño del contrato es una forma de hacerlo. El diseño del contrato es un tema masivo en sí mismo, pero basta decir que a través de una buena planificación del contrato (por adelantado), viene un buen diseño del servicio.
Maarten Mullender escribe un gran blog sobre el diseño WCF, y es una lectura obligada. También están surgiendo algunos grandes libros SOA / WCF.
Algunos buenos libros:
Esto ha sido útil para mí, proviene del sitio web idesign.net y fue escrito por Juval Lowy:
Sé que esta es una publicación anterior, pero estoy pensando en los servicios del mismo modo que pienso en los objetos de la programación.
Manténgalos a su mínima expresión para lo que deben hacer. Por supuesto, no ir al extremo, pero estoy tomando decisiones basadas en entidades de datos.
Un servicio para Cuenta, uno para Producto, etc.
Sin embargo, no estoy seguro de lo que alguien pensaría de eso ...
Saldré de la pista y diré que utilicé contratos WCF monolíticos, contratos separados funcionalmente (con un máximo de diez métodos según las pautas de Juval en su libro) y también probé una arquitectura de manejo de mensajes donde un servicio tiene un único método que toma un mensaje base y manejadores que ''saben'' cómo desenvolver y procesar el mensaje después de cruzar el cable.
Soy un gran admirador de este último si tienes .NET en ambos lados de la valla. Oren tiene un screencast sobre la idea con código. No sé cuáles son tus necesidades pero esto está funcionando para mí.
Dicho eso, si ya vienes de "Necesito un gran servicio de WCF", entonces ir a un método probablemente no te lo corte. Si eso es cierto, los servicios WCF de programación de Juval Lowy son el estándar que debe mantener en su diseño.
Tengo una publicación aquí sobre cómo las operaciones individuales deberían diferir de las operaciones de código tradicionales:
http://www.iserviceoriented.com/blog/post/Introduction+to+Service+Oriented+Architecture.aspx
Debería terminar solo con operaciones para eventos comerciales reales. Si alguna vez se detiene y piensa "Necesito habilitar el soporte de transacciones en mi servicio web", eso significa que no ha diseñado la operación con un alcance lo suficientemente amplio. Nunca debe tener que habilitar el soporte de transacciones del servicio web.
Recomiendo encarecidamente el blog de Bill Poole para conceptos SOA de nivel superior. Aquí hay una publicación para comenzar: