Domanda

Devo creare un servizio in grado di elaborare le richieste in coda in un intervallo di tempo configurato.Ad esempio, vai sul Web e ottieni dati finanziari da un sito che richiede di limitare le richieste a una volta al secondo.Sono nuovo in WCF e non sono sicuro che (1) WCF con MSMQ sia una scelta adeguata per implementarlo?e (2) in caso affermativo, qual è il meccanismo migliore per far rispettare l'intervallo?un thread aspetta?un timer (non sono sicuro di come funzionerebbe).

È stato utile?

Soluzione

Non c'è niente di costruito nella WCF che permetterebbe di gestire questo in modo esplicito, quindi faresti ancora bisogno di fare tutto il lavoro da soli.

Mentre il servizio potrebbe certamente elaborare le richieste provenienti da MSMQ, gli ascoltatori MSMQ in WCF vi verrà a prendere e messaggi di processo nel più breve tempo possibile; non è possibile configurare per elaborare i messaggi ogni X secondi solo (si potrebbe fingere dato gli strumenti giusti, ma mi sembra che non sarebbe stato poi così grande).

Un'opzione se il ritardo tra l'elaborazione delle richieste non è molto breve, sarebbe quella di utilizzare una coda intermedia per contenere le richieste in sospeso. Cioè, qualunque invia i reali richieste li scrive in una coda nessuno è direttamente ascoltando (coda di A), mentre i vostri WCF ascolti servizio di un differet coda (coda di B). Poi, hanno qualcos'altro (potrebbe essere semplice come una corsa di script da task scheduler) che viene eseguito una volta ogni / minuti / qualunque cosa e si muove solo 1 messaggio X secondi dalla coda A a coda di B, innescando così il servizio WCF reale per l'esecuzione.

Altri suggerimenti

WCF e MSMQ sono una grande squadra!Sicuramente vale la pena dare un'occhiata.

La parte che WCF non fornisce immediatamente è il "controllo ogni x secondi".L'approccio migliore in questo caso sarebbe quello di ospitare il servizio WCF all'interno di un servizio Windows NT e disporre di un timer all'interno del servizio NT che controlli la coda MSMQ solo una volta ogni x secondi.Non dovrebbe essere troppo difficile da implementare, davvero.La bellezza è:puoi ospitare molto facilmente un servizio WCF all'interno di un servizio NT: solo poche righe di codice e ottieni il controllo completo su cosa sta succedendo e quando.Consulta la documentazione MSDN su Come ospitare un servizio WCF in un'applicazione gestita per dettagli.

Risorse:

In alternativa si potrebbe utilizzare un servizio finestra per consumare i messaggi invece. Se non si utilizza la funzionalità WCF di consumare un messaggio non appena viene pubblicato, allora probabilmente hai motivo di usare WCF in primo luogo

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