Service Broker avec Sql Server 2005 - les Messages sont bloqués dans la file d'attente

Je suis à la configuration d'un simple service broker de mise en œuvre. Localement, nous utilisons SQL Server 2008 Express et tout fonctionne bien. Une fois que le code s'exécute sur notre serveur de production (SQL SERVER 2005), les messages sont bloqués dans le récepteur de la file d'attente. Le followind code est incomplet, mais à la manière dont les files d'attente et les services sont fondamentalement configuré:

-- Create message type to validate the content of a message
CREATE MESSAGE TYPE MyMessageType VALIDATION = NONE;

-- Create contract to validate what direction messages can be sent in a conversation.
CREATE CONTRACT MyContract 
(
    MyMessageType SENT BY INITIATOR
) 

-- The receiver queue will process each message using the 'spProcessMessage' stored procedure
CREATE QUEUE [MyReceiverQueue];
ALTER QUEUE [MyReceiverQueue] WITH ACTIVATION 
(
      STATUS = ON,
      MAX_QUEUE_READERS = 1,
      PROCEDURE_NAME = spProcessMessage,
      EXECUTE AS SELF
);

-- The receiver service processes the incoming messages and passes them to the ReceiverQueue.
CREATE SERVICE [MyReceiverService] ON QUEUE [MyReceiverQueue]([MyContract]);

-- Queue and service to send the message from
CREATE QUEUE [MySenderQueue];
CREATE SERVICE [MySenderService] ON QUEUE [MySenderQueue];

Une fois le service installé, un message est tiré de cette façon:

-- Send a message to the receiver queue
DECLARE @MessageBody XML
SET @MessageBody = ''; 
DECLARE @Handle UNIQUEIDENTIFIER;
BEGIN DIALOG CONVERSATION @Handle
FROM SERVICE [MySenderService]
TO SERVICE 'MyReceiverQueue'
ON CONTRACT [MyContract]
WITH ENCRYPTION = OFF;
SEND ON CONVERSATION @Handle 
MESSAGE TYPE [MyMessageType](@MessageBody);

Tous les messages sont coincés dans le "MyReceiverQueue'. Si j'exécute manuellement "spProcessMessage', les messages sont traités normalement.

Un peu plus de détails:
- sys.transmission_queue est vide
- sys.conversation_endpoints état que les deux services sont 'CONVERSER'
- Broker est activé et DB est configuré comme SQL 2005 compatible

Des idées pourquoi les messages qui ne sont pas traitées automatiquement?

Merci beaucoup pour votre temps.

--

OK, après avoir joué un peu, j'ai eu ssbdiagnose de travail. Comme Remus commentented, il est situé ici: C:\Program Files\Microsoft SQL Server\100\Tools\Binn. Je l'ai fait travailler localement de cette façon:

ssbdiagnose -E -S "JDECUPER\SQLEXPRESS" -d mydb CONFIGURATION FROM SERVICE MySenderService TO SERVICE MyReceiverService ON CONTRACT MyContract

Puis, je l'ai essayé sur notre serveur de production:

ssbdiagnose -XML -U loginID -P pwd -S "machine's IP" -d mydb CONFIGURATION FROM SERVICE MySenderService TO SERVICE MyReceiverService ON CONTRACT MyContract > C:\testBrokerService.xml

Première erreur détecté:

Service Broker GUID is identical to that of database Pandilla on server 200.57.141.193

Une autre base de données sur le serveur avait un identiques GUID pour le service broker. Je n'avais qu'à régénérer le GUID:

ALTER DATABASE [myotherdb] SET NEW_BROKER;

La deuxième erreur avait à faire avec le autorisations de l'utilisateur pour exécuter la procédure stockée:

The EXECUTE AS for the user dbo specified for activation on queue dbo.AlbumGanadoresQueue cannot be impersonated due to an exception

Après la mise à niveau de ces autorisations, tout a commencé à fonctionner correctement.

Merci beaucoup à Remus pour me pointer dans la bonne direction. J'ai été un peu long mais j'espère que les détails aideront les autres développeurs.

OriginalL'auteur jdecuyper | 2009-07-14