In questo periodo ho deciso di approfondire meglio la questione .NET Remoting, che alla fine sono smepre stato interessato a gestione remota di applicativi e l'interazione con sistemi su canali non API-based (vedi scambio di messaggi su protocolli tcp)... ma non so perchè questo .NET Remoting lo avevo un po snobbato... beh forse perchè avevo visto all'opera il remoting j2EE e non mi era troppo piaciuto (ma forse non avevo approfondito troppo nemmeno qllo).
Beh sta il fatto ke ho iniziato a studiare .NET emoting e su consiglio di Raffa e Aldo sono andato a dare un occhio alle FAQ sull'argomento di colui che è ritenuto un mago dell'argomento Ingo Rammer.
I consigli delle FAQ sono davvero delle perle... anche se è da ieri sera ch sto riflettando su questa: "HOWTO: Use Interface-based remote objects with config files". Nell'articolo si consiglio l'uso delle interfaccie e invocare l'oggetto remoto per URL, Activator.GetObject.
Fantastico era proprio quello che cercavo per dare piu flessibilità alla mie applicazione :-D
Ovviamente cosi facendo non si puo utilizzare la gestione della registrazione dei wellknown-client. Tale gestione permette di gestire da configurazione se una classe deve essere istanziatada in remoto e se si a chi chiedere tale servizio remoto.
Il bello è che poi da codice noi possiamo istanziare la classe senza preoccuparci del dove verrà istanziata!
[.config]
...
<client>
<wellknown type="CommonLib.MyClass, CommonLib" url="http://unserver-remoto:5555/MyClass.soap" />
</client>
...
[c# code]<BR
MyClass c = new MyClass();
Questo è a dir poko fantastiko... beh ricorda molto il buon vecchio DCOM :-D
Cmq tornando al problema. Se uso la tecnica dell'interfaccia questa cosa non è fattibile in quanto le interfaccie per definizione non possono essere istanziabili per cui devo essere io esplicitamente a dire dove si trova l'oggetto remoto ke implementa tale interfaccia.
IMyClass c =
Activator.GetObject(typeof(IMyClass),
"http://unserver-remoto:5555/MyClass.soap") as IMyClass
...e kmq anche la frase di codice qui sopra scritta è a dir poko stupenda! :-D
Nell'articolo che ho preso in cosiderazione mi sembra che venga però snaturato l'uso della registrazione dei wellknown-client configurabili da .config. L'implementazione della classe "RemotingHelper" è interessante... si ma anke no. Se scelgo di usare la tecnica delle interfaccie ci sono due possibili ragioni. 1) Non voglio dare ai client la classe che poi fisicamente istanzierò in remoto 2) ho piu provider e servizi che si comportano allo stesso modo (stessa interfaccia)...
Che poi a ripensarci i punti qui sopra sono anche limitanti al solo persare alle vaste possibilità che ti da la tenica di remoting con uso di interfaccia. Penso che nel caso usassi la tecnica dell'interfaccia forse avrò esigenze che mi porterannno a definire delle sezioni personalizzate del .config senza andare a ricavare mie funzionalità nel .config che poi non sono documentate e possono disorientare chi riutilizzerà l'applicazione.
beh... kome al solito mi sa ke mio pensiero non è stato kiarissimo...
è anke vero ke qsto è un BLOG... ke io il BLOG lo vedo kome una radio in cui si dicono le kose a ruota libero...
negli articoli invece si deve essere piu kiari... ma gli articoli ci metto anke un bel po a scriverli viste le miei limitate capacità espressive :-p Una volta Aldo mi disse ke io qndo parlo faccio un dump di qnto ho in testa... e mi sa ke aldo tiene ragione :-D