Newsgroup: it.comp.lang.visual-basic
Titolo: MSMQ in MTS

Ho preso questo esempio di codice per implementare un componente che usa le
code
Public Function MQSend(strSend As String) As String
Dim qinfoSend As New MSMQQueueInfo
Dim qSend As MSMQQueue
Dim qmesMessage As New MSMQMessage
On Error GoTo SendError
Dim ctxObject As ObjectContext
Set ctxObject = GetObjectContext
qinfoSend.PathName = "Server1\Localx"
Set qSend = qinfoSend.Open(MQ_SEND_ACCESS, MQ_DENY_NONE)
qmesMessage.Body = strSend
qmesMessage.Label = "VB Sample Message"
'Since we must send to a transactional MSMQ queue in order to participate
'in a transaction, we must check to see if the component is transactional
'and be sure to make the send operation transactional in either case.
If (ctxObject.IsInTransaction) Then
  qmesMessage.Send qSend, MQ_MTS_TRANSACTION <<<<<<<<<<<<
Else
  qmesMessage.Send qSend, MQ_SINGLE_MESSAGE
End If
qSend.Close
ctxObject.SetComplete
Set ctxObject = Nothing
Exit Function
SendError:
'Resume
ctxObject.SetAbort
Set ctxObject = Nothing
MQSend = "SendFailure"
End Function
alla riga segnalata con <<<<<<<<<<<< mi da questo errore:
Transaction usage is invalid.
Qualcuno ha qualche idea?
Premetto che non ho le idee ancora chiare sulla proprieta'
MTSTransactionMode delle classi
grazie a tutti!
Clauz

Un'altro che verra' all'inferno con me!!!
con msmq si impreca!!!
Vediamo se t posso aiutare provo a spararne 2
/****************************
- SE la tua coda non te' transazionale prova ad eseguire
  il tuo codice in una coda creata come transazionale
 RICORDA una coda nasce come transazionale
                    non lo diventa dopo
                    quindi se sei in questo caso crea una coda transazionale
/*****************************
-  se la coda sulla quale stai cercando di scrivere e' transactional
   quindi devi includere tutte le operazioni di send e receive in una o +
   transazioni
  (cosa che non fai  esplicitamente nel codice, tu controlli
    solo chge ci sia una transazione aperta e poi usi la coda come di
    conseguenza, non so se puoi farlo... )
Puoi usare il transactrion coordinator di MSMQ
lo istanzi e poi prima di inviare o ricevere apri una transazione
invii/ricevi
chiudi la transazione
Riporto l'esempio di MSDN
Dim xdispenser as New MSMQCoordinatedTransactionDispenser
Dim xact as MSMQTransaction
Dim qSend as MSMQQueue
Dim msg1 as New MSMQMessage
Dim msg2 as New MSMQMessage
Set xact = xdispenser.BeginTransaction
'Assumes queue already exists and is transactional.
Set qSend = qinfo.Open(MQ_SEND_ACCESS, 0)
msg1.Label = "MyTransaction message"
msg1.Body = "Message 1 Body"
msg1.Send qSend, xact                     'Associates send with xact.
msg2.Label = "MyTransaction message"
msg2.Body = "Message 2 Body"
msg2.Send qSend, xact                     'Associates send with xact.
xact.Commit
Spero di averti aiutato
benny

 con msmq si impreca!!!
Prima di tutto grazie!
stavo perdendo ogni speranza che qualcuno mi rispondesse.
ti volevo chiedere che ne pensi di msmq anche se dalla tua introduzione non
credo che hai una buona considerazione di msmq.
sto studiando un sistema un po' critico e devo scegliere la tecnologia
giusta per implementarlo. Se hai due minuti mi dici i tuoi pro e contro di
msmq?
Comunque sappi che non sei solo nell' inferno!
clauz

 ha scritto nel messaggio
news:a9gpil$32dh0$1...@ID-49224.news.dfncis.de...


 wrote in message
news:zcZu8.21092$b62.5...@news1.tin.it...
