Ik zit al een tijd te kijken naar de CallContext maar ik krijg tegenstrijdige informatie. De 1 zegt dat je er niets moet storen als je met ASP.NET werkt terwijl de ander zegt dat het goed kan. Ik zou graag met de CallContext werken omdat je dan niet afhankelijk bent van het HttpContext object. Voor Windows applicaties zou dat dan inhouden dat je een reference moet leggen naar de System.Web.dll terwijl je die in de meeste gevallen helemaal niet nodig hebt.
Nu probeer ik de boel uit te testen maar naar mijn mening kan je dus veilig objecten saven in de CallContext. Ik heb de volgende setup: Ik heb 2 pagina's, een fast page en een slow page. De slow page bevat een timeout zodat ik de fast page kan blijven refreshen om threading issues te genereren. Ik heb de thread pool van ASP.NET verlaagd naar maximaal 2 worker threads en minimaal 2 worker threads om de kans op threading issues nog groter te maken.
De output doet precies wat ik verwacht, zelfs als ik als een gek loop te refreshen.
Zijn de bronnen die ik heb gebruikt fout of zit er iets niet goed in mijn test / zie ik iets over het hoofd?
Enkele bronnen:
http://piers7.blogspot.co...c-callcontext-and_02.html
http://integralpath.blogs...5/03/threadstatic_fu.html
http://forum.springframew...572&highlight=CallContext
Nu probeer ik de boel uit te testen maar naar mijn mening kan je dus veilig objecten saven in de CallContext. Ik heb de volgende setup: Ik heb 2 pagina's, een fast page en een slow page. De slow page bevat een timeout zodat ik de fast page kan blijven refreshen om threading issues te genereren. Ik heb de thread pool van ASP.NET verlaagd naar maximaal 2 worker threads en minimaal 2 worker threads om de kans op threading issues nog groter te maken.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| public partial class Fast : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Debug.WriteLine(String.Format("-Fast- Default name: \"{0}\"", Storage.Name)); Debug.Flush(); Storage.Name = "Fast"; Debug.WriteLine(String.Format("-Fast- Getting name: \"{0}\"", Storage.Name)); Debug.Flush(); } } public partial class Slow : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Debug.WriteLine(String.Format("-Slow- Default name: \"{0}\"", Storage.Name)); Debug.Flush(); Storage.Name = "Slow"; Debug.WriteLine(String.Format("-Slow- After set: \"{0}\"", Storage.Name)); Debug.Flush(); Thread.Sleep(5000); Debug.WriteLine(String.Format("-Slow- After timeout: \"{0}\"", Storage.Name)); Debug.Flush(); } } public class Storage { private const string KEY_NAME = "Name"; public static string Name { get { return CallContext.GetData(KEY_NAME) as string; } set { CallContext.SetData(KEY_NAME, value); } } } |
De output doet precies wat ik verwacht, zelfs als ik als een gek loop te refreshen.
code:
1
2
3
4
5
6
7
8
9
| -Fast- Default name: "" -Fast- Getting name: "Fast" -Slow- Default name: "" -Slow- After set: "Slow" -Fast- Default name: "" -Fast- Getting name: "Fast" -Fast- Default name: "" -Fast- Getting name: "Fast" -Slow- After timeout: "Slow" |
Zijn de bronnen die ik heb gebruikt fout of zit er iets niet goed in mijn test / zie ik iets over het hoofd?
Enkele bronnen:
http://piers7.blogspot.co...c-callcontext-and_02.html
http://integralpath.blogs...5/03/threadstatic_fu.html
http://forum.springframew...572&highlight=CallContext
[ Voor 0% gewijzigd door een moderator op 07-06-2007 14:29 . Reden: code=c#. Syntax highlighting FTW \0/ ]
PSN: Norfirin