2009-09-21 9 views
19

Ho molte operazioni nel database che devono attivare il codice dell'applicazione. Attualmente sto usando il polling del database, ma sento che SQL Server Service Broker può darmi funzionalità tipo MSMQ.È possibile/si dovrebbe utilizzare SQL Server Service Broker con applicazioni .NET?

  1. Posso ascoltare le code di SQL Server Service Broker dalle applicazioni .NET in esecuzione su un altro computer?
  2. Se sì, dovrei farlo?
  3. In caso contrario, cosa consiglieresti?
+0

Certo, lo faccio tutto il tempo. – RBarryYoung

+0

Perché non segna una risposta se è di aiuto, o metti una taglia se vuoi più risposte? (visto che ha quasi 5 anni, probabilmente non lo affannate più ...) – Noctis

risposta

11

per rispondere alle vostre domande:

'possibile ascoltare SQL Server Service Broker code da applicazioni .NET in esecuzione su una macchina diversa?

Sì.

Se sì, dovrei farlo?

In caso contrario, cosa consiglieresti?

È possibile utilizzare SqlDependency. Utilizza Service Broker dietro le quinte, ma non esplicitamente.

È possibile registrare un oggetto SqlDependency con una query SELECT o una stored procedure. Se un altro comando modifica i dati restituiti dalla query, verrà generato un evento. Puoi registrare un gestore di eventi ed eseguire il codice che ti piace in quel momento. In alternativa, è possibile utilizzare SqlCacheDependency, che rimuoverà l'oggetto associato dalla cache solo quando l'evento viene attivato.

È inoltre possibile utilizzare direttamente Service Broker. Tuttavia, in tal caso sarà necessario inviare e ricevere i propri messaggi, come con MSMQ.

In ambienti con carico bilanciato, SqlDependency è adatto per i casi in cui il codice deve essere eseguito su ogni server Web (ad esempio lo svuotamento della cache). I messaggi di Service Broker sono migliori per il codice di quelli che dovrebbero essere eseguiti una sola volta, ad esempio l'invio di un'email.

Nel caso sia utile, copro entrambi i sistemi in dettaglio con esempi nel mio libro (Ultra-Fast ASP.NET).

+2

Ho appena acquistato il tuo libro perché sembra abbastanza buono. Inoltre, posso supportare un utente StackOverflow. –

+0

Grazie. Spero che vi piaccia; Per favore fatemi sapere cosa ne pensate. – RickNZ

17

SSB (SQL Service Broker) ha una funzionalità denominata Activation che ha consentito di allegare una stored procedure a una coda. SQL Server eseguirà questa procedura internamente quando ci sono messaggi da consumare in una coda. La procedura collegata alla coda può essere una procedura CLR che consente l'esecuzione di moduli di logica aziendale del codice gestito (C#, VB.Net etC).

Un'alternativa a una stored procedure interna attivata consiste nell'avere un client esterno "listen" su una coda con un'istruzione WAITFOR(RECEIVE ...). Questa sintassi è speciale per SSB e fa un blocco non di pool finché non ci sono messaggi da ricevere. Le applicazioni consumano quindi i messaggi ricevuti come un ordinario set di risultati T-SQL (come un SELECT). C'è anche un esempio di External Activator for Service Broker che sfrutta il meccanismo di notifica degli eventi per sapere quando avviare un'applicazione per consumare messaggi da una coda.

Se si desidera visualizzare un esempio di codice T-SQL che utilizza l'attivazione interna SSB, verificare Asynchronous procedure execution.

+0

Sto davvero cercando la sua idoneità per l'invio di messsage ad applicazioni esterne eseguite su macchine separate dal database. –

+0

SSB può solo inviare messaggi a un'istanza di SQL. È possibile utilizzare le edizioni di SQL Express per ogni macchina separata. –

+0

So che sono passati 8 anni ma il commento sopra non è vero. Il broker di servizi funziona solo con i lettori di coda esterni. Funziona bene anche con TPL ed EF. –

Problemi correlati