טעות נפוצה... כאשר מגדירים ServiceBehavior עם:
ConcurrencyMode = ConcurrencyMode.Single
מצפים ל- Thread אחד שיכנס לשרות. המציאות קצת אחרת.
אםמגדירים ב- ServiceBehavior גם:
InstanceContextMode = InstanceContextMode.PerCall
מקבלים מצב שכל מופע יש לו Thread, ואז אם מנסים לגשת למשאב משוטף כמו למשל שדה static, הגישה לא בטוחה.
הדגמה ע"י קוד:
אנחנו מצפים שהשרות יהיה נעול למשך 20 שניות בגלל הגדרה של Single. אך לא כך הדבר עם מרצים את הקוד הבא בצד הלקוח על TCP.
יצירת מופע חדש של Proxy בכל Thread בצד הלקוח יוצרת Session חדש. התוצאה לא מקבליםשרות בטוח...
אם שומריםעל Proxy אחד כן מקבלים שרות בטוח..
הקוד להורדה.