2010-09-29 11 views
6

Estoy buscando identificar una mejor práctica o patrón de diseño utilizado para comunicación WCF permitir la comunicación y conmutar a otro servicio o servicio local de información si el WCF (o servicio inicial existe)¿Patrón de diseño para las capacidades de conmutación y failover del cliente WCF?

Estoy no estoy seguro de que esto tenga mucho sentido, así que déjame dar un ejemplo. Me gustaría que este agente pueda conectarse a un servicio wcf y (con suerte) exponer los métodos de contrato a la persona que llama (UI/BO, etc.) para que este objeto pueda invocar estos métodos, el agente intenta contactar a un primario servicio (probablemente WCF); si falla, conéctese a un servicio secundario.

Idealmente, toda la lógica de failover y reconexión estaría contenida en el agente.

¿Hay un patrón de diseño que encapsule un "cliente wcf de conmutación con conmutación por error"?
Tal vez no sea un patrón de diseño, ¿alguien recomienda un enfoque decente?

Respuesta

4

lo haría así:

  • La configuración del cliente tiene una única referencia al servicio
  • El cliente tiene una clase de proxy para comunicarse con el servicio
  • En la clase de proxy hay una captura de prueba
  • En el intento, establezca la dirección a la del servicio principal y llame al servicio
  • Si falla, ingresará el bloque catch, aquí puede establecer la dirección a la ba servicio de ckup y llámalo.
3

Juval Lowy tiene un gran artículo sobre el protocolo WCF Descubrimiento: http://msdn.microsoft.com/en-us/magazine/ee335779.aspx

En pocas palabras, este aprovecha mecanismo de difusión de UDP para el descubrimiento de la ubicación de los servicios que implementan una interfaz especificada. Entonces, el patrón podría ser que cuando un cliente se conecta, descubra la ubicación de un servicio y durante la vida de ese cliente y servicio se comunicarán de ida y vuelta. En caso de que el proveedor del servicio no esté disponible, el cliente puede volver a descubrir otro servicio y luego continuar.

Este patrón permite al administrador configurar servicios de respaldo sin fin con una configuración mínima en el cliente.

2

Actualmente funciono como Shiraz lo describe. Tengo una clase ServiceCaller y un método de llamada que envuelve a un delegado que es la llamada real en el servicio. Antes de invocar al delegado, puedo hacer otras cosas, así como ajustarlo en un try catch y centralizar el manejo del error.

http://www.lukepuplett.com/2010/07/adding-useragent-to-wcf-clients.html

En el futuro planeo usar NLB o MSMQ. ¿Por qué? Bueno, la conmutación por error está muy relacionada con el equilibrio de carga, por lo que comenzaría con NLB.

Pruebe estos artículos;

http://msdn.microsoft.com/en-us/library/ms730128.aspx

http://www.devproconnections.com/print/net-framework2/load-balancing-and-scaling-your-wcf-services.aspx

Buena suerte, vamos a saber cómo le va.

Luke

Cuestiones relacionadas