39 messaggi dal 17 novembre 2011
Buongiorno, vorrei sottoporre alla comunità un problema progettuale.
In sintesi ho una larga base di clienti con installato un software gestionale windows desktop, ho recentemente realizzato una applicazione web in Asp.net mvc per consentire l'accesso alla base dati anche tramite web (sia pc che dispositivi mobili). La soluzione attuale prevede che il sito web debba essere installato sul server del cliente (sottolineo che ogni componente di installazione della applicazione desktop di riferimento è presente sempre sul server del cliente, base dati inclusa). Questo comporta inevitabilmente problematiche di installazione vista l'eterogeneità dei sistemi operativi, dell'hardware e di tutti gli elementi correlati. Il quesito è il seguente: quale è la soluzione tecnica migliore per consentire di avere il database e gli altri componenti della applicazione desktop installati presso il cliente, ma il sito web installato presso un fornitore di hosting o eventualmente sui miei server aziendali ? Ringrazio sin d'ora per ogni suggerimento. Cosimo.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Cosimo,
il mio parere è che sia meglio che l'applicazione MVC risieda su un server del cliente. L'installazione non sarà complicata se consideri che IISExpress è disponibile per molti sistemi operativi, incluso Windows Server 2003 e Windows XP. Convive fianco a fianco con altre versioni di IIS, quindi questo mi sembra il minore dei problemi.

Installarla da te o presso un hosting provider non ti darebbe particolari vantaggi, poiché dovresti comunque raggiungere il database remoto, che si trova chiuso all'interno della tua azienda cliente, magari dietro un firewall.
Gli utenti dell'applicazione web si lamenteranno con te della lentezza, causata non dai tuoi server ovviamente, ma dalla inevitabile latenza di rete che peggiora le prestazioni durante l'accesso ai dati.

Se installi tutto presso il cliente, coloro che si trovano in rete locale avranno tutt'altra esperienza d'uso (migliore perché applicazione e db si trovano entrambi in rete locale).

Il personale che lavora al di fuori dell'azienda potrà collegarsi via VPN ed accedere all'applicazione web col suo indirizzo di rete locale.
Se la connessione VPN è lenta, questo non ti riguarda perché sarà il cliente stesso a doversi dotare di sufficiente banda e degli opportuni apparati di rete.

ciao,
Moreno
Modificato da BrightSoul il 01 novembre 2014 14.51 -

Enjoy learning and just keep making
39 messaggi dal 17 novembre 2011
Grazie come sempre per la tua risposta, in pratica tu mi suggerisci di lasciare tutto così come è. Posso convenire con te circa le osservazioni che hai formulato, anche se mi domando a cosa possano servire le più recenti soluzioni in termini di servizi web se poi non è possibile progettare un deployment distribuito anche geograficamente (database su un server a milano, servizi a roma e sito a palermo :) ). Il punto è che vorrei superare le problematiche di installazione inevitabili vista la varietà delle macchine\reti\configurazioni dei clienti (tu mi insegni essere una vera babele). Inoltre vorrei avere sotto controllo l'applicazione per poterla aggiornare facilmente senza collegarmi in teleassistenza dal cliente. Davvero non c'è allo stato dell'arte un modello che possa venirmi in contro ? Buona giornata.
39 messaggi dal 17 novembre 2011
In particolare mi riferisco a Asp.net Web Api, qual è il loro effettivo scenario di utilizzo ?
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Cosimo,

cosimo.cinefra ha scritto:

mi domando a cosa possano servire le più recenti soluzioni in termini di servizi web se poi non è possibile progettare un deployment distribuito anche geograficamente

Sì, le tecnologie che rendono possibile il deployment distribuito ci sono. Tuttavia, ogni soluzione va esaminata in base al contesto.

Se ogni tua azienda cliente avesse il proprio ufficio costruito sopra la dorsale, e disponesse di 4Mb di banda simmetrica dedicata, allora forse ti avrei consigliato di creare un WCF Data Service per esporre il loro database nel web. Se il loro firewall non avesse consentito di esporre il servizio, avresti comunque potuto consumarlo da remoto per mezzo della funzionalità di Relay del Service Bus di Azure.
http://azure.microsoft.com/it-it/documentation/articles/service-bus-dotnet-how-to-use-relay/

Nonostante ti abbia descritto una situazione ideale, siamo comunque dovuti ricorrere a due tecnologie: un servizio WCF e il bus relay di Azure. Lo abbiamo fatto non per il puro gusto di usarle, ma per risolvere due problemi:
  • Il database non deve essere esposto a rischi, e perciò lo proteggiamo dietro un servizio WCF, che si occupa anche di autenticare gli utenti ed attuare delle logiche di business.
  • Se l'hardware o il contratto di connettività dell'azienda cliente non consentono di esporre una macchina su un indirizzo IP pubblico, dobbiamo avvalerci di un servizio come il Relay del Service Bus di Azure, altrimenti non riusciremmo a collegarci.

