אני אתחיל בקרוב לפרסם כמה פוסטרים בנושא WCF, אז חשבתי שאולי כדאי להתחיל עם כמה דברים בסיסיים שכדאי מאוד להכיר.
כאשר נשלחת בקשה מהקליינט לשרת, נוצר בשרת thread שמטפל בבקשה.
כאשר יש סכנה של מצב בו thraed-ים יכולים לגשת למשאב משותף, יש לנו בעיה. אנחנו יכולים לפתור אותה ע"י כתיבת קוד בשירות שיבצע נעילות על המשאב, או שאנחנו יכולים להמנע מכך באמצעות הגדרת התכונה ConcurrencyMode
האופציות הקיימות לתכונה זו הם:
Multiple- ברירת המחדל. האובייקט של השירות שנוצר בשרת הוא multy-threaded. אנחנו צריכים לטפל בסנכרון בין ה thread-ים.
Single- האובייקט של השירות שנוצר בשרת הוא single threaded. כל הקריאות שיגיעו לשרת בזמן שהשירות עסוק- ימתינו עד סיום הטיפול בבקשה הראשונה, או עד timeout מסויים.
Reentrant- השירות הוא single אבל אם מתבצעת קריאה מהשירות לשירות חיצוני אז הוא מאפשר ל thread חדש להיכנס לשירות. זה נועד למנוע מצב של deadlock.
התכונה מוגדרת מעל הגדרת השרות. לדוגמא:
כאשר נשלחת בקשה מהקליינט לשרת, נוצר בשרת thread שמטפל בבקשה.
כאשר יש סכנה של מצב בו thraed-ים יכולים לגשת למשאב משותף, יש לנו בעיה. אנחנו יכולים לפתור אותה ע"י כתיבת קוד בשירות שיבצע נעילות על המשאב, או שאנחנו יכולים להמנע מכך באמצעות הגדרת התכונה ConcurrencyMode
האופציות הקיימות לתכונה זו הם:
Multiple- ברירת המחדל. האובייקט של השירות שנוצר בשרת הוא multy-threaded. אנחנו צריכים לטפל בסנכרון בין ה thread-ים.
Single- האובייקט של השירות שנוצר בשרת הוא single threaded. כל הקריאות שיגיעו לשרת בזמן שהשירות עסוק- ימתינו עד סיום הטיפול בבקשה הראשונה, או עד timeout מסויים.
Reentrant- השירות הוא single אבל אם מתבצעת קריאה מהשירות לשירות חיצוני אז הוא מאפשר ל thread חדש להיכנס לשירות. זה נועד למנוע מצב של deadlock.
התכונה מוגדרת מעל הגדרת השרות. לדוגמא:
[(ServiceBehavior(ConcurrencyMode=Concurrency.Reentrant]
Public class SomeService: ISomeService
תהנו!


