
ServiceContract ושתי פעולות: GetSum שמחזירה את סכום מערך של מספרים שלמים, ו-GetAverage שמחזירה ממוצע כ-double.הטקסט המלא של הדקות הראשונות בהרצאה «Multiple Contracts» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הדבר הבא שאנחנו הולכים לראות בנוגע לקונטרקטס זה איך לבצע שירות שיש לו מספר קונטרקטס. נניח שני קונטרקטס שונים ואז להתחבר אליהם על הכוח.
אז קודם כל אנחנו רואים שיש לנו פה קונטרקט אחד, iCלקולטור. ב-iCלקולטור יש לנו את הפונקציות Add, Sub, Mod, D ו-Average.
בואו נוסיף עוד קונטרקט, Add New Item, נבחר באינטרפייס, אינטרפייס כמובן זה קונטרקט, ונגדיר שהאינטרפייס הזה נקרא IRA Services, פעולות בנוגע למערכים, שזה גם איפשהו קשור לעולם של חישובים.
נגדיר אותו כפאבליק, יש לנו IRA Services, ונגדיר פונקציות הבאות: דאבל גט אבראג' מקבלת איזשהו מערך, בוא נניח אינט אריי, ונגדיר עוד איזושהי פונקציה גט סאם.
נגדיר את האטריביוטס המתאימים, לדוגמה, נגדיר את Service Contract מעל לקונטראקט, נגדיר את Operation Contract מעל לפונקציות, נגדיר את היוזינג המתאים וניפטר מכל היוזינגים האחרים.
אוקיי, אז יש לנו עכשיו שני קונטראקטס ואנחנו צריכים מחלקה שתממש אותם. ניקח את המחלקה Calculator.
עכשיו, למה אני לוקח מחלקה אחת שתממש? מפני שאם אני מסתכל על ה-host, אני רואה שיש לי פה את ה-Object Service Host, שה-Object Service Host אומר לנו, תביאו לי מחלקה אחת Object Singleton Instance או שתביאו לי Type אחד ויחיד שאתם רוצים שאני אחשוף לאוויר אז אנחנו כמובן עם כל Service
Host יכולים להריץ רק מחלקה אחת עכשיו אנחנו יכולים לשכפל את ה-Service Host לשני Service Hosts ולהריץ את שניהם באותו פרויקט הוסט שרץ ודבר שניתן לביצוע אבל צריך לבקור ש Service Host 1 יכול לחשוף החוצה אך ורק HTTP Get URL 1, כלומר רק מסמך WSDL 1 הוא יכול לחשוף.
ולכן אנחנו נצטרך להגדיר איזשהו Behavior נוסף עבור כל אחד מהם, שכל אחד יחשוף את המידע על Behavior אחר, כלומר על קובץ WSDL אחר.
וזה אומר שהלקוח מבחינתו יצטרך להתחבר פעמיים, פעם אחת לקובץ הראשון ואז הוא יקבל את המחלקה הראשונה, פעם אחת לקובץ השני ואז הוא יקבל את המחלקה השנייה.
כמובן שזה דבר שניתן לביצוע, בדיוק כמו שניתן לביצוע להרים שני הוסטים לאוויר לדוגמה, שכל אחת משתמשת באובייקט אחר או במחלקה אחרת שחושפת החוצה עם WSDL אחר לגמרי.
אז קודם כל הדבר הזה ניתן לביצוע בשני פרויקטי הוסט נפרדים או באותו פרויקט, זה כבר תלוי לשיקולכם. אז בגלל שהדבר הזה טריוויאלי אנחנו לא נתעסק איתו אלא אנחנו נבנה מחלקה אחת לדוגמת הקלקולטור שחושפת החוצה את שני האינטרפייסים.
נגדיר i array services, נממש אותו ונכתוב את הפונקציות. אז יש לנו פה את ה-get sum שמה שאנחנו רוצים לעשות זה לבנות איזשהו משתנה int sum להכניס לתוך האפס.
כמובן שאנחנו צריכים דרך אגב שה-get sum אם היא מקבלת מערך של אינטג'ר אז עדיף שהיא תחזיר אינטג'ר כי לא יכול להיות שהמידע יהיה בסופו של דבר דאבל הסכום של כל הערכים.
יש לנו for each int item in array sum+=item ולבסוף אנחנו מחזירים את הsum ב-get average אנחנו פשוט יכולים להחזיר את get sum של array לחלק ל-array וכמובן להפוך אחד מהם לדאבל בכדי שכל התוצאה