Dynamisk opdatering af resursefiler i ASP.NET

I forbindese med at jeg skal lave et site der understøtter flere sprog, har jeg kastet mig ud i et forsøg på at bruge resursefiler til at styre sprog/tekster.

Dette er jo oplagt, da resurserne er let tilgængelige i koden og i views. Desuden er der en indbygget integration mellem MVC-frameworkets DataAnnotations og resursefilerne, som ligeledes er let tilgængelig.

Udfordringer

Alt er, indtil videre, fint og sprogstyringen kører som sådan smertefrit. Jeg har dog behov for at kunne vedligeholde teksterne via mit administrationssystem og dermed mindst at kunne opdatere eksisterende tekster uden at skulle bygge min applikation og uploade igen.

Uden de store problemer formår jeg, dynamisk, at få indlæst de forskellige sprogversioner af resursefilerne og få dem vist i mit administrationssystem. Men så opstår udfordringerne, idet jeg jo gerne vil gemme mine ændringer i resursefilerne igen. Selvom det også går relativt smertefrit, at gemme mine ændringer i resx-filerne, opstår der i den forbindelse dog lige et lille problem: Mit site holder op med at svare. Frustrerende!

Det viser sig så, at når resx-filen opdateres, så bygger sitet automatisk systemet igen og dermed bliver sitet "lagt ned" i den periode dette sker. I mit tilfælde, hvor jeg kører en Azure Emulator, lader det ikke til at sitet kommer på benene igen overhovedet, men det er ikke noget jeg er helt sikker på (manglende tålmodighed til at vente længe nok).

Denne genstart medfører desuden, at alt hvad der hedder session-data slettes, fordi applikationen genstartes. Dette kan være ret uhensigtsmæssig - med mindre der er opsat distribueret caching af session, eller man slet ikke benytter session-state (som mig) ;-)

En delvis løsning

Det kan tilsyneladende ikke lade sig gøre at undgå denne bygning af koden, med mindre man går på kompromis med nogle af de integrationer til resursefiler, der er rundt omkring i frameworket. Desværre har jeg ikke fundet en løsning der er 100% optimal, men noget der måske kunne bruges er "Updatable Resources", som omgår de File Change Notifications, som medfører af applikationen bygges ved ændringer i f.eks. resx-filerne.

Jeg er klar over, at artiklen er noget gammel (2009), men jeg har ikke kunnet finde noget information, der var mere up to date, ej heller nogle der omhandlede MVC 4, som jeg pt. arbejder i.

Jeg har fået opfattelsen af, at det ikke er muligt at lave sin egen resursefabrik, således den smertefrit integrerer med MVC-frameworkets DataAnnotation, på samme måde, som den indbyggede. Det undrer mig bare, at dette ikke skulle være muligt. Det er muligt, at dette problem ikke eksisterer længere (der er trods alt løbet meget vand under broen siden 2009!). Umiddelbart ville jeg jo forvente, at resurser, ligesom så mange andre elementer i .NET, var pluggable og dermed kunne udskiftes efter behov. Spørgsmålet er bare hvor man skal proppe sine ændringer ind...(?)

Se også

Rick Strahl's gennemgang af en hjemmestrikket ResourceProvider der henter resurserne fra en database:  http://www.west-wind.com/presentations/wwdbResourceProvider/

Comment