¿Alojar un servicio WCF o pedirles a los consumidores que alojen uno?

Necesito implementar una aplicación puente en .NET que, en un nivel alto,

  • en la parte posterior habla con un sistema OCR enviándoles imágenes y obteniendo datos de las imágenes en formato legible
  • en la parte frontal, las aplicaciones consumirían el servicio del puente (WCF o de otro tipo) enviando imágenes y esperando datos legibles como respuesta.

Toda la operación estaría en modo asíncrono.

Las aplicaciones que consumirían servicios del puente pueden estar basadas predominantemente en .NET o Java. (también podría existir la posibilidad de que existan aplicaciones de mainframe en el futuro)

Mi pregunta es sobre la solución para devolver los datos legibles a la aplicación que los consume. Como la devolución de llamada WCF no es interoperable con Java, no puedo usar wsDualHttpBinding. De ahí las 2 alternativas que veo actualmente son:

  • a) Tener otro servicio web alojado en el puente que la aplicación consumidora pueda sondear.
  • b) Haga que cada aplicación de consumidor aloje un servicio web basado en el wsdl estandarizado proporcionado por el puente en su propia tecnología. Luego, el puente consumiría el servicio web de la aplicación cuando sus datos estén listos.

Los problemas que tengo con ambas opciones son:

  • Con a), el sondeo siempre consume muchos recursos, pero la aplicación de consumidor solo necesita consumir este servicio web (generar su propia clase de proxy).
  • Con b, para cada aplicación que deba registrarse en el puente, deben crear su propio servicio web. Esto no parece estar tan débilmente acoplado como recomienda la arquitectura SOA.

Mi pregunta es, ¿cuál es más preferible para mantener el sistema extensible y escalable? ¿Hay alguna otra forma de implementar esto?

preguntado el 27 de agosto de 11 a las 21:08

2 Respuestas

En este caso, optaría por la solución a) aunque puede significar un sondeo ... PERO la solución b) posiblemente tenga un problema si hay medidas de seguridad (red / firewall / proxy ...) intermedias que posiblemente hagan que su servicio no pueda para llamar a su servicio ... o podrían implementar el WSDL de alguna manera incompatible ...

Incluso si implementa la solución b) en mi humilde opinión, tendría que proporcionar la solución a) como alternativa ...

La solución a) tiene la mayor probabilidad de funcionar bien, ya que los clientes ya deben implementar algunas llamadas al servicio web para enviar los datos de la imagen ...

Y puede hacer que la solución a) del lado del servidor sea bastante eficiente porque la operación (OCR) es comparativamente "de larga duración" y, por lo tanto, el estado actual se puede almacenar en caché en gran medida en el servicio web; tal vez actualizar el estado cada 10 segundos sería suficiente. .

EDIT:

Otro problema con la solución b) es: ¿qué sucede si su servicio web no funciona durante algunos momentos cuando intentas llamarlo? Tendría que implementar algún tipo (¿persistente?) Cola, etc. para que esto sea confiable ...

Respondido 28 ago 11, 02:08

La forma en que lo implementaría es la siguiente usando pub-sub:

Cree dos mensajes: GenerateOCRDataRequest: contiene ClientID, byte de imagen [] OCRProcessCompleted: contiene ClientID, byte ProcessedData []

La aplicación cliente se suscribirá a OCRProcessCompleted con sus diferentes ID de cliente como filtro. También publicarán GenerateOCRDataRequest e incluirán su ID de cliente para que cuando la respuesta regrese, solo obtengan sus propias solicitudes.

La aplicación puente se suscribirá a GenerateOCRDataRequest: cuando la reciba, la procesará y luego publicará OCRProcessCompleted con los datos necesarios.

En este escenario, supongo que tanto el cliente como el puente tendrán una cola en la que se colocarán los mensajes que se publiquen y simplemente sacarán los mensajes de la cola según sea necesario.

Si desea implementar el escenario como se describe, puede usar http://pservicebus.codeplex.com/ que proporciona api en Java y .NET para hacer pub-sub. También hay ejemplos sobre cómo usarlo aquí: http://pservicebus.codeplex.com/wikipage?title=Samples%2fExamples&referringTitle=Home

Espero que ayude

Respondido 30 ago 11, 19:08

Lo estoy proxeneta :) Es gratis, así que no hay dinero que ganar con él. rpgmaker

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.