2009-12-22 7 views

Respuesta

3

Si un contrato dúplex no es factible en su entorno, tendrá que recurrir a la interrogación. Su método inicial podría devolver un identificador (quizás un GUID) y luego podría realizar llamadas posteriores a otro método para verificar el progreso y pasar el identificador.

Esto obviamente requerirá que almacene la información de progreso en algún lugar (como una sesión o una base de datos), lo cual no es genial.

3

Sí - utilice un duplex contract e informe el progreso cada cierto tiempo mediante el uso de devoluciones de llamada.

2

Depende bastante de los servicios a los que llama y del tiempo que espera que tomen las operaciones.

Si está iniciando 1000 consultas en un solo servicio, es probable que reciba un golpe por la aceleración del servicio antes de que se puedan recibir todas las llamadas al servicio.

Hay un fenómeno similar en el lado del cliente. WCF solo permitirá tantas llamadas concurrentes a la vez. Esto es configurable hasta cierto punto, pero me sorprendería si 1000 llamadas concurrentes funcionaran sin un aumento o dos.

Si las llamadas terminan siendo más o menos sincrónicas, colocaría todas las consultas en una cola y procesaría cada llamada una por una. A continuación, puede supervisar la cola desde su UI para actualizar el progreso a medida que se completan las llamadas al servicio.

Si su arquitectura admite 1000 llamadas simultáneas, entonces el enlace dúplex será una buena opción. Puede simplemente sondear para completar.

Como alternativa, puede crear un servicio de publicación/publicación que el servicio de destino actualice a medida que se completen las consultas. Su cliente solo captará eventos del servicio pub/sub a medida que los resultados de las consultas estén disponibles.

+0

Estoy de acuerdo con el procesamiento en otro dominio de la aplicación. El ejemplo de NServiceBus Distributor es un bonito patrón. Dado que los trabajadores le informan al distribuidor, apuesto a que puede informar el progreso de esa cola. –

+0

NServiceBus se ve interesante. Le daría una oportunidad. – Rohit

Cuestiones relacionadas