Leete esto
Distributed Systems Patterns http://msdn.microsoft.com/en-us/library/ms998483.aspx Broker http://msdn.microsoft.com/en-us/library/ms978706.aspx Context Many complex software systems run on multiple processors or distributed computers. There are a number of reasons to distribute software across computers, for example: · A distributed system can take advantage of the computing power of multiple CPUs or a cluster of low-cost computers. · Certain software may only be available on specific computers. · Parts of the software may have to run on different network segments due to security considerations. · Some services may be provided by business partners and may only be accessed over the Internet. However, implementing a distributed system is not easy because you have to deal with issues such as concurrency, cross-platform connectivity, and unreliable network connections. Problem How can you structure a distributed system so that application developers don't have to concern themselves with the details of remote communication? Forces The following forces must be reconciled as you build a distributed system: · Although distributed systems provide a lot of advantages, they also tend to introduce significant complexity into the software system. Physical and logic boundaries exist between processes or computers running on the same network. To have objects running on different processes or computers communicating with each other across these boundaries, you have to deal with issues such as communications, encoding, and security. If you mix these implementation details with the application code, a simple change in the communications infrastructure could lead to significant code changes. · The distribution of the system often occurs after development is complete. For example, software may be distributed across multiple servers to increase processing power. You would not want to change the application code at this late a stage in the life cycle. · The details of cross-process communication can be quite tedious. You have to deal with TCP/IP sockets, marshaling and unmarshaling, serialization, timeouts, and many other challenges. Therefore, it makes sense to have a special team focus on the infrastructure so that the application developers do not have to learn about remote communications. · To maintain the flexibility of being able to move components to different locations at deployment time, you must avoid hard-coding the location of specific components. Esto viene de aca y ted a un marco teorico base Enterprise Solution Patterns Using Microsoft .NET http://msdn.microsoft.com/en-us/library/ms998469.aspx despues pasa a CAB -Event Broker: Pub-Sub for your components http://blogs.msdn.com/edjez/archive/2005/04/20/CABEventBroker101.aspx aunque sea smart client te sirven los conceptos Smart Client - Composite UI Application Block http://msdn.microsoft.com/en-us/library/aa480450.aspx From: patrones@mug.org.ar [mailto:[EMAIL PROTECTED] On Behalf Of Leandro Tuttini Sent: Thursday, September 04, 2008 10:36 AM To: patrones List Member Subject: [patrones] Observer Pattern Remoto Hola que tal. Queria plantear una situacion a ver que cosnejos me dan, y si es posible implementarla. La idea es aplicar el patron observer pero de forma remota. Planteo el escenario: Tengo una aplicacion expuesta en la web, que expone una aplicacion web y varios servicios, usando wcf y asmx, es indistinto. Por otro lado tengo aplicaciones de escritorio que estan dentro de un red local, y tienen salida a internet para utilizar la aplicacion. Resulta que ante cierta operacion con la aplicacion se deberia procesar la logica de negocio (en el servidor remoto) y lanzar una impresion en ciertos print server (que se encuentran locales en el red), esto ultimo de imprimir es solo una idea, puede se que mas adelante se necesite para enviar otras cosas comos e un cash dispenser, o alertas, etc. La cuestion es que los clientes tienen salida a internet con lo cual pueden acceder a la aplicacion y sus servicios, pero desde el servidor expuertos en la web no me puedo comunicar hacia adentro de la empresa, ya que como sabran hay firewall y demas aspectos de seguridad. Nota: el cliente no tiene servicio expuestos en la web, ni posee infraestructura para poder tenerlos, es por eso que la aplicacion esta hosteada en servidores de terceros expuestos a internet, con toda la seguridad que esto requiere (uso de SSL, etc) Entonces que pense, desarrollar un servicio de windows que corrar en los sevidores de impresion o en alguna otro pc local a la empresa y que al iniciarse se subscriba mediante la llamada a un servicio web, pasandoles la informacion de su localizacion, esto se puede sin problemas ya que se tiene salida. Ahora la otra pata es la compleja y por la cual queria consultar, como comunico el servidor con el servicio corriente en las maquians locales, habia pensado implementar algo parecido a los que hace la aplicacion de LogMeIn (https://secure.logmein.com/home.asp). Creo que por ahi saben como funciona, se descarga un cliente que envia info a un servidor para registrase, y cuando entra una peticion el server es el que se contacta con el cliente, y lo mas interesante es que pasa todos los firewall sin necesidad de abrir puertos. Esto me permitiria que al procesar en el servidor enviar un mensaje al servicio de windows (que se registro) para que imprima localmente o envie un mensaje, o etc. Se que me diran que realice un servicio que cada cierto tiempo realice una consulta a un servicio web para ver si tiene alguna peticion que puede estar almacenada en un msqueue, o en una table en la db; pero justamente por eso consulto por el patron observer, es mas linda la solucion, ya que los clientes se subscriben y desde el servidor se envian los mensajes, ante un evento La pregunta es: tienen idea como se puede implementar algo similar a como funciona logmein, y como es que este servicio puede funcionar sin que los firewalls le molesten e identificar una pc en particular. Bueno cualquier sugerencia sera de gran ayuda. Saludos _____ ¡Buscá desde tu celular! Yahoo! oneSEARCH ahora está en Claro http://ar.mobile.yahoo.com/onesearch