WCF 4 (Windows Communication Foundation) for Beginner – part 14

28 במרץ 2011

תגיות: ,
תגובה אחת


 



ללמוד WCF 4 פרק 14 – היכרות עם האופציות להגדרת המופעים של ה – Services, ועבודה עם כמה תהליכים במקביל.


 

 

נושאים בפרק 14.


היכרות עם הגישות השונות של יצירת מופעים.

כיצד לאפשר PerSession גם ב – http.

היכרות עם הגישות השונות לעבודה עם כמה קריאות לשירות בו זמנית.

 

 

היכרות עם הגישות השונות של יצירת מופעים.


כשכותבים שירות אנחנו יכולים להחליט באיזה מוד נעבוד, כלומר – כשמישהו יפנה ל – host וירצה להפעיל את אחד מהמתודות, ה – host יוכל להחליט:

 

 

האם לייצר מופע עבור כל קריאה – כלומר – בכל פעם שמישהו יפעיל מתודה יווצר מופע חדש של ה – service, אופצייה זאת נקראת PerCall.

 

אופציה נוספת היא שלכל Session יווצר מופע של השירות – אופציה זאת נקראת PerSession. (כל Session הכוונה לכל Proxy, אם הלקוח יוצר מופע חדש של Proxy עבור כל קריאה, ייוצר מופע חדש של השירות עבור כל קריאה)

 

אופציה נוספת היא שלכולם יש מופע אחד בלבד (Singelton) אופציה זאת נקראת Single.

 

 

ההגדרה מתבצעת בעזרת הגדרה של ServiceBehavior על השירות.

 



[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]


 


יש משמעות לבחירה בכל אחד מהמודים האפשריים, כמו ההגדרה של משתנים שישמרו את הערך שלהם ועוד. (צריך לזכור לא לשמור יותר מידי מידע עבור כל משתמש)

 

 

כיצד לאפשר PerSession גם ב – http.


לא כל הפרוטוקולים תומכים ב – session, לדוגמא http לא תומך, כדי לאפשר בכל זאת Session בפרוטוקול http, נצטרך להגדיר ב – binding שיעבוד עם reliableSession מה שיגדיר שכל request חייב להגיע לשרת ואי אפשר לאבד אותו (כמו שיכול לקרות ב – http) אפשרי להגדיר אותו במידה וההודעות נשלחות ב – SOAP, לדוגמא

 



<wsHttpBinding>


  <binding>


    <reliableSession enabled="true" ordered="true"/>


  </binding>


</wsHttpBinding>


 

 

היכרות עם הגישות השונות לעבודה עם כמה קריאות לשירות בו זמנית.


אחד הדברים שעובדים מאוד צמוד להחלטה על ה – InstanceContextMode זה גם ההחלטה האם מאפשרים עבודה עם כמה תהליכים במקביל.

 

אפשר להגדיר שאסור לעשות קריאות אסינכרוניות (ברירת המחדל), כלומר קריאה למתודה יכולה להתחיל לעבוד רק עם הקריאה הקודמת הסתיימה, כמובן שאם נגדיר PerCall אין משמעות לא לאפשר קריאות אסינכרוניות מכיון שכל קריאה יוצרת מופע חדש, אבל במידה והגדרנו PerSesson לקוח אחד לא יוכל להפעיל כמה קריאות בו זמנית, ואם הגדרנו Single אף אחד לא יוכל להפעיל מתודה אלא אם כן הקריאה הקודמת הסתיימה.

 

כדי לאפשר בכל זאת קריאות אסניכרוניות נוכל להגדיר את ConcurrencyMode

 



[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]


 


חשוב לשים לב ש – WCF לא מגדיר שום מנגנון לסינכרון ואנחנו צריכים לוודא שהקוד שלנו הוא thread safe.

 

 

לפעמים השירות שלנו קורא לשירות אחר שבתורו צריך להפעיל מתודה מסוימת בשירות שלנו (calback) מה שיגרום ל – timeout במידה והגדרנו Single (ב – ConcurrencyMode) מכיון ששירות A הפעיל את שירות B שקרא לשירות A שלא מאפשר לקריאות להתבצע כל עוד לא הסתיימה הקריאה הקודמת, במצב כזה ניתן להגדיר

 



[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]


 

 

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

תגובה אחת

  1. gadib21 באפריל 2011 ב 11:31

    יופי של מדריך , קראתי את כל החלקים. תודה.

    הגב