40 messaggi dal 20 novembre 2012
Buon giorno a tutti avrei bisogno di un consiglio, su un progetto che vorrei realizzare.
Ho 2 pc, su uno (server) ho installato MySql ed ho generato alcuni archivi, sul secondo (client) vorrei realizzare un'applicazione che quando c'è la linea (locale) fra i 2 pc, mi permetta di vedere alcuni dati dai DB ed inserirne altri nuovi, mentre quando non c'è linea, salvi in locale (sul client) i dati inseriti.
Quello che NON mi è chiaro è quale tecnologia utilizzare per interagire con i DB MySql del server, senza dover installare l'ambiente MySql sul client.
Una volta avevo realizzato, tramite ASP, delle funzioni che dal client accedevano direttamente ai DB MySql del server, però questo ha comportato che ho dovuto, come dicevo, creare l'ambiente MySql anche sul client, e questo non mi sembra corretto se voglio creare un ambiente che assomiglia ad un Internet vero.
Infatti le funzioni ASP le avevo realizzate (editate e compilate) sul client tramite VB 2010 Web.
Sono stato chiaro nell'esposizione del mio problema?
Grazie.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
sul client non è necessario installare l'ambiente MySql. Devi solo dotarti del connettore che ti permetterà di collegarti ad un server MySql da un'applicazione .NET (es. un'applicazione desktop WPF).
https://www.nuget.org/packages/MySql.Data/6.9.9

Ora bisogna capire come vuoi comportarti quando non c'è connettività tra client e server. Avrai bisogno di salvare i dati in locale ma forse installare il database server di MySql è eccessivo. Allora potresti salvare i dati su un db locale Sqlite, che non necessita di particolari installazioni. Basta dotarsi del suo connettore perché è un database file-based.
https://www.nuget.org/packages/System.Data.SQLite

Quando torna la connessione al database server MySql, rileggi le righe da Sqlite e le invii al server.

Nota: collegarsi direttamente ad un database server tramite la rete internet non è proprio ideale perché esponi i tuoi dati ad attacchi. Dovresti metterci in mezzo un webservice che è ospitato su un webserver tipo IIS che è più robusto e che ti permette di avere della logica che regola l'accesso ai dati.

ciao,
Moreno

Enjoy learning and just keep making
40 messaggi dal 20 novembre 2012
Innazitutto grazie della risposta.

Volevo chiederti un approfondimento: Quando torna la linea che tecnologia utilizzo per andare sul Server, forse un'applicazione ASP Net o Deskttop WPF (ho visto che la citavi), io però non l'ho mai usata, mi sai dare qualche consiglio su cosa è meglio?

Dove posso trovare qualche documento relativamente a WPF e Web Server IIS, cosi capisco meglio.
Grazie per tutto, ciao.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
faccio un passo indietro, partiamo dal principio: che tipo di applicazione vuoi realizzare?
Un sito web in ASP.NET o un'applicazione per windows? Sarà accessibile da internet oppure resterà confinata in una intranet aziendale?
Modificato da BrightSoul il 10 febbraio 2017 19.50 -

Enjoy learning and just keep making
40 messaggi dal 20 novembre 2012
Volevo realizzare un'applicazione per Windows, rimarrà in intranet, almeno per adesso. Ciao.😀
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Volevo realizzare un'applicazione per Windows


Ok, allora le tecnologie che puoi utilizzare per l'applicazione client sono:
  • Windows Forms, la tecnologia storica per realizzare applicazioni Windows;
  • WPF, un approccio più nuovo che è dotato di un potente meccanismo di binding e di layout dei controlli che ridurrà di molto il codice che dovrai scrivere.

Tra le due, scegli quella che reputi più oppotuno usare basandoti sulle tue conoscenze e sul tempo che puoi dedicare alla tua formazione.
Conoscendole entrambe, io personalmente preferisco usare WPF e non tornerei mai indietro a Windows Forms.
Se scegli per WPF, qui trovi la documentazione ma considera anche l'ipotesi di acquistare un libro.
https://msdn.microsoft.com/it-it/library/ms754130(v=vs.110).aspx

Anche lato backend bisogna fare una scelta:
  • Tenere giusto un database MySql, consapevole del fatto che tutta la logica di business la dovrai necessariamente mettere nel client. Questo significa che se un utente dell'applicazione viene a conoscenza della stringa di connessione a MySql, potrà aprire il database e vedere tutto quel che c'è dentro (e modificarlo senza restrizioni), bypassando così le regole e le autorizzazioni che puoi aver messo nell'applicazione client. Se sei molto disciplinato, puoi riuscire ad evitarlo creando un utente diverso nel database per ogni utente dell'applicazione client. Quindi ogni utente avrà una propria connection string che gli consentirà di avere accesso solo ad alcune viste e stored procedures. Questo approccio lo puoi valutare se non ti secca lavorare molto col codice SQL.
  • Inserire un webservice tra l'applicazione client e il database MySql, in cui inserirai della logica di autorizzazione non bypassabile dal client. Il database si troverebbe protetto dal webserver e quindi non sarebbe direttamente raggiungibile dall'applicazione client, che dialoga unicamente col webservice. Puoi usare un servizio web WCF o ASP.NET WebAPI a tale scopo.

La prima soluzione è la più facile. Sceglila se non ti importa che un utente possa (potenzialmente) modificare il contenuto del database a suo piacimento. Eventualmente puoi proteggere il db da MySql, agendo sugli utenti e sulle loro autorizzazioni,

La seconda soluzione ti richiederà di imparare a scrivere applicazioni ASP.NET. Se hai tempo a disposizione per fare formazione, è un percorso che io personalmente affronterei per la mia crescita professionale.

In entrambi i casi, quando cade la connettività dovrai memorizzare le operazioni compiute dall'utente su un database locale, ad esempio Sqlite che non richiede particolari installazioni sul client.
Quando torna la connessione, leggi dal db Sqlite e riprova ad inviarle al server (che si tratti di un Webservice o di MySql). E' una tecnica che si chiama "store and forward".
Dovrai prevedere un meccanismo di concorrenza ottimistica per evitare che i dati vadano inavvertitamente sovrascritti. Ad esempio:

- 1 febbraio: l'utente A fa una modifica all'anagrafica del cliente Pippo, ma non ha connettività e quindi le modifiche vengono scritte nel db locale Sqlite;
- 2 febbraio: l'utente B fa anche lui una modifica all'anagrafica del cliente Pippo e, siccome ha connettività, le modifiche vengono scritte direttamente nel db MySql;
- 28 febbraio: è passato un mese e nel frattempo l'utente B ha fatto varie altre modifiche. L'utente A si ricollega al client e, siccome c'è connettività, la sua modifica viene trasferita al server sovrascrivendo tutto il lavoro che l'utente B aveva fatto all'anagrafica del cliente Pippo. Questo disastro va evitato facendo in modo che il server rifiuti le modifiche se erano state apportate su una versione obsoleta dei dati.


Dovrai essere tu in grado di scegliere le tecnologie appropriate per questo particolare progetto. Eventualmente, almeno per la fase decisionale, affidati ad un consulente che ti sappia consigliare le tecnologie giuste valutando bene il budget di tempo e denaro che hai a disposizione.

ciao,
Moreno
Modificato da BrightSoul il 12 febbraio 2017 11.30 -

Enjoy learning and just keep making
40 messaggi dal 20 novembre 2012
Grazie mille per la Tua esauriente risposta, ciao.
40 messaggi dal 20 novembre 2012
Scusa volevo chiederti una precisazione, per il cliente farò un wpf che in mancanza di linea scrive in locale, il mio dubbio è quando c'è la linea oppure torna come faccio a scrivere su mysql? Cioè devo richiamare una dll scritta e compilata sul server?
(Per evitare problemi di compilazione visto che sul cliente ho installato solo il connettore) E'questo dubbio che ho,avendo poca dimestichezza con il richiamo fra 2 pc. Grazie.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.