Applicazione C# desktop - Db centralizzato on line

di il
10 risposte

Applicazione C# desktop - Db centralizzato on line

Ciao a tutti, mi occupo da parecchio tempo di sviluppo software in C# ed ho sempre avuto a che fare con installazioni singole o distribuite all'interno di una singola LAN con un db server comune.
Mi sono buttato su NHibernate come persistence manager (perchè Entity Framework era ancora acerba come soluzione).
Adesso avrei bisogno di far accedere le mie applicazioni desktop ad un db centralizzato su Internet.
Le possibilità che mi sono venute in mente riguardano un db server su cloud (ma piuttosto costoso rispetto alle richieste del cliente...) o la scrittura di web service in php da ospitare su un normale hosting (tipo Aruba) (che però non saprei come far interagire con NHibernate o altri persistence manager).
Quali altre ipotesi ritenete valide? Consigli? Al momento mi trovo piuttosto spaesato...

10 Risposte

  • Re: Applicazione C# desktop - Db centralizzato on line

    Beh! In realta' puo' anche fare anche di peggio.

    Se hai la possibilita' di installare un modulo custom sul server HTTP remoto, puo implementare un TUNNEL HTTP: converti il traffico TCP puro in traffico HTTP verso il server Web, e da li il tuo modulo lo riconverte in traffico TCP verso il DB (locale per lui, remoto per te).

    Considera che una connessiione HTTP e' sempre una connsessione TCP, che con gli opportuni accorgimenti puoi mantenere aperta quanto tempo vuoi, e ci puoi far passare quello che vuoi.

    I problemi possono sorgere se dall'altra parte c'e' un firewall che non permette traffico binario.
    Ma anche qui' c'e' ampio spazio per svicolare al problema.
  • Re: Applicazione C# desktop - Db centralizzato on line

    Ciao ci sono diverse soluzioni che puoi adottare ma se il server non è tuo e ti poggi su hosting esterno non puoi fare quello che ti pare.
    Se il server fosse tuo potresti usare l'approccio VPN per il tunnelling e far accedere le applicazioni direttamente a SQL Server remoto.

    La soluzione migliore è il Web Service, c'è poco da fare, inoltre ti svincola anche da problemi legati ai firewall.

    Riguardo l'hosting:
    1. ti serve un ip dedicato per installare un certificato digitale (anche economico) per usare il protocollo HTTPS altrimenti rischi lo sniffing dei dati che passano tra i client e il web server.
    2. ti serve una procedura e repository di backup per il database.
    3. l'hosting economico in genere ti da poca banda passante e meno è più risulteranno inchiodate le applicazioni client. Le isole dati XML che scambi possono anche essere consistenti, inoltre considera di moltiplicare il consumo di banda in caso di richieste concorrenti qualora l'applicazione sia multiutente.
    4. potrei continuare ma le prime 3 sono le più importanti
  • Re: Applicazione C# desktop - Db centralizzato on line

    Grazie per le risposte velocissime!
    Purtroppo, sempre per problemi di budget del cliente, devo appoggiarmi su un server non dedicato, ma di quelli che stanno dietro un normale contratto di hosting web (perciò citavo Aruba), quindi niente moduli custom o tunnel VPN (purtroppo).
    In merito al supporto HTTPS ci avevo pensato proprio per i motivi che Toki ha evidenziato
    Per il backup, le web farm di solito se ne occupano ma sono abituato a prevedere sui client una procedura di backup in locale anche quando lavoro in LAN.
    Il sistema sarebbe assolutamente multiutente, con 4 o 5 postazioni di inserimento/consultazione dati.

    Visto che la soluzione webservice è pesante dal punto di vista del consumo di banda, se mi implemento (idea pazza?) una cosa poco standard ma economica in termini di traffico: una pagina php (simil webserver ma senza tutti i contorni xml) che invia (dietro autenticazione e filtro del tipo di query effettuabili) direttamente al server mysql le query che gli mando dal programma? Una cosa tipo le "Facebook Query Language (FQL)": https://developers.facebook.com/docs/technical-guides/fql/
    e mi restituisce in xml semplice (sempre senza i tag specifici del WSDD) i risultati che poi mi recupero nell'applicazione?
    Che ne dite? Vulnerabilità o problemi?

    E soprattutto... altre soluzioni visti i punti qui sopra?
    Grazie ancora.
  • Re: Applicazione C# desktop - Db centralizzato on line

    Problema Hosting:
    IProgrammatori fornisce servizi di hosting professionale per servizi specifici, come nel tuo caso.
    - Banda fino a 80 Mbit/s di picco, backup geolocalizzato, https, filtro per l'accesso solo da ip aziendali autorizzati, ecc
    - Assistenza tecnica qualificata (me ne occupo io stesso)
    Eventualmente contattami in privato per dettagli

    Web Service:
    Per ridurre il traffico dati puoi utilizzare Web Services basati su risposte JSON e non XML/SOAP.
    Cmq per stabilire cosa è meglio implementare devi analizzare la mole di dati che passa tra le chiamate al servizio, le tue competenze in quest'ambito, lo sforzo di realizzazione, ecc.
  • Re: Applicazione C# desktop - Db centralizzato on line

    Grazie ancora.
    Valuterò con attenzione la possibilità di utilizzare i web services, visto che le altre soluzioni sono costose.
    In merito alla mole di dati, non credo sia elevatissima ma comunque degna di considerazione se si immaginano almeno 50/70 consultazioni/ora per ogni client, per 5 client, durante le 8 ore lavorative.

    Pensavo, a dire il vero, di evitare di implementare un servizio per ogni funzione del client che mi serve, sviluppando un unico servizio che accetti in input una query sql e restituisca una risposta sotto forma di lista di stringhe.
    In questo modo, lavorando su un solo oggetto server php potrei dedicarmi di più allo sviluppo client.
    Ovviamente implementando tutte le varie sicurezze del caso (sql-injection, autenticazione, ssl, etc...)
    Secondo voi è una soluzione accettabile? O me la bocciate completamente?

    Ad ogni modo, se il cliente accetterà il lavoro e mi chiederà di sviluppare il progetto vi terrò informati.
    Haxl
  • Re: Applicazione C# desktop - Db centralizzato on line

    haxl ha scritto:


    In merito alla mole di dati, non credo sia elevatissima ma comunque degna di considerazione se si immaginano almeno 50/70 consultazioni/ora per ogni client, per 5 client, durante le 8 ore lavorative.
    Quando utilizzi un web service come strato tra il client e il database devi calcolare bene i tempi di risposta percepiti lato utente, specie se si tratta di un gestionale usato intensamente.

    haxl ha scritto:


    Secondo voi è una soluzione accettabile? O me la bocciate completamente
    Non te la boccio in quanto è comunque una soluzione al problema e da quanto hai accennato abbatte i tempi di sviluppo e quindi anche i costi.
    Come output vedi che non la risolvi con una lista di stringhe. Ti serve almeno un array bidimensionale di stringhe, inoltre devi predisporre la restituzione dell'informazione relativa all'esito dell'operazione e relativa descrizione... altrimenti se c'è un errore non sai di cosa si tratta.

    A proposito perchè parli di web service PHP? non stavi sviluppando l'applicazione in C#?
  • Re: Applicazione C# desktop - Db centralizzato on line

    Ciao ancora, la latenza sulla grafica del gestionale mi preoccupa ma il cliente deve essere informato di ciò in considerazione che sta lavorando sulla Rete.
    Per il resto, pensavo di ottenere come risposta sempre un qualche formato standard che sia SOAP o JSON con tutte le info di cui accennavi tu, anche per decodificarle in modo più efficace con le apposite funzioni che C# dovrebbe avere,

    Parlo di web service PHP perchè l'host è linux per cui svilupperò la parte web con php come interfaccia ad un database mysql e la parte client in C# per windows.

    Sarebbe stato tutto più semplice se avessi potuto sviluppare un'intera web application in PHP, direttamente fruibile da browser ma il problema è che il client deve gestire un lettore di codici a barre "real time" nel senso che non emula la tastiera ma una seriale in quanto deve poter leggere i codici a barre anche quando l'applicazione non ha il focus (il cliente possiede già un gestionale locale che funziona in tale modo e non vuole cambiare abitudini ed il barcode reader ce l'ha già).

    Spero di essere stato un po' più chiaro.
    Haxl
  • Re: Applicazione C# desktop - Db centralizzato on line

    Si si adesso è tutto chiaro.
    Usa JSON che consuma meno banda rispetto a SOAP.
    Il server linux quanti Mbit/s di banda ha?
  • Re: Applicazione C# desktop - Db centralizzato on line

    Toki ha scritto:


    Il server linux quanti Mbit/s di banda ha?
    Bella domanda... senza citare direttamente il fornitore di hosting, leggevo sul suo sito che tutta la webfarm ha una banda di 250MBps, ovviamente suddivisa. Tutti i vari siti che ospito sui loro server devo dire che difficilmente hanno problemi di lentezza. Come dicevo l'altra volta, il cliente dovrà mettere in conto che sta lavorando on line per cui dovrà aspettarsi qualche rallentamento in alcuni casi peggiori. Ad ogni modo, considera le portate di lavoro che citavo l'altra volta, ovvero che il traffico sul gestionale non sarà eccessivamente intenso.

    Proprio oggi stavo anche valutando l'ipotesi di fargli installare un serverino in una delle sue sedi, se fosse in possesso di indirizzo ip statico (a me Tiscali ad esempio lo offriva per contratto) anche se paradossalmente si potrebbe rischiare di avere anche latenze maggiori, a causa delle pessime qualità delle nostre adsl soprattutto (ovviamente) in upload...

    Ciao
  • Re: Applicazione C# desktop - Db centralizzato on line

    haxl ha scritto:


    a causa delle pessime qualità delle nostre adsl soprattutto (ovviamente) in upload...
    assolutamente d'accordo, inoltre considera possibili interruzioni di corrente, connessione internet, ecc.
    Meglio poggiarsi su un servizio di hosting professionale.
Devi accedere o registrarti per scrivere nel forum
10 risposte