2009-07-14 10 views
4

Je suis en train de configurer une implémentation de service broker simple. Localement, nous utilisons SQL Server 2008 Express et tout fonctionne bien. Une fois le code exécuté sur notre serveur de production (SQL SERVER 2005), les messages sont bloqués dans la file d'attente du récepteur. Le code followind est incomplet, mais indique comment les files d'attente et les services sont essentiellement configurés:Service Broker avec Sql Server 2005 - Messages bloqués dans la file d'attente

-- 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 que le service est 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 bloqués dans la « MyReceiverQueue '. Si j'exécute manuellement 'spProcessMessage', les messages sont traités normalement.

Quelques plus de détails:
- sys.transmission_queue est vide
- sys.conversation_endpoints état que les deux services sont 'conversant'
- Broker est activé et DB est configuré en tant que SQL 2005 compatible

Des idées pour lesquelles ces messages ne sont pas traités automatiquement?

Merci beaucoup pour votre temps.

-

OK, après avoir joué un peu, je me suis ssbdiagnose travail. Comme Remus a commenté, il se trouve ici: C: \ Program Files \ Microsoft SQL Server \ 100 \ Outils \ Binn. Je l'ai fait travailler localement 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ée:

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 GUID identique pour le courtier de services. Je ne devait régénérer le GUID:

ALTER DATABASE [myotherdb] SET NEW_BROKER; 

La deuxième erreur avait à voir avec les 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é à fonctionne correctement.

Un grand merci à Remus pour moi pointant dans la bonne direction. J'étais un peu long mais j'espère que les détails aideront les autres développeurs.

Répondre

8

Première chose lire le guide Troubleshooting Dialogs sur mon site et suivez les étapes étape par étape jusqu'à ce que vous trouviez le problème possible. Si vous avez accès à un déploiement SQL 2008, exécutez l'outil ssbdiagnose.Bien que fait partie de SQL 2008, est parfaitement capable de diagnostiquer SQL 2005 ainsi. C'est la méthode préférée, encore une fois, si vous avez accès à un déploiement SQL 2k8.

+0

Salut Remus! J'espérais que vous verriez ma question car vos articles m'ont beaucoup aidé à configurer mon service :) J'ai regardé votre page de dépannage. La table 'sys.transmission_queue' est toujours vide, ce qui signifie que l'expéditeur peut envoyer le message. En ce qui concerne l'accusé de réception du récepteur, j'ai exécuté la fonction 'get_transmission_status' mais le résultat est également vide. Je n'ai pas installé de profileur ou de déploiement SQL 2k8. Y at-il un autre utilitaire/moyen de diagnostiquer ce qui ne va pas? Merci. – jdecuyper

+2

2k8? ssbdiagnose est votre ami. Est dans \ program files \ microsoft sql server \ 10 \ binn je crois. exécutez SSBDIAGNOSE -E CONNECT TO -S CONNECT TO -S . Vous pouvez l'exécuter à distance à partir d'une autre machine pouvant se connecter aux serveurs. –

+0

Vous pouvez également utiliser le formulaire de contact de mon site et écrivez-moi directement –

Questions connexes