DCSIMG
Reuse types with WCF Data Services - Adiel Sharabi

Adiel Sharabi

Life, the Universe, and Everything (.Net for instance)

Reuse types with WCF Data Services

כאשר עושים Add service reference לשירות נתונים נוצרים אובייקטים חדשים המייצגים את המודל. זאת בנוסף לפרוקסי (אותו אנחנו בעצם רוצים) המכיל את הנקודות קצה לכל האלמנטים במודל.
בWCF – ישנה אפשרות לשימוש חוזר באובייקטים כאשר הן לשרת והן ללקוח יש קישור אליהן. 

image

עכשיו נניח תצורה מסויימת של פרוייקט.

  • רוצים לעבוד N-tier והתבנית הנוחה ביותר היא Self tracking object
  • רוצים למנוע תלויות ב Entity framework – אז מזיזים את הישויות לפרוייקט נפרד.
  • רוצים להשתמש בWcf Data services ע”מ לקבל אובייקטים מהשרת.
  • רוצים להשתמש גם בשירותים אחרים של WCF כדי להחזיר אובייקטים לשרת (עדכון וכו’)

התצורה הזו אינה דמיונית, היא מאד הגיונית, לתשאל עם Data Services זה תענוג, אולם שאר הפעולות (עדכון,הוספה,מחיקה) בד”כ דורשות קצת יותר לוגיקה ממה שנוח לעשות עם Data Services.

הבעיה כמובן היא שגם אם ללקוח יש קישור לפרוייקט של הישויות תהיה לו כפילות של ישויות תחת Namespace אחר.

ב Tip 52  מוצגת שיטה שלמעשה מיצרת פרוקסי ידנית כדי לעקוף את הבעיה הזו. רק שיש בעיה עם הגישה הזו. זה ידני – כל שינוי בשמות, הוספת/הורדת ישויות מחייב עריכה ידנית.

לכן הוספתי תבנית TT עם שינויים קלים שעושה את העבודה עבורי.

מצ”ב פרוייקט לדוגמא.

נקודות לתשומת לב -

  • ב TT של הcontext יש תוספת של הNamespace של הישויות (החדש אם הוא שונה)
  • ישנו override בDataService כדי לאפשר לMetadata  של השירות לעלות בצורה תקינה. אבל זה נושא לפוסט אחר.
  • ב TT של הישויות צריך לתקן את הנתיב ל Edmx.
  • יש להוסיף רפרנס ל - System.Data.Services.Client מכיוון שהפרוקסי יורש מDataServiceContext
  • ב TT של צד לקוח יש לעדכן נתיב ל Edmx והnamspace לישויות.
  • אם נוצר קובץ כפול ואחד עם “1” בסוף – זו איזו תקלה לא ברורה שניתן לתקן (זה רק מעצבן ויזואלית) אם נכנסים לקובץ של הפרוייקט ומשנים שם את הערך של  LastGenOutput שיהיה בלי 1.

תוכן התגובה

Gil Fink כתב/ה:

הי עדיאל,

בתצורת הפרויקט שדיברת עליה יש שימוש בSTE יחד עם WCF Data Services. עקרונית השילוב של STE יחד עם WCF Data Services הוא שילוב לא טוב (יכול להוביל להרבה מאוד באגים). לכל אחת מהשיטות יש את היחודיות שלה. במידה ואתה רוצה להשתמש בEF יחד עם WCF Data Services הבחירה הטובה היא לעשות שימוש בתבנית POCO. הSTE מיועדים לשימוש בעיקר יחד עם custom WCF services.

# December 16, 2010 8:30 AM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 3 and 5 and type the answer here:


Enter the numbers above: