locked
שאלת ארכיטקטורה WCF ROUTING SERVICES ו SERVICE AGGREGATION RRS feed

  • שאלה

  • שלום יש לי שני   SERVICES נקרא להם A ו  B

    שניהם תומכים ב SESSION

    כמו כן יש לי CONTROLLER SERVICE שאליו מתחבר ה CLIENT

    ה CONTROLLER SERVICE משמש כ ROUTER  ל A ו B אבל יש לו גם שירותים שהוא בעצמו מספק.

    ה CLIENT יכול לבקש שירותים  מ A ו B  דרך ה CONTROLLER וגם מ ה    CONTROLLER

    עצמו

    אלא ש הCONTROLLER על מנת לספק את השירות צריך להיות מסוגל להתחבר ל A

    ואני רוצה להבטיח שCONTROLLER מתחבר ל  SESSION שיצר הלקוח כאשר התחבר "ישירות" ל A.

    ב CONTROLLER אני יוצר PROXY לשירות A איך אפשר להשתמש באותו SESSION של הלקוח?

    האם אני צריך לממש ניהול SESSION משלי? אולי אני יכול לשמור את מזהה ה SESSION  כאשר בקשה ל A עוברת דרך ה CONTREOLLER ולהשתמש בו?


    • נערך על-ידי NoundaDee יום שישי 20 אפריל 2012 20:51
    יום שישי 20 אפריל 2012 20:44

תשובות

  • מה שאתה מבקש אפשרי, בגדול, ב-WCF, אבל דורש די הרבה מימוש - כתיבה של InstanceContextProvider ו-binding element, לא דברים שפשוט לכתוב אותם.

    ה-InstanceContextProvider ישמש אותך לשיתוף context בין שני קליינטים (קונטרולר ו-A), אבל בשביל לזהות שמדובר ב"אותו" קליינט, אתה תצטרך להעביר איזשהו מזהה ייחודי משני הקליינטים. מאחר ומימוש session ב-WCF מותנה ב-binding, לא הייתי ממליץ לנסות "להעתיק" את ה-session id מקליינט אחד לאחר (בגלל שלא בטוח שהם עובדים עם אותו הגדרת binding) ולכן כדאי כנראה לייצר id בעצמך ולצרוב אותו לתוך ההודעה - זה ידרוש binding element שיותקן ב-A וב-controller.

    במקום הפתרון המורכב הזה, אולי תוכל להסביר מה אתה מנסה להשיג בשיתוף ה-session ואולי נוכל למצוא דרך אחרת ליישם את זה.


    Please mark posts as answers/helpful if it answers your question.
    Senior Consultant on WCF, ASP.NET, Siverlight, and Entity Framework. Author of Microsoft's Official WCF 4 Course. Co-author of the Microsoft HPC/Azure burst whitepaper.
    Visit my blog: http://blogs.microsoft.co.il/blogs/idof

    • סומן כתשובה על-ידי NoundaDee יום ראשון 29 אפריל 2012 17:16
    יום חמישי 26 אפריל 2012 19:38
    מנחה דיון

