WCF 4.0 – Service Discovery

7 בדצמבר 2009

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

WCF 4.0 – Service Discovery

סביר להניח כי כל ארכיטקט תוכנה הנאבק עם האתגרים של אפליקציה מרובת Services ומחשבים, ימצא את עצמו מתמודד, במוקדם או במאוחר, עם הצורך לספק Service Discovery.

הפתרון הקלאסי והותיק ביותר הוא UDDI

בפוסט זה אתמקד בפתרון של WCF 4.0 ה- WS – Discovery.

clip_image002

איך מוצאים את השירות שאנחנו מחפשים?

מה זה WS – Discovery?

זהו פרוטוקול שמתאר איך מתבצע תהליך הגילוי. בשלב הראשון שולח כל שרות שעולה הודעת Hello ב- Multicast.

clip_image004

בשלב השני, כאשר שרות או לקוח מחפש שרות הוא שולח הודעת Probe ב- Multicast.

clip_image006

כל שרות שמתאים לבקשת ה- Probe מחזיר ישירות למבקש Probe Match.

clip_image008

כאשר שרות יורד הוא שולח הודעת By ב- Multicast.

clip_image010

תיאור שסופק לעיל הוא סכמטי וכללי, פירוט מדויק של הפרוטוקול אפשר לקרוא כאן.

איך WS-Discovery ו-WCF עובדים ביחד?

1. צריך להוסיף ל- WCF Service ה- Endpoint מסוג udpDiscoveryEndpoint ( ראו פוסט קודם שלי על Kind ). זה EP שישלח את ההודעות Hello , Probe Match ו- By. ה- Kind למעשה שותל ב- Service Description תחת ה- Property Endpoints את DiscoveryEndpoint.

clip_image012

2. צריך להוסיף ל- Service Behaviors את ServiceDiscoveryBehavior כדי שהוא ישתול לכל EP תחת ה- Behaviors את EndpointDiscoveryMetadataInitalizer, בשביל שה- DiscoveryEndpoint יכול לדעת מה לענות כאשר הוא מקבל הודעת Probe. דוגמא לאיך מגדירים את ה- Discovery ב- WCF.
clip_image014
חשוב לציין שה- Discoveryלא מצריך כלום ממפתח ה- Service, רק להגדיר נכון את EP הקובץ הקונפיג.

3. איך נראה ה- Service Description ע"י הכלי WCF Debugger Visualizer.
clip_image016

4. צריך להגדיר Dynamic Endpoint בצד ה- Proxy כדי שנוכל למצוא את השרות המבוקש. לדוגמא:
clip_image018

בדוגמא כאן ה- CalcClient מחפש שרות שהחוזה שלו הוא ICalc וה- Binding שלו הוא NetTcpBinding.

איך מגדירים את ה- Multicast?

בקובץ קונפיג. דוגמא:

clip_image020

סיכום:

סוג ה- Discovery הזה נקרא Ad hoc והוא מאוד "יפה ונחמד" עד שמגלים שברוב הארגונים היכולת של ה- Multicast סגורה. ולכן יש עוד שיטה שמאוד מזכירה את UDDI והיא נקראת Managed Discovery, אך זה בפוסט הבא.

נקודה אישית:

אני חושב שהגילוי של השירותים לא צריך להתבצע ע"פ דרישה אלא להדחף ללקוחות. אני עושה את זה בתוך מערכות סגורות ע"י Distributed Cache, כל שרות שולח את הודעות ה- WS-Discovery ל- Distributed Cache וכל צרכן מושך אותם משם.

אשמח לענות לשאלות לכל מי שרוצה, אני זמין גם בקבוצה שלי בלינקדאין – I Love C# אשמח אם תצטרפו.

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

כתיבת תגובה

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

תגובה אחת

  1. Maxim7 בדצמבר 2009 ב 23:27

    הי אייל,
    אחלה פוסט, רק התמונות יצאו לא טוב, כדאי לתקנן…

    הגב