Jag har två fristående applikationer som använder samma databas. Jag vill att de ska utbyta information till varandra då någon har uppdaterat databasen. Tex app1 informerar app2 att app1 lägger in en ny post i databasen och vice versa. Vilken är den bästa lösningen? Tony, Tack, ska läsa in mig på förslagen. Som jag misstänkte så finns det många varianter. Det hade varit fint med lite tips om en bra lösning. Det är inte mycket information som ska skickas endast att typ ett "event" har inträffat. Tony, det beror väl också lite på vad du använder för databas. Tex så om jag inte minns helt fel så har Firebird (databasen, inte webbläsared som förr hette så) stöd för nån sorts events. Det är inte databasen som ansvara för informationsöverföringen utan det ska ske på applikationsnivå. Bästa lösningen är nog att se över designen/aritekturen och se om du inte kan bryta ut din dataaccess att placeras som en central services. Typ en SOA lösningen där servicen har som ansvara att sköta alla kommunikation mot databasen. Nu tänker många att det är onödigt att använda sig av webservices för detta, men en SOA lösning måste inte bygga på webservices utan kan mycket väl bygga på både Remoting eller DCOM/COM+ om man vill det istället. Det finns en del, både gratis och kommerciella, jag har skrivit min egen (väldigt enkel) som inte kan allt som de kommerciella men som täcker mina behov. Kul samt lärorikt. NPersist www.npersist.com väldigt trevlig och enkelarbetad.Kommunikation mellan applikationer
Sv: Kommunikation mellan applikationer
Hmm "bästa lösningen" är svårt att säga då det finns många metoder för att göra detta. Några exempel på hur man kan göra är
* Använd sockets för att skicka meddelande (kan vara tcp/ip eller udp)
* Sätt upp och använd en meddelande kö med MSMQ (Microsoft Messaging Queue)
* Använd MailSlot (kommer kräva p/Invoke till Win32). Beskrivningen på en MailSlot är
"A mailslot is a mechanism for one-way interprocess communications (IPC). Applications can store messages in a mailslot. The owner of the mailslot can retrieve messages that are stored there. These messages are typically sent over a network to either a specified computer or to all computers in a specified domain. A domain is a group of workstations and servers that share a group name.
* Använd Pipes (kommer kräva p/Invoke till Win32). Beskrivningen på Pipes är
"A pipe is a section of shared memory that processes use for communication. The process that creates a pipe is the pipe server. A process that connects to a pipe is a pipe client. One process writes information to the pipe, then the other process reads the information from the pipe. This overview describes how to create, manage, and use pipes."
* Använd en delad fil. Lägg en fil på ett, för dina program, känt ställe och övervaka den för förändringar med hjälp av en FileSystemWatcher (finns en klass med det namnet i .NET). På så sätt kan man trigga en förändring.
* Använd .NETs inbygga Inter Process Communication (IPC) mekanism som heter Remoting
* Skicka custom windows meddelande mellan applikationerna..
Det finns fler sätt att göra det på, men jag är övertygad att något av de ovanstående metoderna kommer uppfylla dina behov.Sv:Kommunikation mellan applikationer
Tanken är att man så småningom även ska kunna uppdatera databasen från webben. När databasen är uppdateras ska applikationerna hämta ny information från den. Uppdateringarna kommer att ske oregelbundet dvs de kan komma tätt eller dröja flera timmar mellan dem.Sv: Kommunikation mellan applikationer
Om det är två .NET applikationer så hade jag definitivt tittat på remotingSv: Kommunikation mellan applikationer
Sv:Kommunikation mellan applikationer
Sv: Kommunikation mellan applikationer
Mitt förslag till lösning blir alltså att bygga en DataAccess service som ligger som en egen centralt placerad service på en maskin någonstans (Windows NT Service är ett utmärkt ställe att hosta den i). Denna service har sedan en del event som alla dina applikationer kan lyssna på, typ UpdatetDataEvent, InsertedDataEvent och/eller DeletedDataEvent. Så länge du är inom samma nätverk så är .NET Remoting vägen att lösa det på, då den har bra stöd för event hanteringen.
Om du sedan använder dig av en O/R Mapper i din dataaccessservice så blir det enkelt för dig att bygga i en caching mekanism i servicen så du spara lite prestanda mot databasen, samt att du faktiskt får en bättre prestanda över Remoting istället för att använda dig av DataSet/DataTables. Datareader är en NO NO att skicka vidare över remoting.
Om du inte kan bryta ut din dataaccess från de olika applikationern så skulle jag nog implementera löst kopplade event i COM+ för att lösa problemt eftersom du då inte får en stark bindning mellan dina 2 applikationer.
- MSv:Kommunikation mellan applikationer
Låter som en bra lösning, det är kanske så det ska gå till.
Är den någon som har ett förslag på en bra O/R Mapper.Sv: Kommunikation mellan applikationer
Men vilken som är bäst vet jag inte, tyvärr..Sv:Kommunikation mellan applikationer