Hej jag undrar om någon dykt på problemet när man har ett distribuerat system och vill att klienterna skall kunna uppdateras utan att bli nerstängda dvs att de uppdateras i bakgrunden, möjligtvis att någon funktionalitet i programmet stängs ner under en kort period. Systemet är tänkt att vara modulbaserat även på klienten samt ui (PRISM). Det är ett ganska komplicerat problem: Systemet är ett kassasystem som är tänkt att finnas hos flera olika kunder (små kunder) som går mot en centraliserad server. Jag skulle helst vilja slippa bakåtkompabiliteten hos servern och se till att kunderna hela tiden har den senaste mjukvaran. Det hade ju gått med clickonce liknande mjukvara. Isåfall så skulle man kunna utföra uppdateringar på natten och på morgonen tvinga kunden att starta om innan mjukvaran kan användas igen. Mjo, enklast är nog att ha en standardiserad uppdateringstid, eller att servern har bakåtkompabilitet. Enklaste vore val att ha en kontroll pa vilken version din klient har, sag att du har en heartbeat som klienten skickar till servern, och om klienten har version 1, och servern sager att senaste ar 1.2, sa kan du returnera ett fel till klienten att det finns uppdateringar till programmet och att det maste startas om. Distribuerat system, uppdatering under körning
Frågan är finns det något riktigt bra exempel på hur man kan byta ut/uppdatera .net assemblies under runtime distribuerat?Sv: Distribuerat system, uppdatering under körning
1) Du kan ladda in nya assemblies hur som helst, men att ladda ur gamla går inte utan att skrota en hel appdomain. Utan att starta om programmet så kommer programmet att över lite tid käka upp mycket minne. Dessutom kommer det säkert dyka upp problem med att finns flera versioner av samma klasser inladdade, och det blir lite allmänt strul på den fronten. Det går dock att ladda flera appdomains, och interagera mellan dem, men det finns massvis med saker att tänka på då.
2) Hur gör du om du t.ex. har ett GUI uppe, eller någonting som körs i bakgrunden? Om GUI:t har uppdaterats i den nya versionen så måste ju GUI:t startas om för att de ändringarna ska börja verka, samma sak med en bakgrundsprocess.
Har du lite mer information om ditt specifika problem? Går det att lösa på något annat sätt? Går det att isolera kritiska delar?Sv:Distribuerat system, uppdatering under körning
Ja som du säger så förväntade jag mig ingen enkel lösning. Tanken var att man kunde ladda om assemblies i UI. Minnet bör inte vara några större problem dock då kunden antagligen/oftast/blir tvingad att starta om för eller senare p.g.a. något annat antagligen.
Men antar att det enklaste är att tvinga kunderna att uppdatera på morgonen eller att ha bakåtkompabilitet i tjänsterna.Sv: Distribuerat system, uppdatering under körning
Sv: Distribuerat system, uppdatering under körning
Om du da anvander click-once sa kommer uppdateringen ske med automatik nar programmet startas....
- M