מדריך WCF – כיצד להרים Services לאויר (Hosting)

רשימת נושאים בפרק 2

  • סיכום דוגמת קוד להגדרה של Service מהפרק הקודם.
  • מי מחזיק את השירות באויר.
  • מה זה Endpoint.
  • הגדרה של Endpoint בקונפיג.
  • מה זה Binding.
  • הגדרה של Service Host והרמת השירות הראשון שלנו לאויר.

סיכום דוגמת קוד להגדרה של Service מהפרק הקודם

בפרק הקודם דברנו על ההגדרה של שירות והכרנו את המושגים ServiceContract ו – OperationContract והנה לנו דוגמא להגדרה של שירות המבצע חישובים.

ראשית יש לנו פרוייקט אחד בשם Contract המכיל את ה – Interface שאותו נחשוף החוצה (הפרוייקט צריך להכיל Reference ל – System.ServiceModel)

namespace Contarcts
{
    [ServiceContract]
    public interface ICalc
    {
        [OperationContract]
        int Add(int a, int b);
 
        [OperationContract]
        int Sub(int a, int b);
    }
}

לאחר מכן בפרוייקט נפרד נכתוב מימוש לאותו Interface (הפרוייקט צריך להכיל Reference לפרוייקט Contract)

namespace Service
{
    public class Calc : ICalc
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
 
        public int Sub(int a, int b)
        {
            return a - b;
        }
    }
}

עד כאן מהשיעור הקודם.

מי מחזיק את השירות באויר

לאחר שיש לנו Contract ומימוש שלו ב – Service אנחנו צריכים לחשוב מה הלאה, ברור שכרגע ה – Service הוא בסך הכול מחלקה המממשת ממשק כלשהו, כדי שהוא יהיה באוויר ויהיה ניתן לתקשר איתו ולהפעיל את המתודות שלו, מישהו צריך לארח אותו ולהחזיק אותו בחיים, המישהו הזה נקרא Host.

Host יכול להיות כל אפליקציה שרצה ב – Windows החל מ – Console Application או Windows Forms Application ואפילו IIS, כל מה שצריך לעשות, זה להגדיר ל – Host מספר הגדרות כגון באיזה פרוטוקול הוא מאזין (http, tcp ועוד) מה הכתובת שאליו הוא מאזין ועוד מספר הגדרות שנכיר בפרק הזה ובפרקים הבאים.

מה זה Endpoint

כדי שנוכל לספר ל – Host שהשירות מתאכסן אצלו מה אנחנו רוצים לעשות – אנחנו צריכים להגדיר Endpoint.

Endpoint – מכיל את שלושת ההגדרות הבאות:

Address – שמספר מה הכתובת שה – Host מאיזן לקבל בקשות ולהעביר אותם לשירות.

Binding – שמגדיר הגדרות חשובות, כמו באיזה פרוטוקל נשתמש, האם נעביר מידע טקסטואלי או בינארי הגדרות Security ועוד.

Contract – המספר לעולם איזה Interface מוחצן החוצה מהשירות.

למעשה אפשר להגיד שה – Endpoint מספר היכן (Address) למצוא את השירות שזה הכתובת שלו, איך (Binding) שזה מספר כיצד לבצע את ההתקשרות, ומה (Contract) שמספר מה השירות מספק.

הגדרה של Endpoint בקונפיג

למעשה אפשר להגדיר Endpoint מקוד או מקובץ הקופיג של ה – Host, בדוגמאות אני אצמד לקובץ הקונפיג.

נוסיף פרוייקט חדש בשם Host מסוג Console Application ונוסיף לו Reference לשני הפרוייקטים שלנו וכמובן גם ל – System.ServiceModel)

נוסיף קובץ קונפיג ונכתוב את הקוד הבא

<system.serviceModel>
<services>
<service name="Service.Calc">
<endpoint address="http://localhost:8412/MyCalcService"
binding="basicHttpBinding"
contract="Contarcts.ICalc">
</endpoint>
</service>
   </services> </system.serviceModel>

כל ההגדרות בקונפיג אודות WCF יושבות תחת system.serviceModel

היות ש – host אחד יכול להכיל יותר משירות אחד אנחנו צריכים עבור כל שירות להגדיר מקטע של service שהמאפיין name הוא השם המלא של השירות (כלומר namespace.className)

לאחר מכן נפתח מקטע של endpoint ונגדיר את ההגדרות שיעזרו ל – host להאזין לבקשות, נגדיר כמובן address כשהקידומת (http) היא יוצא פועל של סוג ה – binding, כמו שאפשר לראות בדוגמא בחרתי ב – basicHttpBinding ולכן גם הקידומת של הכתובת תתחיל ב – http.

בנוסף נגדיר מה ה – contract שאותו השירות חושף, שהוא יהיה השם המלא של ה – interface כלומר (namespace.interfaceName)

למעשה זה כל מה שצריך כדי להגדיר host בסיסי, בפועל כמובן שיש עוד הרבה הגדרות שונות, למשל בדוגמא השתמשתי ב – basicHttpBinding כלומר רציתי שהתקשורת תעשה בפרוטוקול http פשוט בלי יותר מידי פיצ'רים כמו שמירה על Session ועוד.

ויש עוד רשימה ארוכה של Bindings מוגדרים מראש (כל אחת והתכונות שלה) בנוסף אפשר לשנות הגדרות של כל Binding (מה שנתמך) ואם זה לא מספיק אפשר לייצר אחד כזה לבד, אנחנו נתעמק ב – Binding בפרקים הבאים.

הגדרה של Service Host והרמת השירות הראשון שלנו לאויר

כעת כל מה שנשאר לנו לעשות זה להרים את השירות שלנו לאויר, נוסיף ל – host את הקוד הבא

static void Main(string[] args)
{
    ServiceHost calcHost = new ServiceHost(typeof(Calc));
    calcHost.Open();
 
    Console.ReadLine();
}

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

כמובן שצריך לכתוב שורה כמו ReadLine כדי לגרום ל – host להישאר באוויר.

יש חלק מה – hosts (כמו IIS) שלא צריך לקרוא ל – open, אנחנו נדבר עליהם בפוסטים הבאים.

בפרק הבא אנחנו נגדיר גם את הצד השני (Clients) ונראה כיצד התקשורת אכן עובדת.

תגיות:

תגובות בפייסבוק