Domanda

Ho appena ereditato un database di SQL Server 2005 che sta usando Service Broker (questo è parte di un progetto / soluzione più grande). Tutto ciò che riguarda la soluzione sta lavorando bene. Sto cercando di Grok SQL Service Broker, e vedo questa informativa.

BEGIN DIALOG CONVERSATION @h
FROM SERVICE foo_Init
TO SERVICE 'foo_Target'
ON CONTRACT fooContract

Perché non è foo_Init tra virgolette singole? Mi aspetto che sia, proprio come 'foo_Target'.

È stato utile?

Soluzione

FROM SERVICE deve essere un servizio in un database corrente, vale a dire qualcosa che si può mettere le mani su subito. Pertanto ti viene richiesto di riferirsi ad esso dalla sua sysname. AL SERVIZIO d'altra parte è solo "qualcosa là fuori". Esso non può nemmeno esistere, mentre la dichiarazione BEGIN DIALOG è in esecuzione. Quando un messaggio deve essere inviato, percorsi di Service Broker entrano in gioco e dire Service Broker dove quel "qualcosa là fuori" è in realtà trova e come raggiungerlo. Pertanto riferendosi al servizio di destinazione da sysname (come è con servizio iniziatore) avrebbe senso solo se il servizio di destinazione è nello stesso database, che non può essere sempre il caso.

Altri suggerimenti

Da Books On Line

BEGIN DIALOG [ CONVERSATION ] @dialog_handle
   FROM SERVICE initiator_service_name
   TO SERVICE 'target_service_name'
       [ , { 'service_broker_guid' | 'CURRENT DATABASE' } ] 
   [ ON CONTRACT contract_name ]
   [ WITH
   [  { RELATED_CONVERSATION = related_conversation_handle 
      | RELATED_CONVERSATION_GROUP = related_conversation_group_id } ] 
   [ [ , ] LIFETIME = dialog_lifetime ] 
   [ [ , ] ENCRYPTION = { ON | OFF }  ] ]
[ ; ]

DA initiator_service_name SERVICE Specifica il servizio che avvia la finestra di dialogo. Il nome specificato deve essere il nome di un servizio nel database corrente. La coda specificata per il servizio iniziatore riceve i messaggi restituiti dal servizio di destinazione e messaggi creati da Service Broker per questa conversazione.

Per 'target_service_name' SERVIZIO Specifica il servizio di destinazione con cui avviare la finestra di dialogo. La target_service_name è di tipo nvarchar (256). Service Broker utilizza un confronto byte per byte in modo che corrisponda alla stringa target_service_name. In altre parole, il confronto è case-sensitive e non prende in considerazione le regole di confronto corrente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top