Newsgroup: it.comp.lang.visual-basic
Titolo: [.NET][LUNGO] Software multiutente complesso

Ho la necessità di progettare un software multiutente e vorrei un consiglio su
come strutturare il sistema.
Questo software dovrà avere 2 interfacce una via Browser e una tramite un
software (da fare, ovviamente) solo ed esclusivamente in una rete locale.
L'interfaccia via browser dovrà semplicemente permettere la lettura dei dati
invece il software, installato solo su alcuni client, permetterà anche:
modifica, insermento, eliminazione ecc ecc
Essenzialmente sul server saranno presenti questi elementi
- Un database (MSDE o sql server in base al carico di lavoro/esigenze)
- Una serie di documenti di ogni tipo (legati al database)
- Un DB con una lista di utenti e gruppi con autorizzazioni particolari, e dei
log
Prima di postare ho condotto molte prove e ho cercato di sfruttare le "nuove"
funzionalità di .NET e adesso devo decidere come trasportare i dati sulla rete.
Ho valutato la possibilità di usare i famigerati WebServices ma mi sono accorto
che farei viaggiare sulla rete, dei bellissimi file XML, pressochè inutili (per
un record di 200 Byte devo veicolare almeno il 50-60% di dati in più). Senza
contare il carico di lavoro che dovrà subire il server ad ogni richiesta di dati
(Connetti al DB, filtra e prepara il dataset, ecc ecc).
Ho valutato la possibilità di connettere i programmi client direttamente al db
ma putroppo devo gestire le autorizzazioni in modo particolare.
Ho valutato la connessione tramite socket:
Vantaggi: Decido con precisione che dati inviare
Svantaggi: Gli amministratori di rete si offendono se gli dici che hai bisogno
delle porta N libera perchè altrimenti non gira nulla e in + mi devo studiare
una sorta di protocollo ad-hoc.
Arrivo alla domanda: Quale secondo voi è il sistema migliore per implementare
tutto questo?
Se volete ulteriori chiarimenti sono a vostra disposizione :)
Ciao
--
Camplix
-Windows .Net Server (RC1)
-Visual Basic .NET Standard
-Framework Sp2


non conosco a fondo .NET ma io valuterei la 3 soluzione, quella dei socket..
per il fatto che gli amm si offendono.. beh pace le porte esistono per
essere usate...
Ciao
Davide

Microsoft non e' proprio la mia piattaforma preferita, pero' posso darti
un'idea :
se progetti un'architettura a tre livelli puoi pensare di sviluppare dei
servizi che vadano
su database come oggetti COM ed utilizzare DCOM come protocollo per la
distribuzione
degli oggetti sulla rete. A questo punto le interfacce le puoi sviluppare di
tipo "fat", quindi
una interfaccia scritta in vb o visual c++, e un'interfaccia di tipo thin
utilizzando asp.In questo
modo elimini la necessita' di implementare un protocollo proprietario e puoi
utilizzare MTS per
la gestione delle transazioni distribuite.
Giovanni

 wrote in message
news:Avnp9.31573$Fz.9...@news1.tin.it...

Ho avuto la tua stessa esigenza in vb6.
Ora, in .NET pensavo che i WebServices avrebbero sostituito la tecnologia da
me implementata .. per cui mi piacerebbe capire meglio perchè gli scarti a
priori.
Ho sviluppato un software unico che, in base all'utente connesso, abilita o
impedisce alcune funzioni.
La struttura è la classica client-server 3 tired .. ho sviluppato un
componente server (exe Ax) e distribuito in DCOM ai client.
Devo dire che il tutto funziona molto bene (cioè la struttura regge
tranquillamente il carico di 10 utenti concorrenti e a breve dovrebbero
essere il doppio).
La logica, in generale, è stata quella di far lavorare il server (che nel
mio caso fa tutto .. web, mail, ftp, file sharing, SQL) il meno possibilie
.. o almeno affidargli i compiti più pesanti ma da svolgere nel minor tempo
possibilie.
Il componente server non distribuisce risultati (tipo non ho una classe che
restituisce un resultset) ma fornisce le impostazioni da mantenere sul
client durante la sessione : stringa di connessione, permessi di accesso
ecc. (il che non rispetta la struttura 3 tired)
Una classe (ancora in fase sperimentale) che reputo interessante è quella
relativa alla gestione delle concorrenze di operazioni.
In pratica ogni sessione client, registra e deregistra l'operazione corrente
e la "pubblica" agli altri, in modo tale che non possano essere effettuate
operazioni uguali o potenzialmente ambigue (un utente che cancella
dall'anagrafica un articolo mentre un altro lo carica a magazzino ecc..)
Non uso MTS perchè non lo conosco .. ma se non sbaglio dovrei rifare i
componenti server.
Per il discorso web .. purtroppo devo ancora fare tutto .. ma il progetto è
molto vasto e sono solo come un labrador :) -- nessun riferimento j. --
Saluti

 priori.
[CITAZIONE dal manuale di .NET SDK]
È possibile utilizzare .NET Remoting per abilitare la comunicazione tra
applicazioni diverse, sia che risiedano sullo stesso computer, su computer
diversi sulla stessa rete LAN o in reti molto diverse in varie parti del mondo,
persino se sui computer sono in esecuzione sistemi operativi diversi.
.NET Framework offre vari servizi quali il controllo di attivazione e durata,
nonché canali di comunicazione responsabili del trasporto di messaggi tra
applicazioni remote. I formattatori vengono utilizzati per codificare e
decodificare i messaggi prima che vengano inviati su un canale. Le applicazioni
possono utilizzare la codifica binaria se le prestazioni sono essenziali o la
codifica XML se è fondamentale l'interoperabilità con altri sistemi remoti.
[/CITAZIONE]
Per capire meglio ho visto come funziona, praticamente si piazza una dll
(preparata appositamente) in una cartella Virtuale in IIS
Nel programma (in un file .config) basta un riferimento a quella cartella
(
http://nomeserver/cartella
) e si può lavorare come se fosse una qualsiasi dll
con la differenza che viene eseguita sul server.
Tra l'altro in quel testo dice a chiare lettere di usare XML solo se c'è bisogno
di "l'interoperabilità con altri sistemi "
Se ho capito esattamente questa è la strada che dovrò seguire.
Lo so che non si potrebbe ma visto che Corrado Cavalli è molto informato su .NET
non è che per caso potrebbe illuminarmi/ci?
Grazie a tutti
Ciao

 ad ogni richiesta di dati (Connetti al DB, filtra e prepara il
dataset, ecc ecc).
Questo dipende da com'è strutturata la tua applicazione ed a che cosa
serve, IMHO in certi casi si potrebbe decidere di fare cache sul
middleware (aumenterebbe la spesa in ram, of course).
--
ale
www.sen.it