Enums on client side of WCF Data Services

יום רביעי, מרץ 26, 2014

לאחרונה יצא לי להתעסק עם WCF Data Services – אחד הדברים שהציקו לי היה העבודה עם enum, אמנם החל מ – Entity Framework 6 יש תמיכה ב – enums במודל, אבל לא בעבודה עם DataServices, במידה והמודל יכיל Enum Type לא ניתן יהיה לבצע Add Service Reference. אחד הפתרונות שחשבתי לעשות הוא לכתוב בצד הלקוח קוד כמו זה: Code Snippet namespace DataCache.ServiceReference{    public partial class DegreeType    {        public EDegreeType EType        {            get            {                return (EDegreeType)this.Type;            }            set            {                this.Type = (int)value;            }        }    }    public enum EDegreeType    {                Before,                After    }} כך בצורה זו –...
3 תגובות

עצלנות של מפתחים ואבטחת מידע – והפעם שימוש ב – reflector

יום חמישי, נובמבר 17, 2011

  בפוסט הקודם תיארתי כיצד לעקוף את הבדיקה של טלריק האם המוצר נקנה או שהוא גרסת ניסיון - על הדרך הבטחתי לספר איך להשתמש ב - reflector.   אמנם פוסט זה לא כל כך קשור לאבטחת מידע (או לעצלות של מפתחים) אבל הוא דומה לפוסט הקודם.   למי שלא מכיר את reflector   ה - reflector הוא אחד מהכלים המדהימים ביותר שיצאו אי פעם כדי לעזור למפתחים, לצערי הרב מתי שהוא הם החליטו לגבות כסף על התוכנה (35$ לגרסה הבסיסית ו - 95$ לגרסה המלאה).     כרגיל אני אדגיש שאני חלילה לא מעודד לגנוב אותם, אלא רק מראה עד כמה חשוב לכתוב קוד נכון.   במידה ויש לכם את הגרסה...
7 תגובות

yield

