.Henrik


9. aug 2007 10:48

For de af jer der benytter jer af multithreading (eller er forberedt derpå via generelle komponenter) i forbindelse med ASP.NET applikationer - det være sig web applikationer eller XML web services - er det vigtigt at være opmærksom på, at det er en ret dårlig ide, at bruge thread local storage i denne sammenhæng, idet ASP.NET har det med af og til at skifte tråd undervejs i et request.

I stedet for thread local storage kan man med fordel benytte HttpContext. ASP.NET sørger for, at HttpContext er det den samme hen over et request - også selv om tråden ændres.

Vi løb ind i fejlen i forbindelse med noget transaktionshåndtering i vores Eifos framework. Da det var en ret dybt begravet - og i den konkrete sammenhæng også ret ligegyldig - teknikalitet, var det ikke helt åbenlyst, at finde frem til, hvad problemet egentlig var. Når System.Data.SqlClient.SqlTransaction.ZombieCheck smider en exception, er det ikke just TLS, der er det første, der rinder i hu. Til gengæld var løsningen forholdsvis simpel: Vi lavede vores egen thread local storage håndtering, som løste det potentielle problem en gang for alle på tværs af alle vores applikationer (jubii for at have et framework).



Abonnér på mit RSS feed.   Læs også de øvrige indlæg i denne Blog.