DCSIMG
WCF 4.0 - Service Discovery - I Love C#
Sign in | Join | Help

I Love C#

Eyal Vardi

WCF 4.0 - Service Discovery

פורסם בתאריך Dec 07 2009, 05:59 PM על ידי Vardi | ישנם 1 תגובות

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# אשמח אם תצטרפו.

רשימת תגובות

# re: WCF 4.0 - Service Discovery

פורסם בתאריך Monday, December 07, 2009 11:27 PM על ידי Maxim  

הי אייל,

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

שלח תגובה

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

Enter the numbers above: