Come eseguire la sincronizzazione dei dati tra due applicazioni?

7

Il nostro cliente ha un'applicazione CRM (chiamiamola A ) e un'applicazione Windows personalizzata (VB.NET) (chiamiamola B ) che scrive e legge direttamente dal database CRM.

L'applicazione A viene utilizzata (principalmente) per gestire i clienti e i loro ordini. L'applicazione B viene utilizzata per gestire tutti i prodotti venduti dal nostro cliente.

Il nostro cliente ci chiede di creare un negozio online ( C ) utilizzando i WebForm di ASP.NET in modo che possano vendere i prodotti che gestiscono con B . Tutti i loro clienti e ordini devono essere presenti sia in A che in C .

Poiché B si prenderà cura di tutte le comunicazioni a A , dovrà trovare un modo per lasciare che B e C sincronizzino i loro dati.

Questo è qualcosa di relativamente nuovo per noi. Abbiamo fatto qualcosa del genere in passato, ma non mi piace il modo in cui è stato risolto lì:

When someone orders something in the webshop, C puts the order in an XML-file, zips the XML-file and sends it to an FTP-server in the network of A. A monitors the directory on the FTP-server, unzips each new file, processes the XML, creates a new XML-file, zips it and sends it to an FTP-server in the network of C. C monitors the directory on the FTP-server, unzips each new file and processes the XML.

In addition to this, each night A generates an XML-file for each table in its database, zips them and sends them to the FTP-server in the network of C. C unzips the files and lets SSIS process the XML-files to update the database of C.

I davvero non mi piace.

Ci devono essere altri modi, giusto? Probabilmente abbiamo bisogno di un'unica registrazione e sincronizzazione dei batch. Come viene affrontato questo solito? Servizi web? Qualcosa di personalizzato come Rhino ETL ? Qualcos'altro?

Aggiornamento: Sarebbe bello poter fornire una breve spiegazione su come la tecnologia che proponi viene in genere utilizzata e su come influisce sulle diverse applicazioni.

    
posta Kristof Claes 19.05.2011 - 10:57
fonte

3 risposte

2

Questo è pessimo, ho disegnato un diagramma per capire meglio la situazione:

                                   (Foobar: XML/FTP/ZIP)
 ------<-----------> (A)<-|----------------------------------------> (C)
 | db |                   |
 ------<-----------> (B)  |  

È abbastanza chiaro che "Foobar" deve in qualche modo accedere direttamente a db . Le due opzioni sono:

  • Ignora (A) e accedi direttamente a db
  • L'applicazione (A) ti fornisce l'API (servizio web, RESTful, SOAP, ecc.) per db

Credo che la prima opzione sia unlikey (ma parla con i tuoi clienti).

Questo lascia l'opzione due, il che significa che l'onere è su il tuo cliente per sviluppare l'API per consentirti di accedere al loro db .

Ovviamente puoi mantenere una transazione "offline" db che può essere utilizzata per archiviare transazioni quando la connessione è inattiva tra "Foobar" e quindi sincronizzare quando è di nuovo attiva , ma questo è facoltativo.

Spero che questo aiuti.

Modifica

Proponi questa soluzione:

 ------<-----------> (A)  |
 | db |                   |
 ------<-----------> (B)  |  
    ^                     |         (WEB SERVICE)
    |______________> (W)<-|------------------------------ (C) (ASP.NET Store Front)

Avranno bisogno di ospitare i servizi Web che espongono l'accesso al loro db . Questa è la pratica standard .

Ora chi crea i servizi web è per te e per il tuo cliente da decidere.

    
risposta data 19.05.2011 - 11:19
fonte
1

Hai considerato un'architettura orientata ai servizi? Non intendo una grande impresa. Intendo creare servizi RESTful che ti consentano di incapsulare parti del tuo dominio (clienti, prodotti, ecc.) L'uno dall'altro. In una SOA, non c'è sincronizzazione, c'è collaborazione tra servizi correttamente disaccoppiati.

L'invio di file XML compressi tramite FTP sarebbe stato semplicemente una terribile soluzione anti-soluzione thedailywtf se non fosse (incredibilmente) considerato ragionevole da persone reali da qualche parte.

    
risposta data 19.05.2011 - 11:05
fonte
0

È possibile utilizzare Windows Communication Foundation (WCF). Un punto pubblica le modifiche, gli altri punti si iscrivono e ricevono la notifica:

  • Il product manager (B) pubblica le modifiche al prodotto. Il negozio web (C) si abbona. B deve essere modificato in modo che attivi WCF durante il salvataggio. C deve essere modificato aggiungendo il gestore di eventi.
  • C pubblica informazioni di vendita. B sottoscrive.

Se hai bisogno di consegna garantita, dovresti esplorare Microsoft Message Queuing (MSMQ) come trasporto dati (WCF può usare HTTP, MSMQ, ecc. per il trasporto dati, puoi scegliere).

    
risposta data 19.05.2011 - 11:34
fonte

Leggi altre domande sui tag