Windows Communication Foundation

Windows Communication Foundation ובקיצור (WCF) הוא מודל מערכת וממשקי API ב-NET Framework. ליצירת תקשורת בין יישומים ובניית ישומים מבוזרים, מוכווני שירותים. WCF שהחל דרכו תחת שם הקוד אינדיגו, הושק ב-2006 ויועד לשילוב במערכת ההפעלה שנקראה בשם הקוד Longhorn ונודעה לאחר מכן בשמה ויסטה. המודל הושק כחלק מפלטפורמת דוט נט 3 החל מחבילת הפיתוח ויז'ואל סטודיו 2008. WCF פישט מאוד את הליך התקשורת במיחשוב מבוזר, בכך שהליך התקשורת המורכב הפך להיות דומה לתהליך תכנותי רגיל באמצעות פונקציות, אפשר גמישות גדולה במעבר מפרוטוקול תקשורת אחד למשנהו, והוריד את העלויות של אינטגרציה בין תוכנות.

הארכיטקטורה

WCF הוא כלי המשמש לעיתים קרובות כדי לממש ולפרוס ארכיטקטורה מוכוונת שירותים (SOA). הוא תוכנן באמצעות עקרונות ארכיטקטורת מוכוונת שירותים (Service) לתמיכה במחשוב מבוזר, שבו שירותים מונגשים מרחוק לצרכנים. לקוחות יכולים לצרוך שירותים מרובים; ניתן לצרוך שירות אחד על ידי מספר רב של לקוחות. ניתן לבצע צימוד רופף בין שירותים. לשירותים לרוב יש ממשק WSDL (Web Services Description Language) שבאמצעותו כל לקוח WCF יכול לצרוך שירות ללא תלות של הפלטפורמה שהשירות מתארח בו. WCF מממש הרבה תקני שירותי אינטרנט מתקדמים 
כמו WS-Addressing, WS-ReliableMessaging ו-WS-Security. עם שחרורו של דוט נט 3.5 בנובמבר 2007, פרסמה מיקרוסופט מקודד שהוסיף תמיכה בסרליזציה של JSON ל-WCF. דבר המאפשר להיענות לבקשות מדפי AJAX. בדוט נט 4 הוספו RSS - שירותי סינדיקציה, WS-Discovery, ניתוב ותמיכה טובה יותר ב-REST services. בגרסה 4.5 נוספו תכונות כמו פעילות אסינכרונית, פישוט קובצי קונפיגורציה, ופרוטוקולי תקשורת נוספים כמו UDP.

עקרונות ה-WCF

את עיקרו של הWCF ניתן לזכור באמצעות המנמוניקה "ABC" באנגלית: Address / Binding / Contract.
כתובת (Address) היא למעשה נקודת הקצה, שבו מאזין ה-Host לאחר ש"עלה לאוויר", וניתן למצוא בו את החוזה. לקוח WCF מתחבר לשירות WCF באמצעות נקודות קצה (Endpoints). כל שירות חושף את החוזה (Contract) שלו באמצעות נקודת קצה אחת או יותר. כתובת נקודת קצה (שהיא URL שבו ניתן לגשת לנקודת הקצה) תכונות כריכה (Binding) המציינות כיצד הנתונים יועברו.
כריכה (Binding) מציין את פרוטוקולי התקשורת המשמשים לגישה לשירות, את מנגנוני האבטחה, הצורה שבה הנתונים יעברו (בינארי/טקסט) וכדומה. WCF כולל כריכות מוגדרות מראש לפרוטוקולי תקשורת הנפוצים ביותר, כגון SOAP מעל HTTP, SOAP מעל TCP, ו-SOAP מעל מסר תורים, וכן אינטראקציה בין נקודות קצה WCF והלקוח נעשית באמצעות מעטפת SOAP. מעטפות SOAP הן בצורת XML פשוט, מה שהופך WCF ללא תלויה בפלטפורמה. כאשר לקוח רוצה לגשת לשירות דרך נקודת קצה, הוא לא רק צריך לדעת את החוזה, אבל יש לו לדבוק בכריכה שצוינה על ידי נקודת הסיום. לפיכך, גם הלקוח והשרת חייבים להיות תואמים בנקודות הקצה.
חוזה (Contract) מציין את הממשקים (Interface) שהשירות חושף, כדי שהלקוח יוכל להשתמש בהם. בדרך כלל מדובר באוסף של פונקציות או אירועים שנכתבו באחת משפות הדוט נט, שהלקוח יכול לעשות בהם שימוש. הלקוח למשל יכול להפעיל פונקציה עם פרמטרים ולקבל בחזרה תוצאה או להמתין לאירוע שהשירות יוצר. לדוגמה בנק ישראל יכול להעלות שירות שניתן באמצעות פונקציה לתשאל שערי מטבעות, או אירוע שמוזנק בכל פעם ששער הדולר משתנה.

תכונות עיקריות

התכונות העיקריות של ה-WCF המפורטות להלן, מאפשרות ליצור תקשורת בעלת מאפיינים של קלות, ידידותיות, פשטות וגמישות.

אפליקציות באוריינטצית שירות

