DCSIMG
ConcurrencyMode = ConcurrencyMode.Single Is not always Single - I Love C#
Sign in | Join | Help

I Love C#

Eyal Vardi

ConcurrencyMode = ConcurrencyMode.Single Is not always Single

פורסם בתאריך Oct 19 2008, 12:46 PM על ידי Vardi | ישנם 0 תגובות

טעות נפוצה... כאשר מגדירים ServiceBehavior עם:
ConcurrencyMode  = ConcurrencyMode.Single

מצפים ל- Thread אחד שיכנס לשרות. המציאות קצת אחרת.

אםמגדירים ב- ServiceBehavior גם:
InstanceContextMode = InstanceContextMode.PerCall

מקבלים מצב שכל מופע יש לו Thread, ואז אם מנסים לגשת למשאב משוטף כמו למשל שדה static, הגישה לא בטוחה.

הדגמה ע"י קוד:

image

אנחנו מצפים שהשרות יהיה נעול למשך 20 שניות בגלל הגדרה של Single. אך לא כך הדבר עם מרצים את הקוד הבא בצד הלקוח על TCP.

image

יצירת מופע חדש של Proxy בכל Thread בצד הלקוח יוצרת Session חדש. התוצאה לא מקבליםשרות בטוח...

אם שומריםעל Proxy אחד כן מקבלים שרות בטוח..

image

הקוד להורדה.

רשימת תגובות

אין תגובות

שלח תגובה

(שדה חובה) 
(שדה חובה) 
(אופציונלי)
(שדה חובה) 

Enter the numbers above: