webmethod דינמי ?

amiti26

New member
webmethod דינמי ?

שאלה קצת תיאורטית: האם יש דרך להגדיר webmethod או כל פונקציה אחרת בצורה דינמית ? כלומר לא בצורה קבועה מראש? אני רוצה ליצור webservice שאוכל להוסיף לו method בלי לפתוח את הקוד ולבנות את ה webservice מחדש, וחשבתי על הגדרה דינמית (למשל שליפה מ DB שמגדיר מה ה webmethod מקבל ומחזיר) למישהו יש רעיון למימוש ? זה בכלל אפשרי ? תודה מראש
 

itaym02

New member
תחקור בכיוון של delegates

אני מניח שפונקציה כבר כתובה מראש. אחרת אני לא רואה דרך פשוטה (אתה תמיד יכול לכתוב תוכנה שהפלט שלה יהיה קובץ טקסט שמכיל קוד - כמו שVS עושה)
 

amiti26

New member
לגבי הפונקציות

כל אחת מהפונקציות צריכה לשלוף מידע שונה מ DB ולהחזיר אותו למשתמש, אז חשבתי על SP בתור הפונקציה וצורה הזאת אני יכול להוסיף הכל בצורה דינמית ורק לבנות מעטפת "חכמה" שתדע לבנות את ה webmethods והפונקציות בהתאם ל DB.
 

itaym02

New member
תן לי להבין

לפי איזה שהוא קלט - אתה רוצה להפעיל כל פעם פונקציה שונה כל פונקציה כזאת צריכה לקרוא נתונים שונים מהDB האם השאילתות עצמן הן קבועות, או שהן משתנות כל פעם (יש כזו אפשרות באורקל - והEMBEDED שלהם, לא יודע לגבי מסדים אחרים)
 

amiti26

New member
הסבר

אני רוצה לבנות webservice שמקבל בקשה מסוגים שונים, ומחזיר תשובות בהתאם לבקשה (סתם לדוגמא, מקבל בקשה להחזיר שם לפי ת"ז, או כתובת לפי ת"ז). ה webservice צריך להיות כמה שיותר גנרי, כלומר , מחר אני מחליט שאני רוצה שהוא יוכל להחזיר עוד סוג של נתונים (לדוגמא ,את שמות כל הילדים והנכדים של מישהו לפי ת"ז). אני יכול כל פעם להוסיף פונקציות לתוכנית אבל אני מנסה לחשוב על דרך לעשות את זה בלי גישה לקוד כלומר בקשה מסוג כלשהו תיגש ל DB, תבדוק איזה SP היא אמורה להפעיל , ותחזיר תשובה בהתאם. הביצוע של זה הוא לא מסובך, אבל אני רוצה לאפשר למשתמש לראות מה הוא צריך לשלוח ולקבל עבור כל מתודה ובשביל זה אני צריך לבנות גם אותן דינמית. זה קצת בעייתי אבל הצלחתי להסביר את עצמי ?
 

האזרחק

New member
איך אתה מגדיר מה הוא מקבל היום?

אפשר הרי לקבל XML ישירות מבסיס הנתונים (של מבנה הנתונים) אז אולי תוכל להשתמש בזה כדי לקבוע את הקלט של ה WEBSERVICE? הקלט יהיה מה שתחזיר SP מסויימת או מבנה של טבלה מסויימת...ואז תוכל לשלוט במבנה מבלי לגעת בקוד.
 

sirpinky

New member
אם הבנתי נכון:

א: לא ניתן לשנות את מבנה ה- webservice בזמן ריצה, כי אם תשנה את ה- interface שלו (מבנה חיצוני של פונקציות ו- types) ישתנה גם ה-wsdl שלו בהתאם בצורה דינאמית, והוא יעשה ללא שמיש. דבר זה יחייב רענון של כל הקוד שמשתמש ב webservice בכל שינוי של ה-WS. ב: למה לא לעשות מתודה שמקבלת שם טבלה + select או שם טבלה + שם stored procedure, מריצה אותה ומחזירה תוצאות? את ה- connection string תחזיק ב- web.config. * רק קח בחשבון שאם אתה רוצה להשתמש בזיהוי מול ה-DB של windows authentication של המשתמש (impersonation) אתה חייב למקם את ה-web service על שרת ה- SQL בנוסף ל-impersonation. (אחרת חייבים להגדיר trust for delegation בין 2 השרתים של ה- WS וה- DB)
 

amiti26

New member
לגבי נקודה א.

קיוויתי שיש דרך לשנות ולרענן את interface שלו. לגבי נקודה ב. אני לא חייב לשלוח לו את ה SP או השאליתא בתור פרמטר למתודה. אני יכול לשלוח לו קוד פעולה או משהו כזה והוא ישלוף מה DB את ה SP המתאים, אבל אז אני לא יכול להציג למשתמש את מבנה ה XML שחוזר אליו. (כי בכל פעולה אני רוצה להחזיר XML במבנה אחר) לגבי התשובה שכתבו לי לפני זה, אני יכול להשתמש ביכולת של SQLSERVER להחזיר לי את התשובות ב XML , אבל שוב, אני לא יכול לדאוג שהמשתמש יראה את המבנה הפלט מראש. בכל מקרה, תודה רבה לכולם, אני כנראה אצטרך להחליט אם יותר חשובה לי גנריות המערכת או שמירה על interface נוח וברור למשתמש.
 

itaym02

New member
משהו דומה

אתה יכול כל פעם להחזיר את אותו XML, אך תגדיר בתוכו שדות פרטיים למשל:
<xmlReturnString> field=id:023734736473;field=name:blabla;field=desc:hope you understood </xmlReturnString>​
כך אתה יכול לקבל כל פעם מבנה נתונים שונה בלי לשנות את הממשק.
 

sirpinky

New member
רגע רגע...

את ה- interface אין צורך לרענן - הוא משתנה אוטומאטית. מי שמשתמש בו צריך לרענן אותו. יותר חשוב: תחזיר אובייקט XML או DataTable או מה שבא לך - מה זה משנה מה המידע שמתקבל? לא הבנתי - גם ככה חוזה תמיד אותו type - טבלה או XML, אז מה הבעייה?
 
למעלה