המוטו של המפגש היה. "זה נראה כמו Class רגיל של C#, זה נוצר כמו Class רגיל של C#, זה נקרא כמו Class רגיל של C# אבל, אתה מקבל במתנה מאחורי הקלעים גם...", וכאן באה רשימה שלמה של דברים ש WCF נותן לך במתנה רק בגלל שאתה משתמש בו. אמינות, אבטחה, תמיכה בטרנסאקציות, מצערת אוטומטית, תור אוטומטי, מונים, Trace, הצפנה, זיהוי נכון של הקורא ועוד ועוד ועוד. כל תכונה הוסברה וכל תכונה הודגמה ונשארו עוד הרבה יכולות שקצרה היריעה להראות אותם ולהסביר אותם. אין ספק ש 150 המשתתפים שהגיעו לשמוע, יצאו משם עם תמונה יותר ברורה של מה WCF יכול לעשות עבורם אם רק יפעילו אותו.
נושא שחזר ועלה במפגש קבוצת המשתמשים (וגם בסיום יום העיון שהיה באותו יום) היה נושא הביצועים. כמה עולה לנו להשתמש ב WCF. התשובה שניתנה, שהמחיר שאתה משלם הוא זניח יחסית לתמורה, לא מצאה חן בעיני חלק מהאנשים.
המון מפתחים חושבים שהמטרה העיקרית שלהם היא לייצר את הקוד הכי מהיר והכי יעיל שאפשר. ולמרבה הצער, זו התשובה הלא נכונה.
אם אתה מנהל פיתוח ואתה הולך ושואל את המפתחים שלך מה התפקיד שלהם במערכת. אם התשובה שאתה מקבל היא "אנחנו כותבים קוד", יש לך בעיה. המפתח לא אמור "לכתוב קוד", הוא אמור לייצר מוצר. לצורך ייצור המוצר אולי הוא צריך לכתוב קוד, אבל המטרה היא המוצר ולא הקוד. הקוד הוא האמצעי ולא המטרה.
ולמה אני נתתי את הדוגמא הקודמת, נתתי אותה כדי להדגיש את הנקודה, שהמטרה של מפתח היא לפתור בעיה. אם המתח מצליח לכתוב קוד שפותר את הבעיה בזמן נאות (ונאות זו מילת המפתח כאן), הוא השיג את המטרה. אם הביצועים מספיקים למערכת, ואם זמן התגובה נאות (ושוב נאות זו מילת המפתח כאן), כל השקעה של מאמץ בשיפור הביצועים היא בזבוז זמן פיתוח. זה עובד מספיק טוב, אז למה אתה מקלקל.
Juval הדגים קריאת WCF שהפעילה את כל הדברים שרק אפשר להפעיל ב WCF כל האופציות הכי כבדות שרק יש ב WCF, וקיבל 100 קריאות בשניה על מחשב נייד, שאינו שרת, ואין לו הרבה יע"מ-ים. האם עשר מילי שניות תקורה זה הרבה או מעט ? למי שכותב Device Driver זה אולי הרבה. אבל לשרת של בנק בינוני שאמור לטפל בממוצע בעשר פעולות בשניה, זה לא הרבה. אם הקריאה בשרת כוללת בתוכה לוגיקה עיסקית המחייבת כתיבה לשרת מסד נתונים, זו אפילו תקורה זניחה מאד יחסית לשאר הפעולות.
ההשואה של המהירות היתה גם למול אותו קוד ב C#. קוד מקביל ב C# נתן אולי פקטור של 100 יותר מהירות. הבעיה היא שבמדידת המהירות הזו אתה משווה תפוחים לאשכוליות. הקוד של C# לא כלל בתוכו שום אבטחה, שום הגנה בפני שגיאות, לא כלל בטחון שהפעולה באמת התבצעה ועוד הרבה דרישות שהתכנית האמיתית בחיים האמיתים היתה צריכה לכלול, אחרת לא היית יכול לשלוח אותה ללקוח. אם היית מוסיף לקוד הנקי של C# את כל הדרישות הללו, היית מגלה להפתעתך שהביצועים של קוד ה C# שכתבת יפלו משמעותית ממה שנותן לך ה WCF ישר מהקופסה.
משפט המפתח פה היה, אם אתה יכול להרשות לעצמך להשתמש בדוט נט על מנת לפתח את היישום שלך, אתה גם יכול להרשות לעצמך להשתמש ב WCF באותה מידה כי זה יעלה לך יותר לא להשתמש בו. יעלה יותר גם בגלל שמה שתעשה ירוץ יותר לאט ממה ש WCF נותן לך וגם בגלל שתבזבז המון זמן פיתוח על המצאה מחדש של הגלגל.