2010-09-08 4 views
7

Existe-t-il un moyen d'utiliser NServiceBus avec Asp.Net MVC 2? Je veux envoyer un message de demande d'une application Asp.Net MVC2 à un service, qui gère le message et répond avec un message de réponse. Y a-t-il un moyen de le faire clairement?Utilisation de NServiceBus avec Asp.Net MVC 2

+0

Quel est votre cas d'utilisation spécifique? Pouvez-vous fournir plus de détails sur ce que vous essayez d'accomplir, alors je n'ai pas à deviner? –

Répondre

14

Si vous vraiment voulez faire, voici comment:

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

Merci, ça marche très bien et fais tout ce que je veux. –

18

Il existe une raison pour laquelle NServiceBus prend uniquement en charge l'enregistrement du rappel pour les codes d'état et les ints. Cette raison est que vous ne devez pas utiliser NServiceBus pour les communications de type requête/réponse de synchronisation, ces scénarios sont mieux résolus avec des frameworks tels que Wcf, NNibernate, EF, Ado.net, etc

Vous ne devriez utiliser que NSB pour async certaines parties de votre application aiment envoyer des "commandes" aux services de backend pour le traitement.

Une explication approfondie peut être trouvée ici:

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

Si vous voulez toujours faire la demande/réponse avec NSB que vous aurez à travailler pour elle :) en utilisant un messageHandler pour votre réponse qui met à jour un cache dans votre application MVC. Avec cela en place, vous pouvez faire un sondage de style ajax pour déterminer quand les données arrivent.

Espérons que cela aide!

+0

+1 J'essayais de comprendre pourquoi j'ai besoin de NServiceBus pour la synchronisation req/resp (comme vous l'avez dit il n'est pas destiné à être une technologie req/resp sync) et j'ai trouvé votre réponse très utile –

0

Si c'est un projet entièrement nouveau, je recommande fortement penser à l'aide de modèle de séparation de requête de commande qui vous aiderait préoccupations logiquement distinctes concernant changement d'état dans le domaine métier (commande) et requêtes qui agissent uniquement comme mécanisme de description d'état. Ensuite, les commandes peuvent être implémentées dans NServiceBus et les requêtes en utilisant WCF par exemple.