אחת תוצאות של שימוש בתקני WS היא ש-WCF מאפשר ליצור יישומים בעלי תודעת שירות. ארכיטקטורה מוכוונת שירותים (SOA) היא ההסתמכות על שירותי אינטרנט, כדי לשלוח ולקבל נתונים. לשירות כזה יש את היתרון הכללי של להיות בצימוד רופף במקום בקידוד קשיח מיישום אחד למשנו. מערכת יחסים בצימוד רופף מרמזת כי כל לקוח שנוצר על כל פלטפורמה יכול להתחבר לכל שירות, כל עוד החוזים החיוניים נפגשים.

יכולת פעולה הדדית

WCF תומך ביכולת פעולה הדדית (Interoperability) ביישומי WCF הפועלים על אותו מחשב Windows, או הפועלים על מחשבי Windows שונים ברשת מקומית או שירותי אינטרנט סטנדרטיים הבנויים על פלטפורמות כגון ג'אווה הפועלות על Windows או מערכות הפעלה אחרות. כך למשל אפשר לדגום תמונות וידאו ממצלמה בתוכנה אחת, להעבירם לתוכנה אחרת שמבצעת עליהם אנליזה ולהעביר את התוצאות לתוכנה שלישית שמציגה למשתמש דרכי תגובה לתוצאות.

דפוסי מסר מרובים

הודעות ב-WCF יכולות להיות מועברות באחד מכמה דפוסים. הדפוס הנפוץ ביותר הוא דפוס בקשה/תשובה, שבו כאשר נקודת קצה אחת מבקשת נתונים מנקודת קצה שני, נקודת הקצה השנייה עונה. ישנם דפוסים אחרים, כגון הודעה בכיוון אחד שבו נקודת סיום אחת שולחת הודעה ללא כל ציפייה לתשובה. דפוס מורכב יותר הוא תבנית החלפת דו כיווני שבו שתי נקודות קצה יוצרות חיבור ושולחות נתונים הלוך ושוב, בדומה לתוכנה להעברת מסרים מיידים.

מטהדאטה של השירות

WCF תומך בפרסום מטה נתונים באמצעות פורמטים המפורטים בתקנים כגון WSDL, סכימת XML ו-WS-Policy. מטה נתונים יכול לשמש כדי לחולל באופן אוטומטי ולהגדיר גישה ללקוחות לשירותי WCF. ניתן לפרסם מידע על HTTP ו-HTTPS או באמצעות תקן Web Service Metadata Exchange.

נתוני החוזים

בגלל ש-WCF נבנה באמצעות NET Framework., הוא כולל שיטות קידוד ידידותיות כדי לספק חוזים שרוצים לאכוף. אחד מהסוגים האוניברסליים של חוזים הוא נתוני חוזה (data contract). בעיקרו של הדבר, הדרך הקלה ביותר לטיפול בנתונים, היא על ידי יצירת מחלקות או מבנים שמייצגות ישות נתונים. WCF כולל מערכת מקיפה לעבודה עם נתונים בצורה קלה זו. והשירות מחולל אוטומטית את מטה הנתונים, המאפשר ללקוחות לעמוד בסוגי הנתונים שעוצבו. משמעות הדבר כי ניתן להשתמש בפונקציות בתקשורת בצורת שימוש דומה לרכיבי COM למשל, וניתן להעביר נתונים מפורמטים לפי מבנים ומחלקות, ולא כמחרוזת ארוכה או מערך בתים שניתן להתקשות בפירוק הפורמט שלה.

אבטחה

מערכת אבטחה מובנית ב-WCF. הודעות יכולות להיות מוצפנות כדי להגן על פרטיות. קיימת אפשרות לדרוש ממשתמשים לאמת את עצמם לפני שיורשו לקבל הודעות. אבטחה יכולה להיות מיושמת באמצעות סטנדרטים ידועים כגון SSL או WS-SecureConversation.

משלוחים וקידוד מרובים

ניתן לשלוח הודעות בכל אחד מכמה פרוטוקולי תעבורה וקידודים מובנים. הפרוטוקול והקידוד הנפוץ ביותר הוא משלוח הודעות SOAP טקסט מוצפנת באמצעות פרוטוקול Hypertext Transfer (HTTP) לשימוש ב-World Wide Web. לחלופין, WCF מאפשר לך לשלוח הודעות באמצעות TCP (ברשת מקומית), Named Pipes (במחשב בודד), MSMQ, ואף UDP ועוד. ניתן לקודד את המסרים הללו כטקסט או באמצעות פורמט בינארי אופטימלי. ניתן לשלוח נתונים בינאריים ביעילות באמצעות תקן MTOM. ניתן ליצור תעבורה מותאמת אישית או קידוד מיוחד. קיימת גמישות רבה בהחלפת פרוטוקולי התקשורת שלא באמצעות קידוד קשיח, אלא קובצי קונפיגורציה בלבד (הכתובים בXML), כך שניתן ליצור כמה סטים של פרוטוקולים ולהחליף ביניהם באופן קל, לפי התנאים הדרושים לתקשורת.

הודעות עמידות

הודעה עמידה היא הודעה שאיננה הולכת לאיבוד בשל הפרעה בתקשורת. ההודעות בתבנית הודעה עמידה תמיד נשמרות בבסיס נתונים. וכאשר מתרחשת תקלה, מסד הנתונים מאפשר לך לשחזר את חילופי ההודעה בעת שהחיבור מתחדש.