Beste mensen,
Ik heb hier in mijn applicatie geconcludeerd dat een bepaalde functie van mij niet threadsafe is, maar kan het niet verklaren.
Kan iemand mij helpen?
korte situatieschets:
ik heb een asp.net app, met daarin een aantal pagina's. Op verschillende plekken in de applicatie doe ik iets met de username van de ingelogde gebruiker.
De gebruiker logt in in IIS (windows auth, gebeurd automagisch) en ik wil de gebruikersnaam van de in IIS al geauthenticeerde gebruiker laten zien of gebruiken.
Ik heb daarvoor een volgende constructie:
en een aantal pagina's gebruiken die functie dus dmv:
Nu heb ik de methode omgebouwd zodat het een instance method is geworden en dan zie ik dat het goed gaat.
Echter kan ik niet beredeneren waarom het fout zou moeten gaan.
De Regex.Replace had ik al opgezocht is immutable (dus threadsafe)
Verder zou het natuurlijk best kunnen dat er een contextswitch is ergens in die code, maar ik bevraag telkens de HttpContext.Current en die zou (zoals ze dat leuk zeggen) effectively threadsafe moeten zijn.
Ik sla bij mijn weten de inhoud van die httpcontext.current niet op, zodat een andere thread ermee vandoor kan gaan.
Wat doe ik fout?
Ik heb hier in mijn applicatie geconcludeerd dat een bepaalde functie van mij niet threadsafe is, maar kan het niet verklaren.
Kan iemand mij helpen?
korte situatieschets:
ik heb een asp.net app, met daarin een aantal pagina's. Op verschillende plekken in de applicatie doe ik iets met de username van de ingelogde gebruiker.
De gebruiker logt in in IIS (windows auth, gebeurd automagisch) en ik wil de gebruikersnaam van de in IIS al geauthenticeerde gebruiker laten zien of gebruiken.
Ik heb daarvoor een volgende constructie:
C#:
1
2
3
4
5
6
7
8
9
10
11
| public static class Helper { public static GetUserName() { if (HttpContext.Current.User != null) { return Regex.Replace(HttpContext.Current.User.Identity.Name, @"(.*?\\)?(.*?)", "$2"); } return ""; //hier is IIS neit goed geconfigt } } |
en een aantal pagina's gebruiken die functie dus dmv:
C#:
1
| string s = Helper.GetUserName(); |
Nu heb ik de methode omgebouwd zodat het een instance method is geworden en dan zie ik dat het goed gaat.
Echter kan ik niet beredeneren waarom het fout zou moeten gaan.
De Regex.Replace had ik al opgezocht is immutable (dus threadsafe)
Verder zou het natuurlijk best kunnen dat er een contextswitch is ergens in die code, maar ik bevraag telkens de HttpContext.Current en die zou (zoals ze dat leuk zeggen) effectively threadsafe moeten zijn.
Ik sla bij mijn weten de inhoud van die httpcontext.current niet op, zodat een andere thread ermee vandoor kan gaan.
Wat doe ik fout?
This message was sent on 100% recyclable electrons.