In questo periodo qua in banca sto affrontando un po' di problematiche relative ai componenti serviced .NET di tipo transazionale. In particolare la chiamata asincrona di un metodo di un componente transazionale tramite MSMQ ricorre al metodo Marshal.BindToMoniker per associare il riferimento univoco (moniker) di un oggetto in ambito COM unmanaged all'equivalente managed (ovvero una interfaccia per la quale è abilitato il queuing).
Dim objCOM As ComMoneyTrans.IMoneyTrans =
DirectCast(Runtime.InteropServices.Marshal.BindToMoniker
("queue:/new:ComMoneyTrans.ASyncMoneyTrans"), ComMoneyTrans.IMoneyTrans)
objCOM.ExecuteMoneyTransaction(sourceAccount, targetAccount, moneyAmount)
objCOM.ExecuteMoneyTransaction(targetAccount, bankAccount, moneyAmount*Percent)
Runtime.InteropServices.Marshal.ReleaseComObject(objCOM)
objCOM = Nothing
Questo fatto mi ha fatto pensare un po'... I meccanismi di marshaling tra ambiente COM e ambiente .NET sono abbastanza complessi, però lasciano molta discrezionalità e molte possibilità agli sviluppatori circa le scelte implementative. Inoltre le potenzialità e i vantaggi di un ambiente come è quello .NET totalmente managed unite alla potenza di COM, nonostante la sua complessità intrinseca (su questo non penso ci siano particolari obiezioni), possono realmente permettere di realizzare soluzioni di una certa consistenza anche in settori in cui la scelta in passato è spesso ricaduta su tecnologie alternative.
Un saluto a tutti.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- I design pattern di .NET, il 13 luglio 2005 alle 12:02
- Transazioni con Data Access Application Block: non mi convince!, il 10 gennaio 2005 alle 21:10
- SSL e il degrado di prestazioni nei WS, il 23 novembre 2004 alle 22:40
- DataAdapter e connessioni , il 22 ottobre 2004 alle 14:50
- Concatenazione dei costruttori di una classe, il 7 settembre 2004 alle 16:07