2008-12-17 10 views
1

J'utilise WCF (C#) pour envoyer/recevoir des messages à partir d'une file d'attente MSMQ privée sous Windows Server 2003 en mode Groupe de travail.Le service WCF n'a jamais été averti lors de la publication d'un nouveau message dans la file d'attente privée en mode Groupe de travail

Le client WCF/Service WCF et MSMQ se trouvent sur le même ordinateur.

Un client envoie un message à la file d'attente privée, cela fonctionne parfaitement. Il y a un service qui reçoit le message de la même file d'attente privée, mais le service semble ne jamais être appelé par MSMQ. (aucune erreur ne se produit)

Les messages s'empilent dans la file d'attente mais rien ne sort. Sur un autre ordinateur (en mode domaine et non en mode groupe de travail), les messages ont été envoyés et reçus parfaitement.

Quel est le problème avec le mode de groupe de travail qui empêche MSMQ d'appeler mon service?

Après, j'écrire un test C#, toujours sur un même ordinateur, mais cette fois j'ai créé MessageQueue et abonnez-vous à l'événement ReceiveCompleted ainsi:

MessageQueue MQueue = new MessageQueue(".\\private$\\nameofmyqueue"); 
MQueue.MessageReadPropertyFilter.SetAll(); 
MQueue.ReceiveCompleted += MessageEventHandler; 
Message Msg = MQueue.Receive(); 

Et je reçois des événements de file d'attente MSMQ quand il y a un nouveau message à présent.

Je pense qu'il y a des problèmes dans ma configuration de service (configuration WFC) ou dans ma réservation d'espace de noms.

+0

Pour information: Service qui doit être appelé par MSMQ hébergé par le service Windows. Lorsque j'essaie la même chose hébergée par une application de console qui fonctionne ... – fred

Répondre

0

J'ai trouvé où était mon problème. En fait, j'ai utilisé un service traité qui appelle la procédure SQL Server 2005. Pour utiliser la liaison transactionnelle avec SQL 2005, l'exécution de la procédure est bloquée dans une étendue de transaction.

Si une exception a été levée et non interceptée, DTC a été utilisé pour annuler le processus. Mon problème est que la connexion DTC/client distant n'a pas été activée sur mon serveur. Donc, soit vous devez activer la connexion DTC/client distant, soit vous n'utilisez pas l'étendue de la transaction.

Si vous souhaitez utiliser DTC et connexion client à distance, connexion client à distance doit être activé avant car activer DTC et la connexion client à distance redémarrage cause du serveur.