יום שלישי, אפריל 26, 2011

  כמו שהבטחתי בפוסט הקודם אני אראה דרך קצרה יותר לממש את IEnumerable ללא מימוש עצמאי של IEnumerator בעזרת yield.   ראשית נראה את הדוגמא ואז את ההסברים:     הנה המחלקה מהפוסט הקודם:   class PersonManager : IEnumerable {     private List<Person> _persons;       public PersonManager()     {         _persons = new List<Person>();     }       public IEnumerator GetEnumerator()     {       } } כעת נממש את המתודה בעזרת yield.     public IEnumerator GetEnumerator() {     foreach (var item in _persons)     {         yield return item;     } }   למעשה אפשר פשוט להשתמש בזה, במידה וחשוב לכם לדעת מה קורה מאחורי הקלעים  אתם מוזמנים לפתוח relector ותראו שנוצרת מחלקה שלמה, כשהמתודה העיקרית נראית כך:     private bool MoveNext() {     try     {         switch (this.state)         {        ...
תגיות: , ,
2 תגובות

because it is registered in web.config and lives in the same directory as the page

יום שני, ינואר 3, 2011

הוספה של User Control לעמוד. במידה ואתם עובדים עם User Controls יש שתי דרכים להשתמש בהם בדפי ה - aspx שלנו.   דרך אחת להוסיף שורת Register בתחילת העמוד:   <%@ Register src="~/UserControl.ascx" tagname="UserControl" tagprefix="uc1" %> דרך נוספת היא לרשום את ה - UserControl בקובץ ה - web.config, כך:     <system.web>   <pages>     <controls>       <add src="~/UserControl.ascx" tagName="UserControl" tagPrefix="uc1"/>     </controls>   </pages> </system.web>   אני מעדיף את הדרך השנייה, מכיוון שזה חוסך לי להוסיף Register לכל עמוד.   הבעייה: יש בעייה מוזרה במידה ורושמים את ה - UserControl בקובץ הקונפיג, וגם ה - User Control וקובץ הקונפיג נמצאים באותה תיקייה (כלומר ב - root) נקבל את השגיאה הבאה: (בהנחה של - UserControl קוראים...
2 תגובות

What is Reflector

יום שישי, ספטמבר 24, 2010

  מה זה ואיך משתמשים ב - Reflector     קבלתי שאלה במייל - "מה זה reflector?מה השימוש בו וכיצד"   כדי לענות על השאלה חשבתי לכתוב פוסט שידגים את השימוש בו.   לפני שנדבר על הכלי המופלא שנקרא ה - Reflector, צריך לוודא שאנחנו מבינים את תהליך העבודה ב - net.           (התמונה לקוחה מהמצגות של סלע.)   התהליך מתחיל כמובן בזה שאנחנו כותבים קוד באחת משפות NET.   ממשיך לקומפילצייה במידה והתהליך עבר בהצלחה אנו מקבלים קובץ exe/dll (תלוי בסוג הפרויקט).   מה שהקובץ באמת מכיל אינו קוד בינארי אלא קוד בשפה שמכונה intermediate language - IL.   בזמן ריצה נטען לזיכרון המחלקה הראשונה עם מתודת ה - Main, ה - JIT עולה לחיים ומקמפל...
תגיות: ,
תגובה אחת

ArgumentOutOfRangeException – Value is not valid for OracleType: 0. Parameter name: oracleType

יום חמישי, ינואר 14, 2010

  אם קבלתם את ההודעה הבאה: Value is not valid for OracleType: 0. Parameter name: oracleType   מן הסתם כתבתם את הקוד הבא OracleParameter param = new OracleParameter("name", 0);   מה שאתם צריכים לעשות זה אחד מהשניים   int num = 0; OracleParameter param = new OracleParameter("name", num   OracleParameter param = new OracleParameter("name", Convert.ToInt32(0));     זה לא יעבוד   OracleParameter param = new OracleParameter("name", (int)0);   הסיבה לשגיאה זה הדרך שבה הם כתבו את ה - overload של הפונקציות, שימו לב: (הפונקציות איך שהם הוגדרו)   public OracleParameter(string name, object value); public OracleParameter(string name, OracleType oracleType);     שני קריאות לפונקצייה   OracleParameter param = new OracleParameter("name", 0); int num = 0; OracleParameter param1 = new OracleParameter("name", num);   ואיך זה נראה כשפותחים Reflector   OracleParameter param = new OracleParameter("name",...
תגיות: , , ,
אין תגובות

Set for WebClient.Encoding 1255

יום רביעי, ספטמבר 30, 2009

  בתפוז נשאלה השאלה הבאה:   איך אפשר לגרום ל - WebClient לשלוח בקשה עם Encoding של 1255 ולא utf8.   בהתחלה מישהו אמר שאפשר להשתמש במאפיין Encoding - כלומר הקוד הבא:   WebClient client = new WebClient(); client.Encoding = Encoding.GetEncoding(1255); string str = client.DownloadString(http://www.google.co.il);     משום מה זה לא עבד - מעיון קצר ב - Reflector מסתבר שהמאפיין הזה משפיע אך ורק על תרגום הבתים שחוזרים מהבקשה, כלומר מאחורי הקלעים מפעילים את המתודה DownloadByte וכדי לדעת באיזה Encoding לתרגם את התוצאה משתמשים במאפיין Encoding - כלומר אין שום קשר בין ההגדרה של המאפיין לבין שליחת ה - Request ב - Encoding הרצוי.   הנה חלק מהקוד שרץ עבור DownloadString   try {     WebRequest request;    ...
תגיות: , , , , ,
5 תגובות

מאחורי הקלעים של Nullable – או ?int

יום שלישי, ספטמבר 22, 2009

  עמית לעבודה שאל אותי האם כשמגדירים nullable זה יושב ב - stack או ב - heap,   בהתחלה עניתי בלי לחשוב שזה יושב ב - heap, אבל אז חשבנו שזה לא הגיוני כי אם זה יושב ב - heap אז מה כל החכמה בזה ?   ואז הסתכלנו וראינו ש - nullable הוא למעשה struct ולא class, מה שאומר שהגדרה של ?int תשב ב - stack.   ואז שאלנו את עצמנו איך יכול להיות שאפשר לתת את הערך null או לבדוק האם מופע של nullable הוא null.   חקרנו קצת בעזרת ה - reflector ועלינו על הממצאים הבאים:   אין ולא יכול להיות הערך null במופע של nullable,...
תגיות: , ,
אין תגובות

Adding control to DetailsView dynamically

יום שלישי, יולי 28, 2009

  בהמשך לפוסט הזה, (שהראה איך להוסיף Validator ל - DetailsView שנוצר בצורה דינמית) אני רוצה להדגים איך להוסיף פקדים בצורה דינמית.   לפני הכל, את המאמר הבא - ASP.NET Page Life Cycle Overview כל מפתח ב - ASP.NET צריך להכיר בעל פה.     נניח שבזמן Edit אנחנו רוצים להוסיף CheckBox לתא הראשון.   הקוד יראה כך:   protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e) {     DetailsView1.ChangeMode(e.NewMode);     Bind();       CheckBox chk = new CheckBox();     chk.ID = "CheckBox1";     DetailsView1.Rows.Cells.Controls.Add(chk); }     אבל כשנלחץ על - Update לא נמצא את ה - CheckBox ב - Collection של ה - Controls. מהסיבה הפשוטה שהיות שזה נוצר בצורה דינמית אנחנו חייבים לייצר אותו כל פעם מחדש (עם אותו...
4 תגובות

Creating RequiredFieldValidator for DetailsView dynamically

  אחד מהפקדים הנחמדים לעבוד עם מידע הוא ה - DetailsView, הוא יודע להציג מידע לאורך במקום לרוחב (כמו Grid) ומתאים מאוד לעידכון של שורה אחת.   בדרך כלל מה שאני עושה זה להציג Grid עם כל הנתונים וכשבוחרים שורה מתוך ה - Grid אני מציג את הנתונים של אותה שורה ב - DetailsView.     לאחרונה רציתי לעבוד איתו בצורה דינמית כלומר - לא להגדיר מראש ב - aspx את כל העמודות. ורציתי להוסיף לאחד העמודות RequiredFieldValidator. נשמע פשוט לא, אז נראה את הקוד.   בהתחלה אני מקשר טבלה (עם שורה אחת) ל DetailsView   protected void Page_Load(object sender, EventArgs e) {     if (!IsPostBack)     {         Bind();     } }   private void...
תגובה אחת