Ricorrere a queste due tecnologie ha aggiunto complessità (e costi) al sistema. Prima di procedere, dovremmo valutare se esistono soluzioni più semplici.

Adesso consideriamo il caso reale: non tutte le aziende dispongono di una connessione HDSL con banda dedicata. Anzi, a volte si collegano con una ADSL residenziale. L'ultimo miglio è in rame, e la centralina nelle ore di punta è satura di traffico. A volte possono verificarsi dei disservizi che impediscono agli impiegati di collegarsi ad internet per lunghe ore, perché manca una seconda linea per la fault tolerance.

Per me questo è un terreno abbastanza accidentato. Non mi azzarderei a costruire un'applicazione - ospitata presso la mia struttura - che dipenda da un database servito su un collegamento poco affidabile come quello. Chissà con quali latenze di rete, per giunta. Rischierei di rovinare l'immagine del mio servizio, perché quando miodominio.com non risponde, il cliente penserebbe che il problema sia mio. "A noi tutti gli altri siti internet funzionano", risponderebbero. Invece il problema era che la notte prima gli si era spento il database server per mancanza di corrente.

Se il database fosse un SQL Azure ospitato presso i datacenter di Microsoft, allora la situazione sarebbe diversa perché avrei la certezza che il servizio è affidabile e in mano ad esperti, e che il Service Level Agreement mi promette un uptime del 99,95%. Anche il client ovviamente dovrà dotarsi di una connettività adeguata (e la banda in download è più economica di quella in upload) ma, se non lo facesse, la causa del problema sarebbe subito evidente: lentezza o disservizi riguarderebbero ogni altro sito o servizio online.

Quindi, anche se è certamente possibile esporre il db sul web, io ti direi che subiresti inutilmente i problemi di connettività del cliente. Se l'applicazione è ospitata da te, puoi anche mettere un avviso grosso così quando il db non è raggiungibile ma sta di fatto che gli impiegati non potranno lavorare finché il problema non viene risolto (e chiameranno te per dargli assistenza).
Se l'applicazione è dal cliente, invece, la connessione ad internet non sarà necessaria e per lo meno quelli che si trovano in rete locale potranno lavorare anche durante i disservizi.

cosimo.cinefra ha scritto:

In particolare mi riferisco a Asp.net Web Api, qual è il loro effettivo scenario di utilizzo ?

ASP.NET WebAPI lo usi quando vuoi realizzare una API RESTful, consumata o da una tua applicazione o dalle applicazioni web di terzi. E' molto interoperabile, quindi può essere consumata da qualsiasi linguaggio o dispositivo in grado di inviare richieste HTTP. Trovi un'introduzione in questo articolo di Andrea Colaci.
http://www.aspitalia.com/articoli/asp.net-mvc/scrivere-servizi-rest-asp.net-web-api.aspx

Se sei soltanto tu a controllare sia il client che il servizio (entrambi .NET), ti consiglierei di usare WCF, che ti permetterebbe anche di scambiare dati con un protocollo binario, più efficiente.

Ad ogni modo, WebAPI o WCF non ti risolvono il problema di connettività cui abbiamo parlato, perché le questioni legate alla rete sono ad un livello più basso nello stack.

cosimo.cinefra ha scritto:

vorrei superare le problematiche di installazione inevitabili vista la varietà delle macchine\reti\configurazioni

Ripropongo IISExpress. Le piattaforme supportate sono da XP a Windows 8. E' probabile che vada bene la stessa macchina in cui il gestionale è stato installato. Se il cliente vuole acquistare o dispone già di una versione di Windows server 2008 o superiore, allora andrà anche meglio e tu potrai cavartela con un deploy package da consegnare all'amministratore.

cosimo.cinefra ha scritto:

Inoltre vorrei avere sotto controllo l'applicazione per poterla aggiornare facilmente senza collegarmi in teleassistenza dal cliente.

Per esempio, puoi farlo così:
http://haacked.com/archive/2011/01/15/building-a-self-updating-site-using-nuget.aspx

Le difficoltà che hai citato, prese singolarmente, non sono abbastanza preoccupanti da dover giustificare lo spostamento dell'applicazione web presso altri provider. O sposti anche il database, e ti metti a fare software-as-a-service, oppure lasci tutto dov'è (secondo me).

Senti anche altri pareri, soprattutto quello di un consulente dato che stai prendendo delle decisioni che riguardano il tuo business. A me interesserebbe sapere cosa ne pensa un amministratore di sistema (io sono uno sviluppatore).


ciao,
Moreno
Modificato da BrightSoul il 04 novembre 2014 20.10 -

Enjoy learning and just keep making

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.