Newsgroup: it.comp.lang.delphi
Titolo: [D2005 Net] Utilizzo di "interface" in .Net Remoting

Ciao a tutti,
sto cercando di utilizzare classi remote attraverso delle interfacce ma 
non ci riesco!
L'argomento è quello della programmazione distribuita e non volendo 
distribuire sui client la logica della mia applicazione pensavo appunto 
di utilizzare un interfaccia alle mie classi remote.
Se qualcuno l'ha già fatto magari fornisco più dettagli...
Ciao
Maurizio B.

parli di remoting?
A.

A.
Sě, quello che prima si faceva con DCOM (almeno cosě mi risulta dato
che DCOM non l'ho mai usato).
Si tratta delle classi del namespace "System.Runtime.Remoting", ecc...
Ti č mai capitato di averci a che fare?
Ciao
Maurizio B.

 Ti č mai capitato di averci a che fare?
si. l'argomento e' da un alto semplice ma per altro e' complesso.
In sintesi:
1) con com/dcom dovevi scrivere la tua classe rispettando determinate 
regole.
Questo non remoting non vale. In pratica, se la tua classe implementa 
una o piu' interfacce e' utilizzabile con remoting
2) remoting usa lo stesso protocollo sia che lavori con un solo pc che 
se instanzi la tua classe su un pc diverso via rete.
dcom invece utilizza 2 protocolli diversi.
3) basta UNA RIGA per decidere se la classe va istanziata in locale o in 
remoto. Quindi, se devi fare test, basta commentare/decommentare questa 
riga ed il gioco e' fatto
4) se istanzi in remoto puoi scegliere se avere una istanza condivisa 
della classe x tutti i client oppure n istanze diverse.
5) Com/dcom per gestire il "ciclo di vita" di una istanza usa il 
reference count, una delle cose + micidiali di tutta l'architettura 
insieme alla storia che com non e' OO.
In remoting hanno inventato la ruota e utilizzano il sistema dei lease, 
che somiglia molto al meccanismo usato dal dhcp di tcp/ip per la 
assegnazione degli indirizzi ip.
In pratica, un istanza ha un "vita" lunga un determinato tempo scaduto 
il quale viene distrutta. Ma se prima che questo tempo sia scaduto 
qualcuno ne richiede l'utilizzo la vita le viene allungata.
Questo in sintesi sul piano teorico.
Per una trattazione approfondita ti suggerisco:
1) msdn
2) una ricerca su amazon dovrebbe sfornare i titoli di alcuni volumi che 
parlano solo di questo
A.


Ti ringrazio molto per le utilissime indicazioni.
In effetti l'argomento č proprio come hai detto tu, difficile e facile
al tempo stesso.
Il mio problema perň non č solo quello di farmi un'idea precisa di
quello che il Remoting permette (cosa che in questi giorni dovrei aver
fatto), le mie difficolta sono nel riuscire ad utilizzare le
interfaccie.
nel momento in cui cerco di attivare il mio oggetto tramite
l'istruzione:
Activator.CreateInstance(typeof(ITest),Nil,[UrlAttribute.Create('
http://localhost/TestRmt')
])
as ITest;
ottengo un errore, la mia classe non deriva da MarshalByRefObject !
Se vuoi posto il codice.
Ciao e grazie


Ho fatto altre prove che provvedo ad aggiungere alle informazioni già
fornite.
Nel mio pgm di prova ho creato un assembly con dentro una classe
derivata da MarshalByRefObject che ho chiamato TTestObj, questa classe
implementa una "interface" (ITestObj).
La unit dove si trova la "interface" è utilizzata anche da un
eseguibile (app. 
VCL.NET
) che tenta di creare un istanza remota della
classe (utilizzando ovviamente ITestObj).
L'assembly che contiene la classe e la logica della classe stessa non
viene distribuito con l'applicazione 
VCL.NET
.
A questo punto tramite due TButton sull'app. ho tentato due tipi di
attivazione del mio oggetto remoto.
La prima attivazione provata è:
TestInt:=Activator.GetObject(typeof(ITestObj), sURL) as ITestObj;
in questo caso non ho avuto problemi ed il tutto ha funzionato
regolarmente.
La seconda attivazione è:
TestInt:=Activator.CreateInstance(typeof(ITestObj),Nil,[UrlAttribute.Create('
http://localhost/TestSrv')
])
as ITestObj;
In questo caso ottengo il seguente errore:
"Activation Attributes are not supported for type not deriving from
MarshalByRefObjec"
e purtroppo non ho ancora capito perchè. :-(
Preciso anche che sul server ho correttamente registrato la classe per
i due casi, la prima infatti è una registrazione di attivazione sul
server mentre la seconda è un attivazione di registrazione sul client.
Qalcuno sa darmi qualche dritta? 
Grazie.
Ciao
Maurizio B.