2010-09-08 14 views
7

¿Hay alguna manera de utilizar NServiceBus con Asp.Net MVC 2? Deseo enviar un mensaje de solicitud desde una aplicación Asp.Net MVC2 a un servicio, que maneja el mensaje y responde con un mensaje de respuesta. ¿Hay alguna manera de hacer esto claramente?Uso de NServiceBus con Asp.Net MVC 2

+0

¿Cuál es su caso de uso específico? ¿Puedes proporcionar más detalles sobre lo que intentas lograr, así que no tengo que adivinar? –

Respuesta

14

Si realmente quiere hacer esto, así es como:

var sync = Bus.Send<SomeMessage>(/*data*/) 
    .Register((AsyncCallback)delegate(IAsyncResult ar) { 
     var result = ar.AsyncState as CompletionResult; 

     // do something with result.Messages 
    }, 
    null 
); 

sync.AsyncWaitHandle.WaitOne(/*timeout*/); 
+0

Gracias, eso funciona muy bien y no todo lo que quiero –

18

Existe una razón por la que NServiceBus solo admite el registro de devolución de llamada para códigos de estado y entradas. Esa razón es que no debe usar NServiceBus para las comunicaciones de estilo de solicitud/respuesta de sincronización, esos escenarios se resuelven mejor con marcos como Wcf, NNibernate, EF, Ado.net, etc.

Debería tener en cuenta solo el uso de NSB para asincrónico A las partes de su aplicación les gusta enviar "comandos" a los servicios de backend para su procesamiento.

Una explicación más profunda se puede encontrar aquí:

http://andreasohlund.net/2010/04/22/messaging-shouldnt-be-used-for-queries

Si todavía quiere hacer petición/respuesta con NSB Vas a tener que trabajar para ello :) utilizando un messageHandler por su respuesta que actualiza algo de caché en tu aplicación MVC. Con eso en su lugar puede hacer un sondeo tipo Ajax para determinar cuándo llegan los datos.

Espero que esto ayude!

+0

+1 Estaba tratando de entender por qué necesito NServiceBus para la sincronización de req/resp (como dijiste que no es una tecnología de req/resp sincronizada) y encontré tu respuesta muy útil –

0

Si se trata de un proyecto totalmente nuevo, no te recomiendo pensar acerca del uso de patrón de separación comando de consulta que le ayudaría a preocupaciones lógicamente separadas con respecto ese estado de cambio en el dominio de negocio (comando) y consultas que actúa solo como mecanismo de descripción de estado. Entonces los Comandos se pueden implementar en NServiceBus y las Consultas usando WCF por ejemplo.

Cuestiones relacionadas