כל התגובות

  • מה שאתה מבקש אפשרי, בגדול, ב-WCF, אבל דורש די הרבה מימוש - כתיבה של InstanceContextProvider ו-binding element, לא דברים שפשוט לכתוב אותם.

    ה-InstanceContextProvider ישמש אותך לשיתוף context בין שני קליינטים (קונטרולר ו-A), אבל בשביל לזהות שמדובר ב"אותו" קליינט, אתה תצטרך להעביר איזשהו מזהה ייחודי משני הקליינטים. מאחר ומימוש session ב-WCF מותנה ב-binding, לא הייתי ממליץ לנסות "להעתיק" את ה-session id מקליינט אחד לאחר (בגלל שלא בטוח שהם עובדים עם אותו הגדרת binding) ולכן כדאי כנראה לייצר id בעצמך ולצרוב אותו לתוך ההודעה - זה ידרוש binding element שיותקן ב-A וב-controller.

    במקום הפתרון המורכב הזה, אולי תוכל להסביר מה אתה מנסה להשיג בשיתוף ה-session ואולי נוכל למצוא דרך אחרת ליישם את זה.


    Please mark posts as answers/helpful if it answers your question.
    Senior Consultant on WCF, ASP.NET, Siverlight, and Entity Framework. Author of Microsoft's Official WCF 4 Course. Co-author of the Microsoft HPC/Azure burst whitepaper.
    Visit my blog: http://blogs.microsoft.co.il/blogs/idof

    • סומן כתשובה על-ידי NoundaDee יום ראשון 29 אפריל 2012 17:16
    יום חמישי 26 אפריל 2012 19:38
    מנחה דיון
  • הבעיה שיש לי אובייקט שלוקח הרבה זמן לאתחל אותו והוא נמצא ב A

    אם ה CONTROLLER יגש לA ב  SESSION אחר אז אני אצטרך לאתחל את ה אובייקט עוד פעם

    שבת 28 אפריל 2012 08:32
  • תוכל להסביר מהו התהליך שלוקח הרבה זמן להריץ באתחול של A? יכול להיות שאולי אין תלות בין קליינטים שונים, כך שניתן לשתף את האתחול הזה ברמה אחרת? אולי ניתן לאתחל פעם אחת ולשמור ב-cache?

    Please mark posts as answers/helpful if it answers your question.
    Senior Consultant on WCF, ASP.NET, Siverlight, and Entity Framework. Author of Microsoft's Official WCF 4 Course. Co-author of the Microsoft HPC/Azure burst whitepaper.
    Visit my blog: http://blogs.microsoft.co.il/blogs/idof

    שבת 28 אפריל 2012 09:00
    מנחה דיון
  • מדובר באובייקט CONNECTION לבסיס נתונים,הבעיה שהוא אינו מבצע רק CONNECTION אלא

    טוען META DATA רב על המודל

    אני לא יכול לגעת באובייקט הזה בשום צורה שהיא כמו  כן הוא נכתב ב VB6 אבל הומר ל .NET

    (עדיין משתמש באוביייקטי COM שנכתבו ב VB6)

    תודה

    יום ראשון 29 אפריל 2012 12:08
  • ומה לגבי לטעון אותו פעם אחת ולשתף אותו בין כל הקריאות (כמובן שיהיה צורך לנעול אותו כשפונים אליו כי הוא STA אני מניח)?

    האם יש חשיבות שהוא פר קליינט? או שזה רק עניין של ביצועים?

    אם רק עניין של ביצועים, אפשר גם לייצר מעין object pool שדואג לייצר כמה מופעים שלו ולספק כל פעם אחד באופן אקסקלוסיבי


    Please mark posts as answers/helpful if it answers your question.
    Senior Consultant on WCF, ASP.NET, Siverlight, and Entity Framework. Author of Microsoft's Official WCF 4 Course. Co-author of the Microsoft HPC/Azure burst whitepaper.
    Visit my blog: http://blogs.microsoft.co.il/blogs/idof

    יום ראשון 29 אפריל 2012 12:12
    מנחה דיון
  • זו בעצם שאלת המשך לשאלה שלי SESSION או CACHE כמה הודעות מתחת

    הסיבה שרציתי שיהיה פPER CLIENT זה למנוע אתחול כל פעם שמגיע קריאה חדשה מה CLIENT

    אני יודע איך ליצור STA OBJECT POOL,מה שאתה מציע ש ה CONNETION STRING שמוצמד לקריאה

    הוא יהיה המפתח ל POOL הזה..אני מניח...אני דווקא רוצה ללכת בכייון של ה InstanceContextProvider

    אני גם לומד מזה דברים חדשים

    יום ראשון 29 אפריל 2012 12:19
  • אין בעיה, אם אתה נתקל בשאלות במימוש של instance context provider תרגיש חופשי לשאול שאלה בפורום.

    אם אחת התשובות לעיל ענתה על השאלה, נשמח אם תסמן אותה כתשובה.


    Please mark posts as answers/helpful if it answers your question.
    Senior Consultant on WCF, ASP.NET, Siverlight, and Entity Framework. Author of Microsoft's Official WCF 4 Course. Co-author of the Microsoft HPC/Azure burst whitepaper.
    Visit my blog: http://blogs.microsoft.co.il/blogs/idof

    יום ראשון 29 אפריל 2012 12:26
    מנחה דיון