נניח את המקרה הבא:
אתם מפתחים אתר שיודע להציג סרטונים עבור חברות ואותם חברות מעוניינות להגדיר בצורה דינמית אלו פרסומות יוצגו לפני ואחרי הסרטון.
פתרון ראשון:
נשמור בבסיס הנתונים כתובת של Web Service שתחזיר רשימה של מחרוזות (עם שמות הפרסומות)
בעייה:
איך נפנה ל - Web Service בלי שאנחנו מכירים אותו מראש בזמן הפיתוח ?
הרי בדרך כלל אנחנו מוסיפים Reference ומקבלים proxy שאנחנו עובדים איתו, מה נעשה במקרה שאנחנו לא יודעים מה הכתובת.
שני פתרונות.
אחד מה שמוצע כאן שזה יצירה של ה - Proxy בצורה דינמית בעזרת CodeDom והקוד יראה בערך כך:
צד השרת (Web Service)
public class Service1 : System.Web.Services.WebService{
[WebMethod]
public AdvertisementWS HelloWorld()
{
return new AdvertisementWS();
}
} public class AdvertisementWS
{
public List<string> Before { get; set; }
public List<string> After { get; set; } public AdvertisementWS()
{
Before = new List<string>() { "abf" };
After = new List<string>() { "123" };
}
}
צד הלקוח: כלומר (אנחנו)
object ret = WsProxy.CallWebService("http://localhost:60905/Service1.asmx","Service1",
"HelloWorld",
null); Advertisement advertisement = Advertisement.ConvertFromObject(ret);
בהתחלה נפנה למתודה שמקבלת:
כתובת של Web Service
שם המחלקה
שם המתודה
ופרמטרים (מערך של אובייקטים) למתודה
נקבל בחזרה אובייקט ונמיר את למחלקה שלנו בעזרת מתודה מיוחדת שנכתוב
public class Advertisement{
public string[] Before { get;set; }
public string[] After { get; set; } public static Advertisement ConvertFromObject(object obj)
{
Advertisement res = new Advertisement();
Type type = obj.GetType();
res.Before = (string[])type.GetProperty("Before").GetValue(obj, null);
res.After = (string[])type.GetProperty("After").GetValue(obj, null); return res;
}
}
Read more: שלמה גולדברג
0 comments:
Post a Comment