3 pagine in totale: <<Indietro 1 2 [3]
L'invio di un messaggio è la funzionalità più comune che MSMQ utilizza nelle pagine ASP. Per mandare un messaggio occorre aprire una coda con accesso di tipo send (
MQ_SEND_ACCESS<%
'dim some variables
Dim objQInfo
Dim objQSend
Dim objMessage
'open the queue
Set objQInfo = Server.CreateObject("MSMQ.MSMQQueueInfo")
objQInfo.PathName = ".\test"
Set objQSend = objQInfo.Open(MQ_SEND_ACCESS, MQ_DENY_NONE)
'build/send the message = costruisci il messaggio
Set objMessage = Server.CreateObject("MSMQ.MSMQMessage")
objMessage.Label = "This is the label." 'etichetta
objMessage.Body = "This is the body." 'corpo
objMessage.Send objQSend
objQSend.Close
'clean up
Set objQInfo = Nothing
Set objQSend = Nothing
Set objMessage = Nothing
%>Questo codice apre una coda abilitata all'invio dei messaggi. Il messaggio viene creato come istanza della classe per i messaggi, aggiungendo Label e Body. Il messaggio è inviato tramite la funzione Send (la cosa è passata come parametro).
Possibili utilizzi di MSMQ
Gli usi di MSQM in un'applicazione sono parecchi, ma quello più comune è quello di scaricare le parti più pesanti per la CPU su di un altro thread (caso MSQM sulla stessa macchina come IIS) o su di un altro computer (MSQM ed IIS su computer diversi). Spostando l'esecuzione ad un altro thread o computer, la pagina ASP può continuare a girare asincronicamente.
Due cose determinano normalmente se valga la pena o meno spostare l'esecuzione di una certa operazione: minimizzare il tempo di esecuzione e minimizzare i tempi necessari per dare all'utente una conferma visiva. L'esecuzione può essere spostata su di un altro computer qualora l'utente non si aspetti una conferma immediata. Un esempio potrebbe essere la ricalcolazione dei dati sull'inventario a seguito del piazzamento di un ordine.
Se l'operazione in corso sul server durante la generazione della pagina web impiega troppo tempo, si rischia che la pagina vada in time-out in faccia all'utente. In tal caso l'utente riceverebbe un messaggio di errore oppure farebbe un tentativo di refresh prima che l'operazione sia conclusa. Questo spostamento dell'esecuzione, noto anche come esecuzione in background, non solo velocizza il tempo richiesto a generare la pagina, ma in definitiva migliora di gran lunga la scalabilità del server web
MSQM ha anche la capacità di tenere certi oggetti COM nel corpo del messaggio. L'unico requisito è che l'oggetto in questione supporti le interfacce
IDispatchIPersistIPersistStreamIPersistStorageADODB.RecordsetADOR.RecordsetWord.DocumentPublic Sub SendRecordsetInMessage()
Dim objQInfo As New MSMQ.MSMQQueueInfo
Dim objQSend As MSMQ.MSMQQueue
Dim objMessage As New MSMQ.MSMQMessage
Dim objRS As New ADOR.Recordset
Dim a As New MSMQQueue
'build/fill the recordset / cistruisci il recordset
With objRS
'build the recordset structure
.CursorLocation = adUseClient
.Fields.Append "FN", adVarChar, 25
.Fields.Append "LN", adVarChar, 25
.Open
'add a record
.AddNew
.Fields("FN") = "Chris"
.Fields("LN") = "Blexrud"
.Update
'add a record
.AddNew
.Fields("FN") = "Shayna"
.Fields("LN") = "Blexrud"
.Update
End With
'build/get the queue
objQInfo.PathName = ".\test"
Set objQSend = objQInfo.Open(MQ_SEND_ACCESS, MQ_DENY_NONE)
'build/send the message
objMessage.Label = "Recordset State!!!!"
objMessage.Body = objRS
objMessage.Send objQSend
objQSend.Close
'clean up
Set objQInfo = Nothing
Set objQSend = Nothing
Set objMessage = Nothing
Set objRS = Nothing
End SubQuando il recordset viene ricostruito dal messaggio, ciò avviene assegnado ad esso il corpo del messaggio, dal momento che il messaggio è di tipo Variant
Set objRS = objMessage.BodyConsiderazioni
C'è una difficoltà nello sviluppare applicazioni con MSMQ - la mancanza di feedback riguardo al risultato di eventuali operazioni. Benchè ciò abbia perfettamente senso nell'architettura di MSMQ, sarebbe opportuno avere a disposizione delle funzioni per scoprire il risultato dell'esecuzione assegnata ad un altro processo attraverso un messaggio MSQM.
Ci sono dei metodi per aggirare il problema. Potreste, ad esempio, inviare un messaggio all'utente affinchè egli possa, se lo desidera, controllare la coda e verificare che il task sia stato portato a termine correttamente.
In alternativa, potete utilizzare una tabella nel database per seguire l'andamento dei task assegnati attraverso MSMQ e definire una serie di standard che ogni utente MSMQ deve soddisfare. In seguito gli utenti possono guardare la tabella per capire se il loro task è stato eseguito e con quale esito.
Un ultima nota - l'installazione di MSQM richiede molte cose. L'installazione del server presuppone la presenza di MS SQL server (6.5 o 7), al fine di poter seguire le varie informazioni necessarie al supporto della coda. Anche l'installazione del client, benchè non richieda un database, richiede comunque grandi risorse.
Link associati
3 pagine in totale: <<Indietro 1 2 [3]
Contenuti dell'articolo
- Galleria fotografica dinamica con ASP.NET AJAX
- Usare Search come un servizio nei tuoi siti e nei tuoi client
- Mappe nel tuo sito con Virtual Earth
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
- Realizzare un custom extender AJAX con ASP.NET 3.5
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008
- Le nuove caratteristiche di IIS 7.0 per sviluppatori e sistemisti
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Difficoltà
Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!