<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Justin myJustin = new Justin( Expriences.Current );</title><link>http://blogs.microsoft.co.il/blogs/justinangel/</link><description>Justin-Josef Angel is a c# MVP and this is where he writes his everyday expriences</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Justin Angel's Silverlight Weblog</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2010/01/12/justin-angel-s-silverlight-weblog.aspx</link><pubDate>Mon, 11 Jan 2010 22:38:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:494305</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;This blog has moved to a Silverlight powered weblog on @ &lt;a href="http://justinangel.net/"&gt;http://JustinAngel.net&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Read the Silverlight weblog features overview at @ &lt;a href="http://justinangel.net/SilverlightWeblogFeaturesOverview"&gt;http://justinangel.net/SilverlightWeblogFeaturesOverview&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-- Justin Angel&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=494305" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/justinangel/archive/tags/Offtopic/default.aspx">Offtopic</category><category domain="http://blogs.microsoft.co.il/blogs/justinangel/archive/tags/dev/default.aspx">dev</category></item><item><title>What ever happened to the Shabak blogs?</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/11/15/what-ever-happened-to-the-shabak-blogs.aspx</link><pubDate>Sat, 15 Nov 2008 20:38:39 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:167033</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>1</slash:comments><description>&lt;div dir="rtl" style="font-size:14pt;font-family:arial, helvetica, verdana, geneva,sans-serif;" align="right"&gt; &lt;p&gt;&amp;nbsp; למי שזוכר, בתחילת שנת 2008 השב&amp;quot;כ העלו &lt;a href="http://www.shin-tech.org.il/" target="_blank"&gt;סט של ארבעה בלוגים&lt;/a&gt; של עובדים מהאגף הטכנולוגי שלהם.&lt;/p&gt; &lt;div dir="ltr" style="font-size:14pt;font-family:arial, helvetica, verdana, geneva,sans-serif;" align="left"&gt;Service announcement in English: This is a tedious &amp;amp; boring blog post in Hebrew regarding something you don&amp;#39;t care about. &lt;/div&gt; &lt;p align="center"&gt;&lt;img height="243" alt="תמונת מסך מאתר הבלוגים של השב&amp;quot;כ" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/WhateverhappenedtotheShabaqblogs_10EB9/image_11bc5e93-3263-4c5f-a980-cd7b987a828c.png" width="800" border="0" /&gt; &lt;/p&gt; &lt;p&gt;המטרה המוצהרת הייתה לחשוף לאזרחים מהשורה שגם עובדי שב&amp;quot;כ הם אנשים אמיתיים ולא דמויות מסתוריות מסרט של ג&amp;#39;יימס בונד. &lt;/p&gt; &lt;p&gt;בנוסף, האג&amp;#39;נדה הנסתרת-גלויה הייתה לעודד גיוס כוח-אדם במשרה מלאה למערך הטנוכלוגי של השב&amp;quot;כ.&lt;br /&gt;הרעיון הוא שאם תיתן לאנשים לשאול שאלות מאנשים אחרים על הדרך שהם עברו להגיע לאיפה שהם - הם יענו וברצון.&lt;/p&gt; &lt;p&gt;כמו כל סיפורי האהבה הגדולים, ההתחלה הייתה הצלחה כבירה.&lt;br /&gt;התקשורת (האמיתית זאת עם העיתונים המודפסים היפים וגלי מוח שיוצאים מהטלוויזיה ישר למוח) אהבה את זה. &lt;br /&gt;הבלוגרים - אהבו את זה שמצטרפים עליהם חברים חדשים למגרש המשחקים. ועוד כאלו עם סקס אפיל ברור.&lt;br /&gt;אני... אני חשבתי &amp;quot;וואלה, מגניב, עוד צעד קדימה בפתיחות טכנולוגית לגיוס הון אנושי&amp;quot; (אני חושב כמו מנהל, עמכם הסליחה).&lt;/p&gt; &lt;p align="center"&gt;&lt;img height="398" alt="אוהבים את השב&amp;quot;כ, דיאגרמה. כי אני אוהב דיאגרמות." src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/WhateverhappenedtotheShabaqblogs_10EB9/image_c4426a9e-869f-4578-abd3-4086152becd4.png" width="393" border="0" /&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;המערכת עלתה לאוויר במרץ 2008 וב-1 למאי 2008 פורסם בה הפוסט האחרון&lt;/font&gt;&lt;/strong&gt;. סה&amp;quot;כ פחות מחודשיים של פעילות. &lt;/p&gt; &lt;p&gt;חבל, הייתה כאן הזדמנות אמיתית לשב&amp;quot;כ להיכנס לתודעה של אנשי היי-טק ישראלים כ&amp;quot;עוד מקום עבודה שוואלה שווה לשקול&amp;quot;. &lt;br /&gt;בתעשייה שלנו שקשה למצוא אנשים שנשארים באותו מקום עבודה יותר מ2-3 שנים, זה היה יכול להיות נכס אמיתי. &lt;/p&gt; &lt;p align="center"&gt;&lt;img height="486" alt="אולי אני אלך לעבוד בשב&amp;quot;כ?" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/WhateverhappenedtotheShabaqblogs_10EB9/image_320bebef-75fb-4265-810b-66616d35d9db.png" width="632" border="0" /&gt;&lt;/p&gt; &lt;p&gt;הכי עצוב זה שיש באתר שם שאלות שלא נענו ע&amp;quot;י מועמדים פעילים ומועמדים פוטנציאליים, ואף אחד מהמעורבים בפרוייקט לא טרח להגיב מעל חצי שנה. &lt;/p&gt; &lt;p&gt;אבל כמו תמיד, מי שמנהל את הפרוייקט הזה הצליח לפספס גם את הכדור המכריע במשחק הזה. &lt;/p&gt; &lt;p align="center"&gt;&amp;nbsp;&lt;img height="484" alt="אכזבה - השב&amp;quot;כ איזה מזל שהם לא אחראים לדברים באמת חשובים" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/WhateverhappenedtotheShabaqblogs_10EB9/image_8d880ae4-5d2c-4660-981f-42742824f86d.png" width="637" border="0" /&gt; &lt;/p&gt; &lt;p&gt;ב&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/archive/2006/09/05/2930.aspx" target="_blank"&gt;עבר גם הזכרתי&lt;/a&gt; את מדיניות הגיוס ה&lt;em&gt;מעניינת&lt;/em&gt; של השב&amp;quot;כ שהם העלו את האתר הציבורי הראשון שלהם והפכו את דרישות העבודה (המעניינות) לפומביות. &lt;/p&gt; &lt;p&gt;שב&amp;quot;כ, מביטים עלייך, ולוקחים נקודת נוכחות. עוד 3 כאלו ואנחנו מתקשרים לאמא ואבא. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;-- ג&amp;#39;סטין-יוסף אנג&amp;#39;ל&lt;/p&gt; &lt;p&gt;(רוכש חברים חדשים)&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=167033" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/justinangel/archive/tags/Tech/default.aspx">Tech</category><category domain="http://blogs.microsoft.co.il/blogs/justinangel/archive/tags/Offtopic/default.aspx">Offtopic</category></item><item><title>Response.redirect או Server.Transfer?</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/09/21/response-redirect-server-transfer.aspx</link><pubDate>Sat, 20 Sep 2008 21:41:24 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:142939</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>1</slash:comments><description>&lt;div dir="rtl"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;u&gt;תוספת משנת 2008: &lt;/u&gt;&lt;/strong&gt;זהו. העברתי את כל הפוסטים מ-JustinAngel.Net משנת 2003-2005 לבלוג הזה ששירת אותי בין השנים 2006-2008. בעתיד הקרוב JustinAngel.Net ירד מהאוויר אחרי 6 שנים של להיות הבלוג הטכני הראשון שכתוב בעברית. הפוסט המצורף זה הפוסט הטכני הראשון שאי-פעם כתבתי. לא היה לנו אז צביעת קוד, ולא תמונות בבלוגים ושום כלי מתוחכם כזה. אני חושב שזה הולם שהפוסט הראשון שאי-פעם כתבתי בעברית יהיה גם הפוסט האחרון שאי-פעם אפרסם בעברית. &lt;/font&gt;&lt;/div&gt; &lt;div dir="rtl"&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="rtl"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="rtl"&gt;&lt;font face="Arial" size="4"&gt;לא פעם נתקלתי עם מפתחים חדשים ומנוסים כאחד שלא בטוחים במספר סוגיות בתחום היותר אפור של הפן הטכני בתכנות דוט נט. פעם בשבוע אפרסם נושא אחד עם מאמרים הדנים בו.&lt;br /&gt;&lt;br /&gt;והפעם: &lt;b&gt;Response.redirect או Server.Transfer?&lt;/b&gt;&lt;br /&gt;&lt;/font&gt;&lt;a href="http://www.developer.com/net/asp/article.php/3299641" target="_blank"&gt;&lt;font face="Arial" color="blue" size="4"&gt;מאמר #1: סקירה כללית על הנושא&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://haacked.com/archive/2004/10/06/1308.aspx" target="_blank"&gt;&lt;font face="Arial" color="blue" size="4"&gt;מאמר #2: פירוט על נושא ה-flow&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=15" target="_blank"&gt;&lt;font face="Arial" color="blue" size="4"&gt;מאמר #3: סיכום והרחבה&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;סיכום של הנקודות שיש לזכור:&lt;br /&gt;Response.recdirect ו-Server.transfer לכאורה מבצעות אותה פעולה, אך יש הבדלים מהותיים בעבודה של שני המתודות הללו. לא מדובר רק על העברה בין דף לדף, אלא על היכן העברה מתרחשת, מה היכולות שלה וכיצד המשתמש יקלוט אותה. &lt;br /&gt;1. תחבירית: &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;// Server.Transfer&lt;br /&gt;// # First Overload:&lt;br /&gt;Server.Transfer(string path) &lt;br /&gt;Server.Transfer(&amp;quot;myPage.Aspx&amp;quot;)&lt;br /&gt;// # Second Overload:&lt;br /&gt;Server.Transfer(string path, bool PreserveForm)&lt;br /&gt;Server.Transfer(&amp;quot;myPage.Aspx&amp;quot;,true)&lt;br /&gt;&lt;br /&gt;// Response.Redirect &lt;br /&gt;// # First Overload:&lt;br /&gt;Response.redirect(string URL)&lt;br /&gt;Response.redirect(&amp;quot;myPage.aspx&amp;quot;)&lt;br /&gt;// # Second Overload:&lt;br /&gt;Response.redirect(string URL, bool endResponse)&lt;br /&gt;Response.redirect(&amp;quot;myPage.aspx&amp;quot;, false)&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="rtl"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;2. הבדלים בקונספט: Response.Redirect מיועד לשימוש לצד לקוח, Server.Transfer מיועד לשימוש בצד שרת. כל שאר ההבדלים נובעים מיכולותיו ומגבלותיו של כל צד.&lt;br /&gt;&lt;br /&gt;3. שימור נתוני טופס: בעזרת Server.Transfer ניתן לשמר את המצב של הטופס הנוכחי לדף אליו מעבירים. הווה אומר, האוספים Request.Form ו-Request.QueryString. ניתן להשיג זאת בכך שמכוונים את המשתנה preserveForm ל-true. היתרון של הדבר שלמעשה כל העבודה שנעשתה עד כה בדף המפנה תהיה זמינה לשימוש בדף אשר אליו מפנים. החסרון של הדבר היא ששימור מצב הטופס דורש משאבי מערכת וכך הופך את התוכנית לפחות יעילה. חשוב לציין ש-viewState הרבה יותר מאובטח ומכיל את היכולת הזאת, אך גם יקר יותר בביצועים. &lt;br /&gt;&lt;br /&gt;4. העברה בצד לקוח: כאשר אנו מבצעים Response.redirect מה שקורה למעשה הוא שהשרת שולח ללקוח הודעה שהדף עבר למקום אחר והדפדפן של הלקוח פונה לאותה הכתובת. &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;HTTP/1.1 302 Object moved&lt;br /&gt;Server: Microsoft-IIS/5.0&lt;br /&gt;Location: somewhere/newlocation.aspx&lt;/font&gt;&lt;/div&gt; &lt;p dir="rtl" align="right"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;ניתן לראות את ההודעה אשר נשלחת ללקוח. החסרון בכך שמדובר בעוד PostBack לשרת. &lt;br /&gt;&lt;br /&gt;5. העברה בצד שרת: כאשר אנו מבצעים Server.Transfer השרת למעשה מבצע עיבוד של webform אחר במקום זה שהלקוח ביקש. וכל זה, בלי שהלקוח יודע כלום. היתרון בכך שנחסך PostBack. החסרון הוא בכך שהדפדפן של הלקוח אינו מודע לכל התהליך הזה. הכתובת ב-address bar תישאר זהה לכתובת המבוקשת המקורית ולא לכתובת אשר אליה הפננו. באם ירצה הלקוח לשים סימניה על הדף הזה, הוא למעשה יסמן את הדף הקודם. &lt;br /&gt;&lt;br /&gt;6. תכלס&amp;#39;, חסכון: Server.Transfer מוריד את העומס על השרת והלקוח כאחד. &lt;br /&gt;&lt;br /&gt;7. העברה הודעות: כאשר מבצעים העברה בעזרת Server.Transfer ניתן להעביר הערות\פרמטרים\הודעות בעזרת אסופת Content.&lt;br /&gt;&lt;br /&gt;הערות? תוספות?&lt;br /&gt;&lt;br /&gt;שבוע טוב,&lt;br /&gt;ג&amp;#39;סטין-יוסף אנג&amp;#39;ל&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=142939" width="1" height="1"&gt;</description></item><item><title>SessionState בקובץ web.config</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/09/21/sessionstate-web-config.aspx</link><pubDate>Sat, 20 Sep 2008 21:31:14 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:142937</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>0</slash:comments><description>&lt;div dir="rtl" align="right"&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;העשרה שבועית בנושא והפעם מאמר מקיף על האפשרויות של sessionState בתוך web.config. (נושא שנתתי הסבר מזורז עליו השבוע). (תודה לאוריאקס על הכותרת) &lt;br /&gt;&lt;br /&gt;sessionState מאפשר זיהוי ומעקב על פני מספר webforms של משתמש מסויים. דוגמאות טובות הן:&amp;nbsp; לעקוב אחרי הרשאות למערכת (למשל, Login), לעקוב אחרי שינויים במצב העבודה של המשתמש עם האפליקציה (למשל, עגלת קניות), לעקוב אחרי אופן הגלישה של משתמש באתר ומאוחר יותר לנתח את הממצאים כדי להראות הרגלי גלישה באתר. &lt;br /&gt;&lt;br /&gt;ספציפית במאמר זה נתמקד באפשרויות השונות לשימוש ב-sessionState כפי שהן באות לכדי ביטוי ב-web.config ו-machine.config:&lt;br /&gt;1. כבוי. אם לא משתמשים ב-sessionState, זה חסכון אדיר במשאבי מערכת שמכוונים את ה-sessionState לכבוי. ככה המערכת לא צריכה להעסיק סתם משאבים ולדאוג לזה. תתפלאו, אבל יש הרבה אפליקציות בסיסיות ואפילו כאלו מתקדמות שאין להן שום צורך ב-sessionState.&lt;br /&gt;&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sessionState mode=&amp;quot;off&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sessionState&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;כמו כן, ישנה אפשרות שב-webform ספציפי באפליקציה לא עובדים בצורה ישירה עם sessionState. בהתאם לכך, נכבה אותו ספציפית לאותו webform ובאותו טופס נוסיף:&lt;br /&gt;&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;%@ Page EnableSessionState=&amp;quot;false&amp;quot; %&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;אי-אפשר לציין ולהדגיש מספיק עד כמה זה חשוב במצב שבו לא משתמשים ב-sessionState לדאוג שהוא לא יהיה פעיל.&lt;br /&gt;&lt;br /&gt;2. InProc - המצב הזה הוא המצב הראשון והבסיס ביותר של שימוש ב-sessionState. מה שלמעשה InProc אומר הוא שהכל התהליך של שמירת sessionState מתבצע In-process. הווה אומר, על הפרוסס\Appdomain של הASP.net. &lt;br /&gt;החסרונות - אין לו את היכולות של האפשרויות הבאות. בנוסף, חסרון חשוב הוא שבmachine.config נמצאת תגית processModel אשר בין השאר מציינת מתי יש לאתחל את הפרוסס של ה-ASP.net (כאשר אין תגובה לתקופת זמן, כאשר יש עומס על השרת, כאשר אין תגובה ברשת וכך הלאה) וכאשר התהליך מאתחל את עצמו אז גם נמחק ה-sessionState. &lt;br /&gt;&lt;br /&gt;כדי ליישם את מצב זה יש לשנות את mode ל-InProc בweb.config או machine.config: &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sessionState mode=&amp;quot;InProc&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sessionState&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;3. StateServer - הקוסנפט מאוד פשוט: בואו נשמור את הנתונים על ה-sessionState ב-windows service. &lt;br /&gt;יתרונות:&lt;br /&gt;א. הפרוסס נפרד לחלוטין מהפרוסס של ה-ASP.net, ככה שניתן לאתחל את אפליקציית ה-IIS ולא לאבד את מידע ה-sessionState. הווה אומר, באתחול כפוי (ע&amp;quot;ע processModel) או באתחול ידני (מתוך inetmgr) ה-sessionState נשמר.&lt;br /&gt;ב. העובדה שהנתונים במצב זה נשמרים ב-Windows service מאפשרים גם חיבור לשרת מרוחק. הווה אומר, שרת\מחשב אחד אשר שומר נתוני sessionState לכמה שרתים. הדבר הזה נהדר לחוות שרתים אשר מריצות אותה אפליקציית רשת. &lt;br /&gt;דבר ראשון, אם מדובר באפליקציית רשת גדולה שדורשת יותר משרת אחד (למשל amazon.com) אז צריך שהמשתמש יוכל לעבוד על כל השרתים בלי להתחבר מחדש כל חמש שניות. &lt;br /&gt;דבר שני, אם נופל שרת אפליקציה אחד ושרת אפליקציה אחר צריך לבוא ולמלות את המקום שלו אז לא נאבדים נתוני ה-sessionState. &lt;br /&gt;&lt;br /&gt;למעשה מה שאנו עושים זה ליצור שרת שאחת ממטרותיו היא לשמור לכל חוות השרתים את נתוני ה-sessionState. אבל בד בבד מומלץ בתהליך זה גם לשרתים בדדים, ולא רק לחוות שרתים. &lt;br /&gt;&lt;br /&gt;חסרונות:&lt;br /&gt;א. ככל שעולים יותר ויותר בפתרונות ל-sessionState מבחינת גמישות ואפשרויות ככה גם צריך יותר RAM\זכרון על השרת. &lt;br /&gt;ב. כל דבר אשר שומרים ב-sessionState חייבת להיות אפשרות לעשות לו serialize. הווה אומר, כל אובייקט אשר לא ניתן לעשות לו serialize או שיזרוק שגיאה כאשר נכניס אותו ל-sessionState או פשוט לא ישמר. &lt;br /&gt;ג. אין לאפשרות זאת כתיבה על הדיסק הקשיח. ככה שאתחול השרת אשר מפעיל את ה-state server עדיין ימחוק את כל נתוני ה-sessionState. אין שום דרך לגבות את הנתונים לדיסק ולטעון אותם מאוחר יותר.&lt;br /&gt;&lt;br /&gt;איך ליישם:&lt;br /&gt;א. Administrative Tools / Services&amp;nbsp; --&amp;gt; להפעיל את ה-ASP.NET State Service &lt;br /&gt;ב. יש לשנות את הmode בתוך קובץ ה-web.config (או ה-machine.config) ל-&amp;quot;StateServer&amp;quot;. כמו כן יש להוסיף את הנתונים הבאים על השרת אשר מריץ את ה-windows service: כתובת IP ודרך איזה פורט מתחברים. את שני הנתונים הללו נשים ב-stateConnectionString. בנוסף ניתן לקבוע משתנה stateNetworkTimeout, אשר קובע תוך כמה שניות מתרחש timeout בפרוטוקול ה-tcp/ip. חשוב לציין שאירוע ה-timeout נרשם בלוגים של השרת. &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sessionState &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mode=&amp;quot;StateServer&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stateConnectionString=&amp;quot;tcpip=127.0.0.1:42424&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stateNetworkTimeout=15&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sessionState&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;(בחיבור למעלה מבצע חיבור דרך Loopback. הווה אומר, השרת מתחבר לעצמו דרך 127.0.0.1. בנוסף באם אין תגובה מה-windows service תוך 15 שניות יתרחש timeout.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. SQLserver - נתוני ה-sessionState ישמרו בתוך מסד נתונים SQL server. למעשה מה שקורה הוא שיש ליצור מסד נתונים חדש בשם ASPstate, ובתוכו נתוני ה-sessionState נשמרים כנתונים מסוג BLOB (קובץ בינארי גדול). &lt;br /&gt;&lt;br /&gt;יתרונות:&lt;br /&gt;א. שרידות נתוני sessionState אדירה. אפשר לאתחל את ה-IIS, את תהליך ה-SQLserver, את שרת ה-SQL server עצמו, ושום דבר חוץ מלירות בהארד-דיסק לא יגרום לאיבוד נתונים. &lt;br /&gt;ב. כמו ב-stateServer יש יתרון גדול בשימוש בחוות שרתים. רק צריך לזכור (זה תקף גם ל-stateServer) שבכדי שיהיה sessionState משותף לאותה אפליקציה על שני שרתים שמחוברים לאותו SQLserver/StateServer צריך אותו נתיב לאפליקציה. &lt;br /&gt;&lt;br /&gt;חסרונות:&lt;br /&gt;א. ככל שעולים יותר ויותר בפתרונות ל-sessionState מבחינת גמישות ואפשרויות ככה גם צריך יותר RAM\זכרון על השרת. &lt;br /&gt;ב. כל דבר אשר שומרים ב-sessionState חייבת להיות אפשרות לעשות לו serialize. הווה אומר, כל אובייקט אשר לא ניתן לעשות לו serialize או שיזרוק שגיאה כאשר נכניס אותו ל-sessionState או פשוט לא ישמר. &lt;br /&gt;ג. חובה שיהיה מסד נתונים SQL server. מדובר בחסרון אם האפליקציה עצמה עובדת עם מסד נתונים אחר, ולכן צריך לתחזק מסד נתונים נוסף.&lt;br /&gt;&lt;br /&gt;כיצד מיישמים:&lt;br /&gt;1. מריצים על שרת ה-SQLserver את InstallSqlState.sql. &lt;br /&gt;2. אם עובדים ב-trusted connections עם שרת ה-SQLserver צריך לשנות את הבעלות על מסד ה-ASPstate.&lt;br /&gt;3. אם עובדים עם SQL authentication, צריך ליצור משתמש שיהיה לו גישה למסד ASPstate (כולל הרצת פרוצדורות).&lt;br /&gt;4. יש לשנות את mode בתוך קובץ ה-web.config (או machine.config) ל-&amp;quot;SQLServer&amp;quot;. כמו כן יש לציין מחרוזת חיבור למסד (שם המסד, שם משתמש וסיסמא) במשתנה sqlConnectionString. בנוסף, כמו ב-stateServer ניתן לציין Timeout בנתון ה- stateNetworkTimeout. &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sessionState &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mode=&amp;quot;SQLServer&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sqlConnectionString=&amp;quot;data source=server_name;user id=user_id;password=password&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stateNetworkTimeout=15&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sessionState&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;בבחירת מצב ה-sessionState יש לשקלל את היתרונות של כל מצב (שרידות, נגישות ואפשרויות אשר נפתחות) מול החסרונות של שימוש רב יותר של משאבי מערכת. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;בנוסף, קיימים שני משתנים נוספים בתוך תגית ה&amp;lt;sessionState&amp;gt;.&lt;br /&gt;1. cookieless - מציין אם ה-sessionState עובד עם או בלי עוגיות בצד לקוח. &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sessionState cookieless=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sessionState&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;אם בחרנו לעבוד בלי עוגיות הנתיב היחסי של פנייה בין webforms ישתנה.&lt;br /&gt;למשל:&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;http://localhost/(lit3py55t21z5v55vlm25s55)/Application/SessionState.aspx&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;במקום: &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;http://localhost/Application/SessionState.aspx&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;ואת זאת מיישמים בכך שנכוון את משתנה ה-cookieless ל-true (קרי, לא להשתמש בעוגיות צד-לקוח). &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sessionState cookieless=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sessionState&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;2.&amp;nbsp; נתון ה-timeout. בנתון זה נרשום כמה דקות לקוח יכול להיות בלתי-פעיל (בלי בקשות לשרת) לפני שהשרת זורק את ה-sessionState שלו. באפלקיציות מאובטחות יש טעם בלקצר תקופה זו, לעומת זאת באפליקציות בעלות גישה חופשית נהוג לכוון גישה זו למספר שעות.&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sessionState timeout=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- for 20 minutes --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sessionState timeout=&amp;quot;300&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- for 5 hours --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sessionState&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;מקווה כי למדתם והשכלתם ממאמר זה, אשמח לענות על שאלות הבהרה ונוספות. כמו כן אני ממליץ שבאם נתקלתם ביישום SQLserver תפנו למאמר המצורף השלישי. &lt;br /&gt;&lt;br /&gt;בביליוגרפיה עיקרית זמינה בקישורים. &lt;br /&gt;&lt;br /&gt;שבוע טוב,&lt;br /&gt;ג´סטין-יוסף אנג´ל&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="maroon"&gt;כתובות אינטרנט נילוות:&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspnet/html/asp12282000.asp"&gt;&lt;font face="Arial" color="#000000" size="4"&gt;קישור #1: ASP.NET Session State ב-MSDN&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/tims/archive/2003/11/21/57453.aspx"&gt;&lt;font face="Arial" color="#000000" size="4"&gt;קישור #2: ASP.NET Session State: Architectural and Performance Considerations&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://idunno.org/dotNet/sessionState.aspx"&gt;&lt;font face="Arial" color="#000000" size="4"&gt;קישור #3: Using SQL Server for asp.net session state&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=142937" width="1" height="1"&gt;</description></item><item><title>TextBox.Readonly=true; האומנם?</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/09/21/textbox-readonly-true.aspx</link><pubDate>Sat, 20 Sep 2008 21:28:26 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:142934</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>0</slash:comments><description>&lt;div dir="rtl" align="right"&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;טעות נפוצה שאני נתקל כאשר אני עובר על קוד של תוכניתנים אחרים זה בלבול בנושא תכונת ה-ReadOnly של TextBox. מאיזהשהי סיבה, תוכניתנים יוצאים מנקודת הנחה שברגע שהם כתבו ReadOnly אז המשתמש באמת לא יוכל לערוך את התוכן של תיבת הטקסט. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;תיכננתי ניסוי קטן שיבדוק את הנושא. ניצור דף עם הפריטים הבאים:&lt;br /&gt;1. &lt;b&gt;&lt;u&gt;תיבת טקסט&lt;/u&gt;&lt;/b&gt; - פקד TextBox. התוכנה ReadOnly תהיה True, והתכונה Text תהיה על &amp;quot;Original Text&amp;quot;. &lt;br /&gt;2. &lt;b&gt;כפתור&lt;/b&gt; - כפתור פשוט שיגרום ל-PostBack.&lt;br /&gt;3.&lt;b&gt;&lt;u&gt;סקריפט ג&amp;#39;אווה&lt;/u&gt;&lt;/b&gt; - הסקריפט ייגש לתגית ה-&amp;lt;input&amp;gt; בצד לקוח וינסה לשנות את הערך שלה ל-&amp;quot;Not original Value!&amp;quot;. הסקריפט ירוץ בטעינת הדף. &lt;br /&gt;4. &lt;b&gt;&lt;u&gt;Label&lt;/u&gt;&lt;/b&gt; - לתוכה נדפיס את הערכים של ה-TextBox שלנו בכל טעינה של הדף. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;br /&gt;&lt;font size="4"&gt;1. נפתח טופס חדש. נשרטט את הכפתור ונקבל את ה-Design HTML הבא: &lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&amp;lt;asp:Button id=&amp;quot;btnTesting&amp;quot; style=&amp;quot;Z-INDEX: 102; LEFT: 520px; POSITION: absolute; TOP: 288px&amp;quot; runat=&amp;quot;server&amp;quot; Width=&amp;quot;184px&amp;quot; Height=&amp;quot;56px&amp;quot; Text=&amp;quot;Button&amp;quot;&amp;gt;&amp;lt;/asp:Button&amp;gt;&lt;br /&gt;&lt;/div&gt; &lt;p&gt;&lt;br /&gt;2. נשרטט את תיבת הטקסט ונקבע את התכונות אשר הזוכרו לעיל ונקבל את ה-Design HTML הבא:&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;asp:TextBox id=&amp;quot;tbxTest&amp;quot; style=&amp;quot;Z-INDEX: 101; LEFT: 536px; POSITION: absolute; TOP: 216px&amp;quot; runat=&amp;quot;server&amp;quot; Width=&amp;quot;136px&amp;quot; Height=&amp;quot;24px&amp;quot; ReadOnly=&amp;quot;True&amp;quot;&amp;gt; Original Text &amp;lt;/asp:TextBox&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;3. נוסיף פונקציה בג&amp;#39;אווה סקריפט שתחפש את תיבת הטקסט שלנו ותשנה את הערך שלה: &lt;br /&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; function testing()&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbxTest = document.getElementById(&amp;quot;tbxTest&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbxTest.value = &amp;quot;Not original Value!&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;הקוד לעיל מאוד פשוט, כל מה שהוא עושה זה למצוא אלמנטים בקוד עם השם של תיבת הטקסט שלנו ומשנה את ערך תיבת הטקסט. כמו כן נרשום את האירוע לOnLoad בתגית ה-&amp;lt;body&amp;gt;:  &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&amp;lt;body MS_POSITIONING=&amp;quot;GridLayout&amp;quot; onload=&amp;quot;testing();&amp;quot;&amp;gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;/font&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;p&gt;&lt;font size="4"&gt;4. נוסיף Label בצד שרת בשם lblTesting:  &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&amp;lt;asp:Label id=&amp;quot;lblTesting&amp;quot; style=&amp;quot;Z-INDEX: 103; LEFT: 488px; POSITION: absolute; TOP: 48px&amp;quot; runat=&amp;quot;server&amp;quot; Height=&amp;quot;128px&amp;quot; Width=&amp;quot;264px&amp;quot;&amp;gt;&amp;lt;/asp:Label&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;נוסיף באירוע ה-Page_load את הטקסט שיכניס את ערך תיבת הטקסט לתוך ה-Label:  &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&amp;nbsp; private void Page_Load(object sender, System.EventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; // Add TextBox value to Label&lt;br /&gt;&amp;nbsp;&amp;nbsp; lblTesting.Text += &amp;quot;TextBox Testing: &amp;quot; + tbxTest.Text + &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;כעת הטופס שלנו יראה בתצוגת Design כמו בתמונה הבאה:&lt;br /&gt; &lt;div align="center"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/TextBox.Readonlytrue_12CE9/image_2.png"&gt;&lt;img height="386" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/TextBox.Readonlytrue_12CE9/image_thumb.png" width="314" border="0" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;לפני שאנחנו מריצים את הטופס הזה בואו נחשוב שנייה מה עשינו ומה התוצאות האפשריות. יצרנו תיבת טקסט, יצרנו פונקציה בלקוח שמשנה את ערך תיבת הטקס וכפתור שיצור PostBack לשרת. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;אם ReadOnly=true בפקד TextBox נועל את הערך מצד השרת נצפה לראות את הערך המקורי של תיבת הטקסט, ללא קשר לאיזה שינויים בוצעו בצד לקוח. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;לעומת זאת, אם נראה ב-Label לאחר ה-PostBack את הערך החדש שנתנו לו בפונקציית הג&amp;#39;אווה סקריפט הוכחנו ש-Readonly=true בפקד TextBox אינו שומר על הערך בצד שרת. למעשה אם כך המצב מה שיתבצע הוא שהשרת שולח את תיבת הטקס כמו כל תיבה רגילה וקורא בחזרה את ערכה כמו כל תיבה רגילה. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;נריץ את הטופס בפעם הראשונה ונקבל את המסך שנראה כמו בתמונה הבאה:&lt;br /&gt; &lt;div align="center"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/TextBox.Readonlytrue_12CE9/image_6.png"&gt;&lt;img height="373" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/TextBox.Readonlytrue_12CE9/image_thumb_2.png" width="303" border="0" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt; &lt;p&gt;&lt;/p&gt;&lt;/font&gt; &lt;p&gt;&lt;font size="4"&gt;בצד הלקוח כבר השתנה ערך תיבת הטקסט. נלחץ על הכפתור, נגרום ל-PostBack ונקבל את התמונה הבאה: &lt;br /&gt; &lt;div align="center"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/TextBox.Readonlytrue_12CE9/image_4.png"&gt;&lt;img height="366" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/TextBox.Readonlytrue_12CE9/image_thumb_1.png" width="277" border="0" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt; &lt;p&gt;&lt;/p&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;מה שקיבלנו זה שקביעת TextBox עם תכונת Readonly=true למעשה &lt;b&gt;אינו מגן על הערך מפני שינוי בצד לקוח ולאחר מכן בצד שרת&lt;/b&gt;. השרת לוקח את ערך תיבת הטקסט מתוך הנתונים אשר הלקוח שולח לשרת ולא מתוך נתוני השרת. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;חשוב לזכור, לקבוע Readonly=true לתיבת טקסט הוא אפקט גרפי-ממשקי בלבד. ללא שום קשר ל-Validation ולכן כל שימוש בנתונים המופיעים בתיבות טקסט אלו אינו מאובטח ונוגד את ההיגיון העסקי שלנו. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;אם אתם באמת רוצים להציג תיבות טקסט כאלו בשביל ממשק המשתמש, זה בסדר. אבל הנתונים האלו &lt;b&gt;בלתי-אמינים&lt;/b&gt; בעליל לשימוש בהיגיון העסקי של האפליקציה שלנו.&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;כרגע זה היינו אנחנו (המפתחים של התוכנה) עם ג&amp;#39;אווה סקריפט, אבל מחר זה יכול להיות האקר ששומר את הדף על המחשב ועורך אותו. לא הייתם רוצים שהאקר יתחיל לערוך לכם את כל המסד לפי רצונו שכל מה שמגביל אותו זה להחדיר JavaScript לדף שגם ככה נמצא על המחשב שלו?&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;לסיכום ולחזרה בפעם שלישית, אין להשתמש ב-TextBox עם readonly=true במשהו כיותר מאפקט בממשק צד לקוח. הם אינם מאובטחים והמידע בהם נתון לשינויים בלתי רצויים. ואם כבר זה סה&amp;quot;כ אפקט בצד לקוח בכלל לא צריך לזה פקד. תחשבו לשנייה שאין שום סיבה שזה לא יהיה Literal control (פקד שאנחנו נכתוב לתוכו את ה-HTML שהוא יציג). &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;u&gt;&lt;b&gt;לקריאה נוספת:&lt;/u&gt;&lt;/b&gt; &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuiwebcontrolstextboxclassreadonlytopic.asp"&gt;TextBox.ReadOnly Property, ב-MSDN&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=142934" width="1" height="1"&gt;</description></item><item><title>Late Bound Data Expressions - הכוח שמאחורי הרעיון</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/09/21/late-bound-data-expressions.aspx</link><pubDate>Sat, 20 Sep 2008 21:23:25 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:142933</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>0</slash:comments><description>&lt;div dir="rtl" align="right"&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;שלום לכולם,&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;נתחיל בהגדרה כוללנית, Late Bound Data Expressions מיועדים לקבלת מידע (משתנים) בתצוגת עיצוב ולפרמט אותו לתצורה נבחרת. נעשה פירוש רש“י. ב”קבלת מידע (משתנים)” אנו מתכוונים כל אובייקט המכיל מידע, הכל ממחרוזות, DataReaderים וכלה ב-DataSetים. ב”בתצוגת עיצוב” אנו מתכוונים שבזמן שתמיד ניתן לשנות את תוכן המידע כחלק מה-Code Behind, ה-Late Bound Data Expressions מאפשרים לנו לשנות את המידע בתצוגת ה-Design. ב”פרמט אותו לתצורה נבחרת” אנו אומרים למעשה שאנו נקבל את הנתונים האלו ונגדיר להם אלגוריתם שהם יעברו לפני תצוגה ללקוח. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;ישנם שתי שיטות בנויות בדוט נט ל-Late Bound Data Expressions: הראשונה DataBinder.Eval, והשנייה String.Format. שתיהן למעשה מאפשרות לקחת מידע במהלך אירוע ה-OnDataBound ולהציגו או לשנות לו את אופי התצוגה. נסקור את שתי הפונקציות הללו במהלך אפשרויות א&amp;#39; ו-ב&amp;#39;. אם אתם כבר מכירים ומבינים את דרך פעולתם, אני ממליץ שתקפצו ישר לחלק ג&amp;#39;. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;u&gt;א.&amp;nbsp; DataBind my Page! (או, תראו את הפשטות)&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;בשיטה הזאת אנחנו עושים דבר מאוד הגיוני - DataBind לדף עצמו. נגדיר פקדים\משתנים ברמת הדף ונוכל לעשות להם DataBind. בואו נביט על דוגמה. החלטנו שאנו רוצים אפשרות לשנות בצורה תכנותית את הכותרת (&amp;lt;title&amp;gt;myTitle&amp;lt;/title&amp;gt;) של הדף. כידוע, אין כזאת אפשרות בנויה כחלק מהפקד System.Web.UI.Page. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;דבר ראשון נצהיר על משתנה מחרוזת חדש ברמת הדף. לאחר מכן, נכניס לתוכו ערך, נראה כיצד משלבים אותה בתצוגת Design ונעשה DataBind. הצהיר על המשתנה מחרוזת ברמת הדף ניתן לו ערך כלשהו: &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;...&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;public class testingWebForm : System.Web.UI.Page&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;{&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; // Declare Page Title string object&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; protected string myStr;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; private void Page_Load(object sender, System.EventArgs e)&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; {&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Place some value in Page Title&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; myStr = “פורום תפוז דוט נט“; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; /* פרסומת סמויה */&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;כמו כל String אחר ברמת ה-Page הצהרנו עליו ונתנו לו ערך. עכשיו הגיע הזמן להתחיל לראות חלק מהקסם של Late Bound Data Expressions. בתצוגת Design HTML של הדף נשנה את הערך של &amp;lt;title&amp;gt; כך שהוא יהיה ביטוי שעושה DataBind.&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;&amp;lt;%# myStr %&amp;gt;&amp;lt;/title&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;/head&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;...&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;ועכשיו נגיד שבאירוע Page_load שצריך לעשות Page.DataBind. &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;...&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;public class testingWebForm : System.Web.UI.Page&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;{&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; // Declare Page Title string object&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; protected string myStr;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; private void Page_Load(object sender, System.EventArgs e)&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; {&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Place some value in Page Title&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; myStr = “פורום תפוז דוט נט“; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; // DataBind the page itself!&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.DataBind();&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;}&lt;/font&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;ולהוכחה, בסופו של דבר קיבלנו: &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;head&amp;gt; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;פורום תפוז דוט נט&amp;lt;/title&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;עד כה הכל היה מאוד פשוט: עשינו DataBind לפקד ברמת הדף לתוך תצוגת ה-Design שלנו. בואו ניקח את זה צעד אחד קדימה וננסה לעשות DataBind לאובייקט יותר רציני מאשר String, למשל DropDownList. אנו רוצים שהטקסט של הפריט הנבחר ב-DropDownList יוצג כחלק מהדף לאחר PostBack. &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; // WebForm.aspx&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;!-- This DropDownList will contain two ListItems --&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;asp:DropDownList Runat=&amp;quot;server&amp;quot; ID=&amp;quot;myDDL&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ListItem&amp;gt;לאוטובוס עלתה גברת עם סלים&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ListItem&amp;gt;האוטובוס נסע לפני שהגברת עם הסלים עלתה&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/asp:DropDownList&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;!-- This Button Will case a PostBack and Call myBtn_Click --&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;asp:Button Runat=&amp;quot;server&amp;quot; Text=&amp;quot;Cause PostBack&amp;quot; OnClick=&amp;quot;myBtn_Click&amp;quot; id=&amp;quot;Button1&amp;quot; /&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;!-- This Late Data Bound expression will diplay what is the currently selected item&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;%# myDDL.SelectedItem.Text %&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;// WebForm.asp.cs&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public void myBtn_Click(object sender, System.EventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // On button click - DataBind the Page&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.DataBind(); &lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;מאוד פשוט וקל. נבחר ערך ב-DDL, נלחץ על הכפתור וכחלק מתהליך ה-DataBinding של הדף עצמו יוצג הטקסט של הפריט שנבחר. ולהוכחה, כאשר נבחר את “לאוטובוס עלתה גברת עם סלים” ונלחץ על הכפתור יודפס “לאוטובוס עלתה גברת עם סלים”. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;עד כאן ניקח את האפשרות הזאת, אבל חשוב לציין שכמובן שגם אפשר Page DataBinding לכל פקד ברמת הדף, החל מערכים של מחרוזות או מספרים, השעה הנוכחית וכלה במספר השורות בטבלה מסויימת ב-DataSet. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;u&gt;ב. DataBinder.Eval (או: כמו בלונדינית - טיפש וחמוד)&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;כאן מתגלה חלק מהיופי של Late Bound Data Expressions. השיטה DataBinder.Eval נמצאת בשימוש רב בפקדים DataGrid, DataList ו-Reapter. בפקדים אלו יש לנו אפשרות לכתוב כמעט את כל הקוד שמעצב את המידע בתצוגת Design. בואו נביט על מה למעשה קורה למשל ב-DataBinding מ-DataView: כאשר ביקשנו כזו DataBinding, כל שורה נשלחת כ-Container.DataItem ומבצעת DataBinding לקוד שמעצב את המידע. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;הנה טבלה לדוגמה שאיתה נעבוד עד סוף מאמר זה. הטבלה היא נשים זקנות עם סלים ומכילה שלושה עמודות: שם הגברת עם סלים, כמות הסלים ומחירם הסופי. &lt;/font&gt;&lt;/p&gt; &lt;p&gt; &lt;table style="width:474pt;border-collapse:collapse;" cellspacing="0" cellpadding="0"&gt;      &lt;tr style="height:18pt;"&gt; &lt;td class="xl31" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 0.5pt solid;width:197pt;border-bottom:windowtext 0.5pt solid;height:18pt;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;u&gt;&lt;font face="Arial" size="5"&gt;שם הגברת עם סלים&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl32" style="border-right:windowtext 0.5pt solid;border-top:windowtext 1pt solid;border-left:windowtext 0.5pt solid;width:134pt;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;u&gt;&lt;font face="Arial" size="5"&gt;כמות הסלים&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl33" style="border-right:windowtext 0.5pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;width:143pt;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;u&gt;&lt;font face="Arial" size="5"&gt;מחיר הסלים&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height:18pt;"&gt; &lt;td class="xl35" style="border-right:windowtext 1pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;height:18pt;background-color:transparent;"&gt; &lt;div dir="ltr" align="center"&gt;&lt;font face="Arial" size="4"&gt;strOldLadyWithBags_name &lt;/font&gt;&lt;/div&gt;&lt;/td&gt; &lt;td class="xl34" style="border-right:windowtext 0.5pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;div dir="ltr" align="center"&gt;&lt;font face="Arial" size="4"&gt;intNumberOfBags &lt;/font&gt;&lt;/div&gt;&lt;/td&gt; &lt;td class="xl26" style="border-right:windowtext 0.5pt solid;border-left:windowtext 1pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;intFinalCost&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height:18pt;"&gt; &lt;td class="xl24" style="border-right:windowtext 1pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;height:18pt;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;לאה&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl25" style="border-right:windowtext 0.5pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;2&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl26" style="border-right:windowtext 0.5pt solid;border-left:windowtext 1pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;10&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height:18pt;"&gt; &lt;td class="xl24" style="border-right:windowtext 1pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;height:18pt;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;אסתר&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl25" style="border-right:windowtext 0.5pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;8&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl27" style="border-right:windowtext 0.5pt solid;border-left:windowtext 1pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;2,000&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height:18.75pt;"&gt; &lt;td class="xl28" style="border-right:windowtext 1pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 1pt solid;height:18.75pt;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;סימה&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl29" style="border-right:windowtext 0.5pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 1pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;4&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl30" style="border-right:windowtext 0.5pt solid;border-left:windowtext 1pt solid;border-top-color:windowtext;border-bottom:windowtext 1pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;50&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;בואו נביט לשנייה על דוגמה פשוטה. אנו רוצים להציג בפקד DataList רשימה של השמות של נשים זקנות עם סלים. &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;asp:DataList id=&amp;quot;myDataList&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; לגברת עם הסלים קוראים &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial"&gt;&lt;font size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;lt;%# DataBinder.Eval(Container.DataItem, &amp;quot;strOldLadyWithBags_name&amp;quot;)%&amp;gt;&lt;/strong&gt;&lt;/font&gt; &lt;br /&gt;&lt;/font&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;/ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;/asp:DataList&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;נניח ועשינו שאילתא שמחזירה שמות של של נשים זקנות עם סלים ול-DataView שלה עשינו DataBind ל-myDataList. כמו כן נניח שהרשימה מחזירה: לאה, אסתר וסימה. אם נריץ את הדף נקבל: “לגברת עם הסלים קוראים לאה. לגברת עם הסלים קוראים אסתר. לגברת עם הסלים קוראים סימה“. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;נמשיך עם הדוגמה ונבקש בנוסף את מספר הסלים שכל גברת עם סלים עלתה לאוטובוס וכמה היא שילמה בחנות על הסלים שלה. &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;asp:DataList id=&amp;quot;myDataList&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;lt;%# DataBinder.Eval(Container.DataItem, &amp;quot;strOldLadyWithBags_name&amp;quot;)%&amp;gt;&lt;/strong&gt;&amp;nbsp;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; עלתה לאוטובוס עם &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;lt;%# DataBinder.Eval(Container.DataItem, &amp;quot;intNumberOfBags&amp;quot;)%&amp;gt;&lt;/strong&gt;&amp;nbsp;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; סלים&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; שעלו סה“כ&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial"&gt;&lt;strong&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;%# DataBinder.Eval(Container.DataItem, &amp;quot;intFinalCost&amp;quot;)%&amp;gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;/ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;/asp:DataList&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;br /&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;אם נריץ הדוגמה נקבל “לאה עלתה לאוטובוס עם 4 סלים שעלו סה“כ 100. אסתר עלתה לאוטובוס עם 8 סלים שעלו סה“כ 2,000. סימה עלתה לאוטובוס עם 2 סלים שעלו סה”כ 50.”. עד עכשיו, הראנו כיצד בתוך ItemTemplete של DataList, DataGrid ו-Repeater ניתן להציג מידע בצורה חוזרת מתוך מסד הנתונים. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;עכשיו בואו ונכיל איזהשהו פורמט על אחד הנתונים. נכון שזה נראה מצחיק שרשום שארבעה הסלים של לאה עלו מאה? מאה מה? מאה רובל? מאה שקלים? מאה דולר? אנו צריכים להבהיר כי מדובר בסוג של מטבע. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial"&gt;&lt;font size="4"&gt;השיטה DataBinder.Eval מקבלת שלושה פרמטרים: הפקד שמכיל את המידע (DataContainer), לאיזה שדה\תא אנו מתייחסים בפקד שמכיל את המידע והשלישי שהוא אופציונאלי זה כיצד לפרמט את המחרוזת. בואו נראה דוגמה כיצד נפרמט את מחיר הסלים כך שיהיה בתצורת מטבע. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;asp:DataList id=&amp;quot;myDataList&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%# DataBinder.Eval(Container.DataItem, &amp;quot;strOldLadyWithBags_name&amp;quot;)%&amp;gt; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; עלתה לאוטובוס עם &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%# DataBinder.Eval(Container.DataItem, &amp;quot;intNumberOfBags&amp;quot;)%&amp;gt; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; סלים&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; שעלו סה“כ&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial"&gt;&lt;strong&gt;&lt;font size="4"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;%# DataBinder.Eval(Container.DataItem, &amp;quot;intFinalCost&amp;quot;, {0:c})%&amp;gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;/ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;/asp:DataList&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;וכאשר נציג את המסך נראה:&lt;/font&gt;&amp;nbsp;&lt;font face="Arial" size="4"&gt; “לאה עלתה לאוטובוס עם 4 סלים שעלו סה“כ 100₪. אסתר עלתה לאוטובוס עם 8 סלים שעלו סה“כ 2,000₪. סימה עלתה לאוטובוס עם 2 סלים שעלו סה”כ 50₪.” &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;נכון שזה נראה הרבה יותר טוב? ישנן אפשרויות רבות רבות להכיל פורמט תצוגה מסויים על מידע. אפשר לפרמט תאריך להיות תאריך ארוך, קצר, לפי שעון בינלאומי, לועזי קצר, אירופאי קצר. אפשר לפרמט שעות להכיל רק שעות, רק שעות ודקות, להציג AM/PM. אפשר לפרמט להציג מספר כמטבע, כאחוזים, כמספר מדעי, לאכוף מספר ספרות אחרי הנקודה. והאפשרויות רבות. כנראה שהחבר&amp;#39;ה במיקרוסופט באמת חשבו על לפרמט נתונים שונים לפורמטים מסויימים כשהם יצרו את האפשרות הזאת. בהמשך נראה את הכוח האמיתי של Late Bound Data Expressions.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;u&gt;ב. String.Format (או: יותר מרחב פעולה, הרבה יותר פעולות סיזיפיות)&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;DataBinder.Eval עושה בשבילנו שתי פעולות: הראשונה, חוסכת מאתנו פעולות סיזפיות של המרה לפני שנוכל לגשת למידע. השנייה, אם ביקשנו לפרמט את המידע היא קוראת בשבילנו ל-String.Format. מבחינת נקודת המבט שלנו מדובר על מתודות שקולות ועד סוף האפשרות הזו נדגים זאת. &lt;/p&gt; &lt;p&gt;מה זאת אומרת ש-DataBinder.Eval חוסכת מאתנו פעולות סיזפיות של המרה? בואו נביט על כיצד הדוגמה למעלה הייתה נראית אם היינו עושים אותה ב-String.Format: &lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;asp:DataList id=&amp;quot;myDataList&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;lt;%# String.Format(&amp;quot;{0}&amp;quot;, ((DataRowView)Container.DataItem) [&amp;quot;strOldLadyWithBags_name&amp;quot;]) &lt;/strong&gt;&lt;/font&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;%&amp;gt;&lt;/strong&gt;&amp;nbsp;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; עלתה לאוטובוס עם &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%# String.Format(&amp;quot;{0}&amp;quot;, ((DataRowView)Container.DataItem) [&amp;quot;intNumberOfBags&amp;quot;]) &lt;font face="Arial" size="4"&gt;%&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; סלים&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; שעלו סה“כ&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%# String.Format(&amp;quot;{0:c}&amp;quot;, ((DataRowView)Container.DataItem) [&amp;quot;intFinalCost&amp;quot;]) &lt;font face="Arial" size="4"&gt;%&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;/ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;/asp:DataList&amp;gt;&lt;/font&gt;&lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;פשוט מאוד לראות שעכשיו בכל DataBind צריך לעשות גם המרה (Casting) של Contrainer.DataItem לסוג DataRowView ולגשת לתא מסויים בתוכו לפי שם העמודה. כמו כן שימו לב ש-intFinalCost (עלות הסלים) עדיין בפורמט של מטבע. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;למרות שהפתרון למעלה רץ ושקול לחלוטין מבחינה תחבירית לדוגמה של DataBinder.Eval, יש דרך יותר מקצועית לכתוב את הקוד למעלה:&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;asp:DataList id=&amp;quot;myDataList&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%# String.Format(“{0} עלתה לאוטובוס עם {1} סלים במחיר {2:c}“,&lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((DataRowView)Container.DataItem) [&amp;quot;strOldLadyWithBags_name&amp;quot;]), &lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((DataRowView)Container.DataItem) [&amp;quot;intNumberOfBags&amp;quot;]), &lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((DataRowView)Container.DataItem) [&amp;quot;intFinalCost&amp;quot;])&amp;nbsp;&amp;nbsp; %&amp;gt; &lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt;&lt;strong&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;/ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;/asp:DataList&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;המשפט שכתבנו, {0} עלתה לאוטובוס עם {1} סלים במחיר {c:2}, דומה מאוד למשפט מוכר של Console.WriteLine. למעשה הוא מציב את הערכים שבאים אחריו לתוכו בתוך משפט. שתי פעולות מתבצעות: פירמוט לתוך המשפט, פירמוט אישי לכל נתון (למשל, הפירמוט של המחיר למטבע). הדוגמה הזאת שקולה לחלוטין מבחינת תוצאות לדוגמה שלפניה. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;u&gt;ג. String.Format ופונקציות (או: כמה פשוט לשכלל מקרי קצה)&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;עד עכשיו עבדנו עם נתונים יפים ועגולים, לכל גברת עם סלים באמת יש סלים, לכל גברת יש שם, וכל סכום סלים הוא לא אפס. נשנה קצת את הנתונים המושלמים שלנו:&lt;/p&gt; &lt;p&gt; &lt;table style="width:474pt;border-collapse:collapse;" cellspacing="0" cellpadding="0"&gt;      &lt;tr style="height:18pt;"&gt; &lt;td class="xl31" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 0.5pt solid;width:197pt;border-bottom:windowtext 0.5pt solid;height:18pt;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;u&gt;&lt;font face="Arial" size="5"&gt;שם הגברת עם סלים&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl32" style="border-right:windowtext 0.5pt solid;border-top:windowtext 1pt solid;border-left:windowtext 0.5pt solid;width:134pt;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;u&gt;&lt;font face="Arial" size="5"&gt;כמות הסלים&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl33" style="border-right:windowtext 0.5pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;width:143pt;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;u&gt;&lt;font face="Arial" size="5"&gt;מחיר הסלים&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height:18pt;"&gt; &lt;td class="xl35" style="border-right:windowtext 1pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;height:18pt;background-color:transparent;"&gt; &lt;div dir="ltr" align="center"&gt;&lt;font face="Arial" size="4"&gt;strOldLadyWithBags_name &lt;/font&gt;&lt;/div&gt;&lt;/td&gt; &lt;td class="xl34" style="border-right:windowtext 0.5pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;div dir="ltr" align="center"&gt;&lt;font face="Arial" size="4"&gt;intNumberOfBags &lt;/font&gt;&lt;/div&gt;&lt;/td&gt; &lt;td class="xl26" style="border-right:windowtext 0.5pt solid;border-left:windowtext 1pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;intFinalCost&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height:18pt;"&gt; &lt;td class="xl24" style="border-right:windowtext 1pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;height:18pt;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;לאה&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl25" style="border-right:windowtext 0.5pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;2&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl26" style="border-right:windowtext 0.5pt solid;border-left:windowtext 1pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;10&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height:18pt;"&gt; &lt;td class="xl24" style="border-right:windowtext 1pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;height:18pt;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;&lt;strong&gt;null&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl25" style="border-right:windowtext 0.5pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;8&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl27" style="border-right:windowtext 0.5pt solid;border-left:windowtext 1pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;2,000&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height:18.75pt;"&gt; &lt;td class="xl28" style="border-right:windowtext 1pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 1pt solid;height:18.75pt;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;סימה&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl29" style="border-right:windowtext 0.5pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 1pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;4&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl30" style="border-right:windowtext 0.5pt solid;border-left:windowtext 1pt solid;border-top-color:windowtext;border-bottom:windowtext 1pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;100&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;שימו לב לשינוי: אסתר שכחה את תג השם שלה ב-Dot net on the beach. אם ננסה להריץ את הדוגמה הקודמת (מועתקת למטה) נקבל: “לאה עלתה לאוטובוס עם 2 סלים במחיר 10₪. עלתה לאוטובוס עם 8 סלים במחיר 2,000₪. סימה עלתה לאוטובס עם 4 סלים במחיר 100₪.“. &lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;asp:DataList id=&amp;quot;myDataList&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%# String.Format(“{0} עלתה לאוטובוס עם {1} סלים במחיר {2:c}“,&lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((DataRowView)Container.DataItem) [&amp;quot;strOldLadyWithBags_name&amp;quot;]), &lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((DataRowView)Container.DataItem) [&amp;quot;intNumberOfBags&amp;quot;]), &lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((DataRowView)Container.DataItem) [&amp;quot;intFinalCost&amp;quot;])&amp;nbsp;&amp;nbsp; %&amp;gt; &lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt;&lt;strong&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;/ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;/asp:DataList&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;בתקווה אתם כמתכנתים מבינים את התוצאה של הקוד הזה ואת הסיבות שהוא נוצר, אבל אני מבטיח לכם ששום לקוח-קצה לא יבין מה רוצים מהחיים שלו. צריך לפרמט עוד קצת את הנתונים. ניצור פונקציה&amp;nbsp; שתקבל את שם הגברת עם סלים ויחזיר “גברת ללא שם“ אם הוא ריק. &lt;/p&gt;&lt;/font&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;namespace myProject &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;{&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public class myPage : System.Web.UI.Page&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; {&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; public string FormatGivratName(object GivartName)&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check if Givart Im Salim has name&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (GivartName == null) &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; // If Givart Im Salim has no name &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return “גברת ללא שם“;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { // Givart Im Salim has name&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return GivartName.ToString();&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;}&lt;br /&gt;&lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;נביט על הפונקציה הזאת. היא תקבל מחרוזת שהיא השם של הגברת, אם השם ריק היא תחזיר “גברת ללא שם“ ואחרת תחזיר את השם מיוצג כמחרוזת. ניישם את הפונקציה הזאת על הדוגמה למעלה: &lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;asp:DataList id=&amp;quot;myDataList&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%# String.Format(“{0} עלתה לאוטובוס עם {1} סלים במחיר {2:c}“,&lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;FormatGivratName(&lt;/strong&gt;((DataRowView)Container.DataItem) [&amp;quot;strOldLadyWithBags_name&amp;quot;])&lt;strong&gt;)&lt;/strong&gt;, &lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((DataRowView)Container.DataItem) [&amp;quot;intNumberOfBags&amp;quot;]), &lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((DataRowView)Container.DataItem) [&amp;quot;intFinalCost&amp;quot;])&amp;nbsp;&amp;nbsp; %&amp;gt; &lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt;&lt;strong&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;/ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;/asp:DataList&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;כאשר נריץ את הדוגמה הזאת נקבל: “לאה עלתה לאוטובוס עם 2 סלים במחיר 10₪. &lt;strong&gt;גברת ללא שם&lt;/strong&gt; עלתה לאוטובוס עם 8 סלים במחיר 2,000₪. סימה עלתה לאוטובס עם 4 סלים במחיר 100₪.“&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;כמו שפירמטנו נתון אחד לפי תנאי מאוד קל, אפשר גם לפרמט כל נתון אחר לפי כל תנאי שנבחר. שימוש נפוץ בטכניקה הזאת היא כאשר אנו מחזירים ממסד הנתונים סימול שהפירוש שלו לא במסד הנתונים, אפשר להשתמש בכזו פונקציה בכדי להחליף את הסימול בטקסט המתאים ובכך ליישם Late Bound Data Expressions. למעשה הכוח של הפונקציות האלו שהוא נותן לנו את האפשרות לפרמט איך שנרצה את הנתונים שאנו מקבלים וכל זאת מתוך תצוגת Design של האפליקציה שלנו. &lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;u&gt;ד. רק פונקציות (או: When the *** hits the fan we get gold)&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;נשנה עוד את הטבלה שלנו: &lt;/p&gt; &lt;p&gt; &lt;table style="width:474pt;border-collapse:collapse;" cellspacing="0" cellpadding="0"&gt;      &lt;tr style="height:18pt;"&gt; &lt;td class="xl31" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 0.5pt solid;width:197pt;border-bottom:windowtext 0.5pt solid;height:18pt;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;u&gt;&lt;font face="Arial" size="5"&gt;שם הגברת עם סלים&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl32" style="border-right:windowtext 0.5pt solid;border-top:windowtext 1pt solid;border-left:windowtext 0.5pt solid;width:134pt;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;u&gt;&lt;font face="Arial" size="5"&gt;כמות הסלים&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl33" style="border-right:windowtext 0.5pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;width:143pt;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;u&gt;&lt;font face="Arial" size="5"&gt;מחיר הסלים&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height:18pt;"&gt; &lt;td class="xl35" style="border-right:windowtext 1pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;height:18pt;background-color:transparent;"&gt; &lt;div dir="ltr" align="center"&gt;&lt;font face="Arial" size="4"&gt;strOldLadyWithBags_name &lt;/font&gt;&lt;/div&gt;&lt;/td&gt; &lt;td class="xl34" style="border-right:windowtext 0.5pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;div dir="ltr" align="center"&gt;&lt;font face="Arial" size="4"&gt;intNumberOfBags &lt;/font&gt;&lt;/div&gt;&lt;/td&gt; &lt;td class="xl26" style="border-right:windowtext 0.5pt solid;border-left:windowtext 1pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;intFinalCost&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height:18pt;"&gt; &lt;td class="xl24" style="border-right:windowtext 1pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;height:18pt;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;לאה&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl25" style="border-right:windowtext 0.5pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl26" style="border-right:windowtext 0.5pt solid;border-left:windowtext 1pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height:18pt;"&gt; &lt;td class="xl24" style="border-right:windowtext 1pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;height:18pt;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;null&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl25" style="border-right:windowtext 0.5pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;8&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl27" style="border-right:windowtext 0.5pt solid;border-left:windowtext 1pt solid;border-top-color:windowtext;border-bottom:windowtext 0.5pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;2,000&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height:18.75pt;"&gt; &lt;td class="xl28" style="border-right:windowtext 1pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 1pt solid;height:18.75pt;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;סימה&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl29" style="border-right:windowtext 0.5pt solid;border-left:windowtext 0.5pt solid;border-top-color:windowtext;border-bottom:windowtext 1pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;4&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="xl30" style="border-right:windowtext 0.5pt solid;border-left:windowtext 1pt solid;border-top-color:windowtext;border-bottom:windowtext 1pt solid;background-color:transparent;"&gt; &lt;p align="center"&gt;&lt;font face="Arial" size="5"&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;השינויים: לאה אומנם גברת אבל בלי סלים ואיזה משתמש גאון החליט להוסיף אותה לרשימה , וסימה בכלל ביצעה הימלטות נועזת מקוסמוס בלי לשלם. &lt;/p&gt;&lt;/font&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;אם נריץ את הדוגמה לעיל עם הנתונים האלו נקבל: “לאה עלתה לאוטובוס עם 0 סלים במחיר 0₪.גברת ללא שם עלתה לאוטובוס עם 8 סלים במחיר 2,000₪. סימה עלתה לאוטובס עם 4 סלים במחיר 0₪.“&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;למרות שהכל מודפס ויחסית ברור, הנתונים עצמם נראים מגוחך. מה זה 0 סלים של לאה? ללאה אין סלים!&amp;nbsp; מה זה מחיר 0 ש”ח? זה חינם! ככה אנחנו רוצים שיראה בסוף המשפט שלנו: “לאה עלתה לאוטובוס בלי סלים. גברת ללא שם עלתה לאוטובוס עם 8 סלים במחיר 2,000₪. סימה עלתה לאוטובס עם 4 סלים בחינם.“&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;אין לנו אפשרות להמשיך יותר הלאה עם String.Format אם אנחנו רוצים שהמשפטים שלנו יהיו הגיוניים עם תחביר נורמלי.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;ועכשיו שאלה, עד כה עבדנו עם String.Format ו-DataBinder.Eval שהן סה”כ פונקציות שמקבלות נתונים ומחזירות מחרוזת. בואו גם אנחנו נבנה אחת כזאתי במיוחד לדוגמה הזאת! &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;הפונקציה שלנו תקבל: שם הגיברת עם סלים, כמות הסלים ומחיר הסלים ותחזיר מחרוזת לפי הדוגמאות למעלה.&amp;nbsp; היא גם תשתמש בפונקציה מהדוגמה הקודמת. &lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;using System.Text;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;...&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;namespace myProject &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;{&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public class myPage : System.Web.UI.Page&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; {&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; public string FormatGivrat(object strGivartName, object intSalimAmount, object intPrice)&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Use a stringBuilder &lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuilder mySB = new StringBuilder();&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp; &lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Add GivartName to mySB&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mySB.Append(FormatGivratName(strGivartName));&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mySB.Append(“ עלתה לאוטובוס“);&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check if Givart Has salim&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((intSalimAmount == null) || (intSalimAmount.ToString() == “0“))&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { // Givart Doesn&amp;#39;t have Salim&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mySB.Append(“ ללא סלים.“);&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { // Givart Has Salim&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mySB.Append(“ עם “ +&amp;nbsp; intSalimAmount.ToString() + “ סלים“);&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check If there is a Price&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((intPrice == null) || (intPrice.ToString() == “0“))&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { // No price&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mySB.Append(” בחינם.”); &lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { // there is a price&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mySB.Append(“ במחיר “);&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Add intPrice and format it to Currency&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mySB.Append( String.Format( “{0:c}“, intPrice.ToString() ) );&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Return result from StringBuilder&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return mySB.ToString(); &lt;/div&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&lt;/div&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; public string FormatGivratName(object GivartName)&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check if Givart Im Salim has name&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (GivartName == null) &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; // If Givart Im Salim has no name &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return “גברת ללא שם“;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { // Givart Im Salim has name&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return GivartName.ToString();&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;}&lt;br /&gt;&lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;נקרא לפונקציה מתוך הקוד בתצוגת Design:&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;asp:DataList id=&amp;quot;myDataList&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%# &lt;strong&gt;FormatGivrat(&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font size="4"&gt;&lt;font face="Arial"&gt;((DataRowView)Container.DataItem) [&amp;quot;strOldLadyWithBags_name&amp;quot;]), &lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((DataRowView)Container.DataItem) [&amp;quot;intNumberOfBags&amp;quot;]), &lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((DataRowView)Container.DataItem) [&amp;quot;intFinalCost&amp;quot;]) &lt;strong&gt;)&lt;/strong&gt;&amp;nbsp;&amp;nbsp; %&amp;gt; &lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt;&lt;strong&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;/ItemTemplate&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;/asp:DataList&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;והתוצאה עכשיו אכן תהיה: “לאה עלתה לאוטובוס בלי סלים. עלתה לאוטובוס עם 8 סלים במחיר 2,000₪. סימה עלתה לאוטובס עם 4 סלים בחינם.“&lt;/p&gt; &lt;p&gt;הכוח שקיבלנו עכשיו זה להפסיק את התלות הנמשכת בפונקציות כמו String.Format ו-DataBinder.Eval ואם אנו צריכים ליישם חוקיות משלנו מסיבות של תחביר או תצוגה או כל דבר, נוכל לעשות זאת מתוך תצוגת Design.&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;u&gt;אחרית דבר&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;במאמר זה סקרנו את מגוון האפשרויות הקיימות לפירמוט מחרוזות מתוך תצוגת Design. התחלנו מלעבוד על הפונקציה DataBinder.Eval הבסיסית שכולם מכירים. עברנו ל-String.Format שמאוד דומה (ולמעשה גם היה אפשר לעשות עם DataBinder.Eval את כל מה שעשינו עם String.Format).&amp;nbsp; אחר כך הראנו מצב שבו עיצוב סטטי רגיל והצבת ערכים פשוט לא מתאימים. אצלנו זה היה מהסיבה של תחביר עברי, אבל יש עוד מגוון סיבות שהעתקה של הנתונים אחד-על-אחד לא מתאימים וצריך לשלב חוקיות משלנו. אחר כך הראנו כיצד לעבוד אם כל הביטוי עצמו בתוך &amp;lt;itemTemplete&amp;gt; צריך חוקיות משלו. &lt;/p&gt; &lt;p&gt;כמו כל דבר בדוט נט, כל אפשרות היא האפשרות הנכונה אבל צריך לבחור בקפידה את הכלי שבו נחליט לגשת לבעיה. אישית: אם מדובר בהצבת נתונים רגילה הייתי משתמש ב-DataBinder.Eval. אם מדובר בהצבת נתונים לביטוי שמכיל יותר מנתון אחד הייתי משתמש ב-String.Format.&amp;nbsp; אם יש כמה נתונים שצריכים פירמוט שלא בנוי במערכת הייתי משתמש בפונקציות המיוחדות בשילוב עם String.Format. אם כל הביטוי צריך להשתנות לפי תוכן הנתונים הייתי משתמש בפונקציה מיוחדת. הכלי המתאים לעבודה הנכונה זה הכלל הכי חשוב. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=142933" width="1" height="1"&gt;</description></item><item><title>קונפיגיורציה לאפליקציות בקובץ ה-web.config, מדוע וכיצד?</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/09/21/web-config.aspx</link><pubDate>Sat, 20 Sep 2008 21:22:52 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:142932</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>1</slash:comments><description>&lt;div dir="rtl" align="right"&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;&lt;/i&gt;קדם דבר: &lt;/i&gt;&lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;שלום לכולם,&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;במאמר נערוך סקירה על מגוון האפשרויות לשמירה של קונפיגיורציה לאפליקציות (Application Configuration) בתוך קובץ ה-web.config. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;שתי השאלות הראשונות שנשאל הן: מהי קונפיגיורציה אפלקטיבית? ומדוע לשמור ב-web.config?&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;ישנם נתונים בכל אפליקציה שאין צורך או יכולת לשמור במסד נתונים, למשל: רשימת סוגי מוצרים ואת מחרוזת החיבור למסד הנתונים. נהוג לשמור את מרבית הנתונים מהסוג הזה בקובץ XML חיצוני שיושב באפליקציה. ניצמד לדוגמאות שהעלינו קודם: רשימת סוגי מוצרים ומחרוזת חיבור. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;את רשימת סוגי המוצרים במסד NorthWind, אפשר לשמור בקובץ XML בתוך האפליקציה. הרי מדובר על רשימה של מעט פריטים, שמיועדים בעיקר לקריאה, וביצוע שינויים מתרחש לעיתים רחוקות. זה יהיה הגיוני לחלוטין ליצור קובץ XML בתוך האפליקציה לשמור נתונים שעונים לקריטריונים הללו. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;למה לשמור את מחרוזת החיבור בקובץ XML חיצוני למשל ולכתוב אותה בגוף הקוד (Hard-coded)? מחר עוברים שרת מסד נתונים, אז מה תעשו? תעברו קובץ קובץ באפליקציה ותשנו את מחרוזת החיבור? זה רק הגיוני לשמור את הנתון הזה במקום אחד כדי להקל על פריסת האפליקציה ועל התחזוקה שלה. סיכמנו שנשמור את מחרוזת החיבור בקובץ XML. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;שני הנתונים לדוגמה שהעלנו נשמור בקבצי XML. אבל יש ביניהם הבדל מהותי: אחד הוא מידע\נתון אפלקטיבי (Application Data)&amp;nbsp; והשני הוא קונפיגיורציה אפלקטיבית (Application Configuration). מידע אפלקטיבי זה נתונים שדרושים לאפליקציה מבחינת הנתונים אשר היא מכילה. לעומת זאת, קונפיגיורציה אפלקטיבית אלו נתונים אשר נדרשים לאפליקציה לפעול מבחינה שבעלדיהם לא תוכל לרוץ. אלו הם הנתונים שנדרשים להפעיל את האפליקציה. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;עכשיו בואו נעמוד על ההבדל בין כל קובץ XML לבין קובץ ה-web.config. יש הבדל אחד ויחיד שמעניין אותנו כרגע - כאשר משנים את קובץ ה-web.config כל האפליקציה עושה ריסטרט. הווה אומר, ברגע ששיניתי איזהשהו נתון בקובץ האפליקציה מתאתחלת בכדי לפעול על פי ה-web.config הכי עדכני. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;אם נשמור את רשימת סוגי המוצרים שלנו ב-web.config לאחר כל שינוי ברשימת סוגי המוצרים האפליקציה תאתחל, ולא רק שאין שום צורך בזה - זה גם יפגע בתפקוד השוטף של האפליקציה. לעומת זאת, אם שנינו את מחרוזת החיבור של למסד הנתונים &lt;strong&gt;נרצה&lt;/strong&gt; שהאפליקציה תאתחל בכדי שתפעל על השרת\המשתמש הנכון. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;החלטנו שאת כל הנתונים של קונפיגיורציה אפלקטיבית נרצה לשמור ב-web.config. עכשיו נסקור את הדרכים האפשריות לעשות זאת. חשוב לציין שהסקירה היא ברמת קושי הולכת ועולה ובהתאם האפשרויות שנפתחות בפנינו בכל רמה הן גדולות יותר. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;u&gt;&lt;font face="Arial" size="4"&gt;אופציה א&amp;#39;:&amp;nbsp; appSettings (או “הדרך הקלה, הטיפשה והפשוטה“)&lt;/font&gt;&lt;/u&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;לפני שנתחיל להתעסק עם האפשרות הראשונה והשנייה לבצע את זה צריך לסקור מושג יסוד: &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial"&gt;&lt;font size="4"&gt;&lt;strong&gt;&lt;u&gt;key/value pairs (בעברית: זוגות מפתח-ערך):&lt;/u&gt;&lt;/strong&gt; הרעיון והביצוע מאוד פשוטים, ניצור תגיות שיש להן שתי XML attributes. התכונה ראשונה, key, שתשמש אותנו כמפתח ראשי לחפש ערך ספציפי. התכונה השנייה, Value, תקבע ערך לאותו מפתח. ככה למשל יכול להיות לי מפתח בשם “DataBaseConnectionString“ אשר ערכו הוא מחרוזת החיבור למסד הנתונים.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;כל זוג מפתח-ערך חייב לשבת בתוך תגית XML ראשית אשר מכילה אותו וזוגות מפתחות-ערכים נוספים. ביחס לאותה תגית XML ראשית אפשר לבצע שלוש פעולות: add, remove, clear. כשמו כן הוא add מוסיף מפתח עם ערך לתגית ה-XML. פעולת ה-remove מורידה מפתח מתגית ה-XML. ופעולת clear מורידה את כל המפתחות מתגית ה-XML. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;במקום להגיד “תגית XML ראשית“ נדבר על אוסף אמיתי - אוסף appSettings. לאוסף זה ניתן להוסיף, להוריד ולנקות ערכים. אוסף זה הוא תגית אפשרית בתוך קובץ ה-web.config. בואו נביט על דוגמה:&lt;/font&gt;&lt;/p&gt; &lt;blockquote dir="rtl" style="margin-left:0px;"&gt; &lt;blockquote dir="rtl" style="margin-left:0px;"&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;appSettings&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key=&amp;quot;DataBaseConnectionString&amp;quot; value=&amp;quot;data source=ServerName; initial catalog= Northwind;&amp;quot; /&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/appSettings&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;בקוד למעלה הוספנו מפתח DataBaseConnectionString עם הערך: “data source=ServerName; initial catalog= Northwind;“. אם נחליט בעוד שעה להתחבר למסד נתונים ערך, כל מה שנצטרך זה לשנות את הערך בתוך web.config. אם מחר עוברים מבנייה בסביבת פיתוח לסביבת ריצה כל מה שנצטרך לעשות זה לשנות את שם השרת בתוך web.config. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;כדי לראות את המפתח-ערך שהוספנו צריך להשתמש במרחב השמות System.Configuration. &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;using System.Configuration;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;...&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;private void Page_Load(object sender, System.EventArgs e)&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;{&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; // We can print out the value from the web.config:&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; Response.Write(System.Configuration.ConfigurationSettings.AppSettings[&amp;quot;DataBaseConnectionString&amp;quot;]);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; // shorter way:&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; Response.Write(ConfigurationSettings.AppSettings[&amp;quot;DataBaseConnectionString&amp;quot;]);&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; // Or we can set the ConnectionString of our Connection to it:&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; SqlConnection conSql = new SqlConnection();&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; conSql.ConnectionString = ConfigurationSettings.AppSettings[&amp;quot;DataBaseConnectionString&amp;quot;];&lt;br /&gt;} &lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;כמובן שניתן לעשות עוד המון דברים עם appSettings. אפשר להוסיף עוד מפתחות-ערכים וליישם אותם במקומות שונים באפליקציה.&amp;nbsp; כמו בכל אוסף מפתחות-ערכים גם אפשר להוריד (remove) או לנקות (clear) ערכים מתוך האוסף.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;u&gt;&lt;font face="Arial" size="4"&gt;אופציה ב&amp;#39;:&amp;nbsp; Custom Web.config tags, configSections (או “מאמא מיה Handlerים!“) &lt;/font&gt;&lt;/u&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;עבדתם עם appSettings ונהניתם, והיה כיף, והכל פנאן. אבל יום אחד מבקשים ממכם לשמור רשימת נתוני קונפיגיורציה אפלקטיבית. למשל, מקרה שקרה לי, היו לאפליקציית אינטרנט שכתבנו שלושה עיצובים אפשריים: אחד לפיתוח, אחד לריצה ואחד לבדיקות. לשם הדוגמה, ההבדל היה צבע הרקע וצבע הפונט. בפיתוח רצינו צבע רקע לבן נעים לעין וצבע פונט שחור, בריצה רצינו צבע רקע כחול וצבע פונט לבן, ובבדיקות רצינו צבע רקע אדום-דם וצבע פונט צהוב כדי שיכאב ל-QAים בעיינים. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;איך נכתוב את זה ב-appSetting? אנחנו לא. במקום זה ניצור תגית XML חדשה (Custom XML tags) לכל תגית. אבל במקום להגיד תגית XML חדשה נגיד - Section. נבנה שלושה Section-ים חדשים כ-XML רגיל. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;Riza&amp;gt; &amp;lt;!-- קונפיגיורציה לריצה --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;blue&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;white&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/Riza&amp;gt;&lt;br /&gt;&amp;lt;Pitoch&amp;gt; &amp;lt;!-- קונפיגיורציה לפיתוח --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;white&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;black&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/Pitoch&amp;gt;&lt;br /&gt;&amp;lt;Testing&amp;gt; &amp;lt;!-- קונפיגיורציה לבדיקות --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;red&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;yellow&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/Testing&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;בקוד למעלה הוספנו שלושה Sectionים חדשים והוספנו להם את המפתחות-ערכים המתאימים. נעתיק את הטקסט הזה ל-web.config. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;עכשיו כל זה היה קצת פשוט מדי, נכון? אז הגיע הזמן לסבך. אי-אפשר סתם ליצור Sectionים חדשים. לא כותבים Sectionים איך שבא לנו ומקווים שה-web.config ידע לקרוא אותם. לא, צריך להגיד ל-web.config מי בדיוק יטפל בהם. הגדרנו Sectionים חדשים וכעת נקבע מי יטפל בכל אחד מהם. בשביל זה נוסיף את תגית ה-&amp;lt;configSections&amp;gt;. בתוך אותה תגית נצהיר על ה-Sectionים החדשים ונקבע מי יטפל בהם. &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;configSections&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;section name=&amp;quot;Riza&amp;quot; type=&amp;quot;System.Configuration.NameValueSectionHandler&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;section name=&amp;quot;Pitoch&amp;quot; type=&amp;quot;System.Configuration.NameValueSectionHandler&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;section name=&amp;quot;Testing&amp;quot; type=&amp;quot;System.Configuration.NameValueSectionHandler&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/configSections&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;הצהרנו על שלושה Section-ים חדשים ואמרנו שמי שיטפל בהם הוא System.Configuration.NameValueSectionHandler. למעשה מה שאמרנו זה “שאנחנו ניגש באפליקציה שלנו ונוציא את ה-Section הזה תחזיר לנו בבקשה NameValueCollection”. אנחנו נדבר בהמשך על לקבל סוגים שונים של פקדים. סה”כ קובץ ה-web.config שלנו נראה ככה:&lt;/font&gt;&lt;/p&gt;&lt;br /&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;configSections&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;section name=&amp;quot;Riza&amp;quot; type=&amp;quot;System.Configuration.NameValueSectionHandler&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;section name=&amp;quot;Pitoch&amp;quot; type=&amp;quot;System.Configuration.NameValueSectionHandler&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;section name=&amp;quot;Testing&amp;quot; type=&amp;quot;System.Configuration.NameValueSectionHandler&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/configSections&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;Riza&amp;gt; &amp;lt;!-- קונפיגיורציה לריצה --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;blue&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;white&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/Riza&amp;gt;&lt;br /&gt;&amp;lt;Pitoch&amp;gt; &amp;lt;!-- קונפיגיורציה לפיתוח --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;white&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;black&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/Pitoch&amp;gt;&lt;br /&gt;&amp;lt;Testing&amp;gt; &amp;lt;!-- קונפיגיורציה לבדיקות --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;red&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;yellow&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/Testing&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;nbsp; ...&amp;nbsp; &lt;br /&gt;&amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;ועכשיו, בואו נראה איך ניגשים למידע הזה מתוך האפליקציה שלנו:&lt;/font&gt;&lt;/p&gt;&lt;br /&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;using System.Configuration;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;using System.Collections;&lt;br /&gt;using System.Collections.Specialized;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;...&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;private void Page_Load(object sender, System.EventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; // We Retrive our “Pitoch“ Section&lt;br /&gt;&amp;nbsp;&amp;nbsp; System.Collections.Specialized.NameValueCollection myNVC = (System.Collections.Specialized.NameValueCollection)ConfigurationSettings.GetConfig(&amp;quot;Pitoch&amp;quot;);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; // We will print out the Background Color &amp;amp; Font Color&lt;br /&gt;&amp;nbsp;&amp;nbsp; Response.Write(myNVC.GetValues(&amp;quot;BackGroundColor&amp;quot;)[0].ToString() + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myNVC.GetValues(&amp;quot;FontColor&amp;quot;)[0].ToString() + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;נעבור על הדוגמה. דבר ראשון אמרנו אילו NameSpaced צריך כדי שכל הפקדים שלנו יפעלו. ספציפית צריך את System.Collections.Specialized בשביל NameValueCollection. אחר עברנו על ה-NameValueCollection והדפסנו את BackGroundColor ואת- FontColor. ואכן, יודפיס white ו-black.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;בקובץ ה-web.config שלנו קבענו כי ה-Sectionים שלנו יחזירו NameValueCollection. נשנה את זה ונגיד שאנו רוצים ש-Riza יחזיר Dictionary.&lt;/font&gt;&lt;/p&gt;&lt;br /&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;configSections&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;section name=&amp;quot;Riza&amp;quot; type=&amp;quot;System.Configuration.DictionarySectionHandler&amp;quot; /&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;section name=&amp;quot;Pitoch&amp;quot; type=&amp;quot;System.Configuration.NameValueSectionHandler&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;section name=&amp;quot;Testing&amp;quot; type=&amp;quot;System.Configuration.NameValueSectionHandler&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/configSections&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;וברמת האפליקציה ניגש לנתונים של Riza באופן הבא:&lt;/font&gt;&lt;/p&gt;&lt;br /&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;using System.Configuration;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;using System.Collections;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;...&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;private void Page_Load(object sender, System.EventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; // We Retrive our “Riza“ Section&lt;br /&gt;&amp;nbsp;&amp;nbsp; System.Collections.IDictionary myIDC = (System.Collections.IDictionary) ConfigurationSettings.GetConfig(&amp;quot;Riza&amp;quot;);&lt;/font&gt;&lt;/div&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; // We will print out the Background Color &amp;amp; Font Color&lt;br /&gt;&amp;nbsp;&amp;nbsp; Response.Write(myIDC[&amp;quot;BackGroundColor&amp;quot;].ToString() +&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;Br&amp;gt;&amp;quot; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myIDC[&amp;quot;FontColor&amp;quot;].ToString());&lt;br /&gt;&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;עד כמה הראנו את הדברים הבאים: איך לעבוד עם מפתחות-ערכים, איך ליצור Section עם מפתחות-ערכים, איך להצהיר ב-configSections על ה-Sectionים החדשים, איך לקבוע אלו פקדים מחזיר כל Section, איך לעבוד עם הפקדים עצמם. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;בואו נשים כאן סיכום של מה שלמדנו עד כה: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;/* Web.config */&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;configSections&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;section name=&amp;quot;Riza&amp;quot; type=&amp;quot;System.Configuration.DictionarySectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;section name=&amp;quot;Pitoch&amp;quot; type=&amp;quot;System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;section name=&amp;quot;Testing&amp;quot; type=&amp;quot;System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/configSections&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;Riza&amp;gt; &amp;lt;!-- קונפיגיורציה לריצה --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;blue&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;white&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/Riza&amp;gt;&lt;br /&gt;&amp;lt;Pitoch&amp;gt; &amp;lt;!-- קונפיגיורציה לפיתוח --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;white&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;black&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/Pitoch&amp;gt;&lt;br /&gt;&amp;lt;Testing&amp;gt; &amp;lt;!-- קונפיגיורציה לבדיקות --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;red&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;yellow&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/Testing&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;nbsp; ....&lt;br /&gt;&amp;lt;/system.web&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;/* WebForm */&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;using System.Configuration;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;using System.Collections;&lt;br /&gt;using System.Collections.Specialized;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;...&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;private void Page_Load(object sender, System.EventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; // We Retrive our “Pitoch“ Section&lt;br /&gt;&amp;nbsp;&amp;nbsp; System.Collections.Specialized.NameValueCollection myNVC = (System.Collections.Specialized.NameValueCollection)ConfigurationSettings.GetConfig(&amp;quot;Pitoch&amp;quot;);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; // We will print out the Background Color &amp;amp; Font Color&lt;br /&gt;&amp;nbsp;&amp;nbsp; Response.Write(myNVC.GetValues(&amp;quot;BackGroundColor&amp;quot;)[0].ToString() + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myNVC.GetValues(&amp;quot;FontColor&amp;quot;)[0].ToString() + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; // We Retrive our “Riza“ Section&lt;br /&gt;&amp;nbsp;&amp;nbsp; System.Collections.IDictionary myIDC = (System.Collections.IDictionary) ConfigurationSettings.GetConfig(&amp;quot;Riza&amp;quot;); &lt;/font&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; // We will print out the Background Color &amp;amp; Font Color&lt;br /&gt;&amp;nbsp;&amp;nbsp; Response.Write(myIDC[&amp;quot;BackGroundColor&amp;quot;].ToString() +&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;Br&amp;gt;&amp;quot; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myIDC[&amp;quot;FontColor&amp;quot;].ToString());&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;אופציה ג&amp;#39;:&amp;nbsp; sectionGroup (או “ועכשיו כולם ביחד!“) &lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;האופציה הזאת היא למעשה הארכה של האופציה הקודמת. אם אתם זוכרים את הדוגמה הקודמת כתבנו לכל סביבת פיתוח section נפרד לחלוטין. עכשיו, למעשה זה לא נכון, יש להם מכנה משותף. כולן סביבות פיתוח. כל section שכזה צריך להיות שייך לאותה ל-sectionGroup. ככה אנחנו רוצים שיראה ה-web.config שלנו:&lt;/font&gt;&lt;/p&gt;&lt;br /&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;SvivotPitoch&amp;gt; &amp;lt;!-- קבוצת קונפיגיורציות בשם סביבות פיתוח --&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;Riza&amp;gt; &amp;lt;!-- קונפיגיורציה לריצה --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;blue&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;white&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Riza&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Pitoch&amp;gt; &amp;lt;!-- קונפיגיורציה לפיתוח --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;white&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;black&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Pitoch&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Testing&amp;gt; &amp;lt;!-- קונפיגיורציה לבדיקות --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;red&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;yellow&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Testing&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;/SvivotPitoch&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; נכון שזה נראה הרבה יותר מסודר? אולי במצב הזה של שלושה sectionים זה לא נראה הרבה, אבל תחשבו שאם היינו יוצרים למשל Section לכל שרת שהמסד יכול להתחבר אליו. בארגון בינוני+ מדובר על 20+ שרתים, זה המון Sectionים סתם לזרוק בתוך ה-web.config. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;אנחנו כבר למודי web.config ויודעים שאי-אפשר סתם ככה להוסיף Sectionים. באותו אופן גם אי-אפשר להוסיף SectionGroup בלי להצהיר אליה ב-&amp;lt;configSections&amp;gt;. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;configSections&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &lt;/font&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;sectionGroup name=&amp;quot;SvivotPitoch&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;section name=&amp;quot;Riza&amp;quot; type=&amp;quot;System.Configuration.DictionarySectionHandler&amp;quot; /&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;section name=&amp;quot;Pitoch&amp;quot; type=&amp;quot;System.Configuration.NameValueSectionHandler&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;section name=&amp;quot;Testing&amp;quot; type=&amp;quot;System.Configuration.NameValueSectionHandler&amp;quot; /&amp;gt;&amp;nbsp; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;/sectionGroup&amp;gt;&lt;br /&gt;&amp;lt;/configSections&amp;gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/div&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; חשוב להדגיש שינוי גדול בצורת העבודה שלנו - קודם לכן השתמשנו ב-ConfigurationSettings.GetConfig בכדי להחזיר Section בכך שמסרנו כפרמטר את שמו. עכשיו אנו נכתוב את הנתיב המלא שצריך לעבור כדי להגיע לאותו Section. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;// Previously: &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;IDictionary myIDC = (IDictionary) ConfigurationSettings.GetConfig(&amp;quot;Riza&amp;quot;); &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;// Now:&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;IDictionary myIDC = (IDictionary) ConfigurationSettings.GetConfig(&amp;quot;SvivotPitoch/Riza&amp;quot;); &lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;שימו לב לשינוי, אנחנו למעשה עובדים עם Section בתוך sectionGroup.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;נסכם את המצב עד כה:&lt;/font&gt;&lt;/p&gt;&lt;br /&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;/* Web.config */&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial"&gt;&lt;font size="4"&gt;&amp;lt;configSections&amp;gt;&lt;br /&gt;&amp;nbsp;&lt;strong&gt; &amp;lt;sectionGroup name=&amp;quot;SvivotPitoch&amp;quot;&amp;gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;section name=&amp;quot;Riza&amp;quot; type=&amp;quot;System.Configuration.DictionarySectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;section name=&amp;quot;Pitoch&amp;quot; type=&amp;quot;System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;section name=&amp;quot;Testing&amp;quot; type=&amp;quot;System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot; /&amp;gt;&amp;nbsp; &lt;br /&gt;&lt;strong&gt;&amp;nbsp; &amp;lt;/sectionGroup&amp;gt;&lt;/strong&gt;&lt;br /&gt;&amp;lt;/configSections&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;strong&gt;&amp;lt;SvivotPitoch&amp;gt; &amp;lt;!-- קבוצת קונפיגיורציות בשם סביבות פיתוח --&amp;gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Riza&amp;gt; &amp;lt;!-- קונפיגיורציה לריצה --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;blue&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;white&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Riza&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Pitoch&amp;gt; &amp;lt;!-- קונפיגיורציה לפיתוח --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;white&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;black&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Pitoch&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Testing&amp;gt; &amp;lt;!-- קונפיגיורציה לבדיקות --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key=&amp;quot;BackGroundColor&amp;quot; value=&amp;quot;red&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key=&amp;quot;FontColor&amp;quot; value=&amp;quot;yellow&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Testing&amp;gt;&lt;br /&gt;&lt;strong&gt;&amp;lt;/SvivotPitoch&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;nbsp; ...&lt;br /&gt;&amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;/* WebForm.aspx */&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;using System.Configuration;&lt;br /&gt;using System.Collections.Specialized;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;...&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;private void Page_Load(object sender, System.EventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; // We Retrive our “Pitoch“ Section&lt;br /&gt;&amp;nbsp;&amp;nbsp; System.Collections.Specialized.NameValueCollection myNVC = (System.Collections.Specialized.NameValueCollection) ConfigurationSettings.GetConfig(&amp;quot;&lt;strong&gt;SvivotPitoch&lt;/strong&gt;/Pitoch&amp;quot;);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; // We will print out the Background Color &amp;amp; Font Color&lt;br /&gt;&amp;nbsp;&amp;nbsp; Response.Write(myNVC.GetValues(&amp;quot;BackGroundColor&amp;quot;)[0].ToString() + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myNVC.GetValues(&amp;quot;FontColor&amp;quot;)[0].ToString() + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; // We Retrive our “Riza“ Section&lt;br /&gt;&amp;nbsp;&amp;nbsp; System.Collections.IDictionary myIDC = (System.Collections.IDictionary) ConfigurationSettings.GetConfig(&amp;quot;&lt;strong&gt;SvivotPitoch&lt;/strong&gt;/Riza&amp;quot;);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; // We will print out the Background Color &amp;amp; Font Color&lt;br /&gt;&amp;nbsp;&amp;nbsp; Response.Write(myIDC[&amp;quot;BackGroundColor&amp;quot;].ToString() + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;Br&amp;gt;&amp;quot; +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myIDC[&amp;quot;FontColor&amp;quot;].ToString());&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;(השינויים מודגשים)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;אופציה ד&amp;#39;:&amp;nbsp; XmlNode, CustomHandlers (או “סוף סוף נפתרנו מהמפתחות-ערכים האלו!“) &lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;הגענו דרך ארוכה עד כאן... פיתחנו בתוך ה-web.config שלנו תגיות שנראות ממש כמו XML והכל במינימום מאמץ. אבל יש עוד שני דברים שמציקים לי: &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;הראשון, זה שאנחנו עובדים עם מפתחות-ערכים. תכלס&amp;#39;, זה כמו XML, אבל זה נראה מוזר. למה לא לעבוד עם XML כמו שהוא אמור להיראות? (לפתוח תגית, טקסט, לסגור תגית)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;השני, ברמת האפליקציה אנחנו עובדים עם איזה פקדי-נתונים פקקטא מצחיקים. למה לא לעבוד עם איזה XmlNode גברי וחסון? תכלס&amp;#39; הסיבה היא שכבר התרגלתי לעבוד עם פקדי XPath וזה גם הרבה יותר הגיוני (לפחות בראש שלי) לעבוד עם XPath שאתה מנווט בתוך קוד XML. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;מאוד רציתי SectionHandler שיוכל לעשות את שני הדברים האלו. אבל אין בנמצא. אז כתבתי אחד. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;public class XmlNodeSectionHandler : IConfigurationSectionHandler &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public object Create(object parent, object configContext, XmlNode section) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return section;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;אני יודע שעכשיו חלקכם תוהים קצת מה בדיוק כתוב למעלה. אתם זוכרים שהגדרנו configSections? כשהגדרנו &amp;lt;section&amp;gt; תמיד גם אמרנו type. התכונה הזאת, type, מתייחסת לאיזה פקד מסוג sectionHandler יטפל בבקשה שלנו ל-ConfigurationSettings.GetConfig. בקוד למעלה כתבתי sectionHandler שממש את הממשק הנדרש ל-SectionHandlerים ומחזיר XmlNode לפי הנתיב שנבקש. קצת מסובך, אני יודע, אבל זה הכי פשוט שיש.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;בואו נביט על קובץ ה-web.config שלנו:&lt;/font&gt;&lt;/p&gt;&lt;br /&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;configSections&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;section name=&amp;quot;SvivotPitoch&amp;quot; type=&amp;quot;ProjectNameSpace.XmlNodeSectionHandler, ProjectNameSpace&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/configSections&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;SvivotPitoch&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Riza&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;BackGroundColor&amp;gt;blue&amp;lt;/BackGroundColor&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;FontColor&amp;gt;white&amp;lt;/FontColor&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Riza&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Pitoch&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;BackGroundColor&amp;gt;white&amp;lt;/BackGroundColor&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;FontColor&amp;gt;black&amp;lt;/FontColor&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Pitoch&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Testing&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;BackGroundColor&amp;gt;red&amp;lt;/BackGroundColor&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;FontColor&amp;gt;yellow&amp;lt;/FontColor&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Testing&amp;gt;&lt;br /&gt;&amp;lt;/SvivotPitoch&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; &amp;lt;system.web&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; ...&lt;br /&gt;&amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;תראו איזה יופי, כל כך נקי, כל כך מסודר. סה“כ הצהרנו על Section אחדבלבד וכתבנו אותו ב-XML רגיל לחלוטין. תשימו לב שבהצהרה על ה-Section כתבנו הפנייה לProjectNameSpace.XmlNodeSectionHandler שזו הפנייה ל-SectionHandler שלנו. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;עכשיו נביט על הקוד שלנו:&lt;/font&gt;&lt;/p&gt;&lt;br /&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;using System.Configuration;&lt;br /&gt;using System.Xml;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;...&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;namespace ProjectNameSpace&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public class WebForm1 : System.Web.UI.Page&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void Page_Load(object sender, System.EventArgs e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Retrive the XMLnode of SvivotPitoch into myXML&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlNode myXML = (XmlNode) ConfigurationSettings.GetConfig(&amp;quot;SvivotPitoch&amp;quot;);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Print the Testing/BackGroundColor&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(myXML.SelectNodes(&amp;quot;Testing/BackGroundColor&amp;quot;)[0].InnerText);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public class XmlNodeSectionHandler : IConfigurationSectionHandler &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public object Create(object parent, object configContext, XmlNode section) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return section;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;איזו פשטות, במקום לעבוד עם Dictionary או NameValueCollection, אנחנו עובדים עם XmlNode. ובביטוי XPath קטן הגענו לנתון שחיפשנו. כמובן שעכשיו שיש לנו פקד רציני לעבוד איתו, נפתחות בפנינו אפשרויות נוספות. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;אחרית דבר&lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;במהלך מאמר זה הראינו מהם זוגות מפתחות-ערכים, איך לעבוד עם appSettings (שאם תחשבו על זה הוא section), הראנו איך לצהיר על Sectionים חדשים, איך לגשת אליהם מהקוד, איך ליצור SectionGroups, על השינויים שצריך בקוד, ולבסוף איך לעשות חצי ממה שעשינו קודם בשביל פי שניים כוח. תחשבו על זה. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;כמו בכל אפשרות בדוט נט הטריק הוא לזהות מתי צריך להשתמש בה. בהצלחה! &lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=142932" width="1" height="1"&gt;</description></item><item><title>תרגיל בארכיקטורה - תיאוריה בחסות האקדח והמציאות שלי</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/09/21/142926.aspx</link><pubDate>Sat, 20 Sep 2008 21:15:52 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:142926</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>0</slash:comments><description>&lt;div dir="rtl" align="right"&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;תוספת משנת 2008:&lt;/u&gt; אומנם הדעות שמשוקפות במאמר הזה לא הדעות שלי כיום, אבל לפני ארבע שנים בהחלט היה מדובר בדעה הרווחת. מומלץ לקרוא את המאמר הזה בחשדנות רבה, היא נכתבה ממקום של הרבה פחות ניסיון בדוט-נט (בעיקר כי לאף אחד לא היה את הניסיון הזה באותן שנים). &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;שלום לכולם,&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;באחד מהגיחות שלי לפורום של “מתכנתים-עם-יותר-מדי-זמן-פנוי” (או בשמו האמיתי: &lt;a href="http://www.tapuz.co.il/tapuzforum/main/forumpage.asp?forum=1279"&gt;הנדסת תוכנה בתפוז&lt;/a&gt;) יצא לי להיתקל בשאלה הבאה:&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma" size="4"&gt; &lt;hr id="null" /&gt; איך הייתם ניגשים לממש שאלה כזו מבחינת האפיון וגם תכנותית (.NET)?&lt;/font&gt;  &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;font face="Tahoma"&gt; &lt;p&gt;1. שתי ישויות - CONTACT , CONTACT-GROUP&amp;nbsp; (לטובת EMAIL)&lt;/p&gt; &lt;p&gt;2. CONTACT-GROUP יכולה להכיל גם CONTACT וגם CONTACT-GROUP&lt;br /&gt;&lt;/p&gt; &lt;p&gt;3. CONTACT יכול להיות במספר CONTACT-GROUPS או באף אחת&lt;br /&gt;&lt;/p&gt; &lt;p&gt;4. יש לאפין ולכתוב תכנה המאפשרת&lt;br /&gt;&amp;nbsp;&amp;nbsp; א. יצירת CONTACT&amp;nbsp; ו CONTACT-GROUP&lt;br /&gt;&amp;nbsp;&amp;nbsp; ב. הוספת CONTACT ל CONTACT-GROUP&lt;br /&gt;&amp;nbsp;&amp;nbsp; ג. מחיקת CONTACT מ CONTACT-GROUP&lt;br /&gt;&amp;nbsp;&amp;nbsp; ד. הדפסת כל ה CONTACTS בתצורה עצית&lt;br /&gt;&amp;nbsp;&amp;nbsp; ה. מיון CONTACTS עפ&amp;quot;י שם&lt;/font&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;hr id="null" /&gt; &lt;/font&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;&lt;strong&gt;חלק א&amp;#39;: תיאוריה, OODA&lt;/strong&gt;&lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;ברגע שקראתי את השאלה הזאת עלתה במוחי התשובה הרגילה והסטנדרטית: “אההה... OODA עם שלושה שכבות? נבנה את הכל מובנה יפה והוא ירוץ סבבי-בבי”. אז הנה איך אני הייתי ממש את השאלה הזאת לפי OODA. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;1. פקד בסיס אבסטרקטי - המינימום שמשותף ל-Contact ו-Contact Group (להלן: CG) הוא שלשניהם יש שם תצוגה כלשהו. ולכן, ניצור פקד אבסטרקטי כלשהו שממנו שניהם יירשו. שימו לב, הכוח האמיתי של יצירת מחלקות בסיס אבסטרקטיות יתברר בהמשך התשובה. כרגע, נציין שאנחנו עובדים לפי Abstract Factory Design Pattern או בשמה המיקרוסופטי המחודש Provider.&lt;/font&gt; &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;/* Busniss Logic Layer */&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;public abstract class BaseContact &lt;br /&gt;{&lt;br /&gt;&amp;nbsp; // DisplayName Property&lt;br /&gt;&amp;nbsp; private string _displayName = &amp;quot;&amp;quot;;&lt;br /&gt;&amp;nbsp; public string DisplayName &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; get&amp;nbsp; { return _displayName;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; set { _displayName = value; }&lt;br /&gt;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;שימו לב שלא כתבתי Constructor וכן איתחלתי את המשתנה הפנימי של ה-DisplayName property לערך מחרוזת ריק. אין טעם לכתוב Constructor מצב הזה שבו ברור לנו שלא ניתן לאתחל את ContactBase. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;2. ניישם את Contact באמצעות ירושה מ-ContactBase. נוסיף לו איזה תכונה לשם הדגמה בכדי להבדיל אותו מ-ContactBase. בדרישות הפרוייקט מצויין שצריך לשמור בו אי-מייל, אז באמת נוסיף לו Email property. &lt;br /&gt;בנוסף לפי דרישת פרוייקט (4) סעיף א&amp;#39;, נבנה Constructor ל-Contact שיקלוט DisplayName ו-Email.&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="4"&gt;&lt;strong&gt;/* Busniss Logic Layer */&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;font face="Courier New"&gt;&lt;font size="3"&gt;public class Contact : BaseContact &lt;br /&gt;{&lt;br /&gt;&amp;nbsp; // Email Property&lt;br /&gt;&amp;nbsp; private string _email;&lt;br /&gt;&amp;nbsp; public string Email&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; get { return _email; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; set { _email = value; }&lt;br /&gt;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; // Constructor&lt;br /&gt;&amp;nbsp; public Contact(string pEmail, string pDisplayName)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; _email = pEmail;&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.DisplayName = pDisplayName;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;3. ניישם את CG (דהלן: Contact-Group).&lt;/font&gt;&amp;nbsp;&lt;font face="Arial"&gt; לפי דרישת פרוייקט (4) סעיף א&amp;#39;, יהיה לו Contructor. &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;/* Busniss Logic Layer */&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;public class ContactGroup : BaseContact &lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; // Constructor&lt;br /&gt;&amp;nbsp; public ContactGroup(string pDisplayName)&lt;br /&gt;&amp;nbsp; {&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; this.DisplayName = pDisplayName;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;&lt;font size="4"&gt;מבחינת היישום של סעיף (1) של דרישות הפרוייקט שלנו - סיימנו. להזכירכם את סעיף 1: “שתי ישויות - CONTACT , CONTACT-GROUP&amp;nbsp; (לטובת EMAIL)“. כעת נביט על דרישות פרוייקוט (2), (3) וסעיפים ב&amp;#39;, ג&amp;#39; ו-ה&amp;#39; בדרישה (4). אנו יודעים כי: CG צריכה צריכה אפשרות להוסיף ולזרוק: CGים ו-Contactים. בנוסף, צריך שיהיה אפשר למיין את מבנה הנתונים CG לפי מפתח שמי כלשהו. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;&lt;font size="4"&gt;כעת נדבר נזכיר שSortedList היא בדיוק כמו ArrayList מהבחינה שנוכל להכניס לתוכה כל Object אחרי שנעשה לו Boxing, והערך המוסף שלה (ובמיוחד לתרגיל זה) הוא שניתן לסדר את ה-ArrayList לפי מפתח שנקבע. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;&lt;font size="4"&gt;&lt;font face="Courier New"&gt;&lt;font face="Arial"&gt;נסכם, עלינו להוסיף מתודות שיאפשרו (ביחס ל-CG): להוסיף Contact, להוריד Contact, להוסיף CG ולהוריד CG. היות ו-Contact ו-Contact-Group שניהם יורשים מ-BaseContact זהו מצב אופטימלי ליצור Strongly typed Collection או במקרה שלנו BaseContact type SortedList. כלומר, דבר ראשון ניצור טיפוס נתונים פנימי שלנו שכל מטרתו בחיים היא לשמור SortedList היכולה לקבל רק ContactBase ויורשיו. מדובר על תחום השווה למאמר בפני עצמו, אבל נסתפק ביישום הזה. &lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;/* Busniss Logic Layer */&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;///&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Strongly type SortedList for BaseContact&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;remarks&amp;gt;&lt;br /&gt;///&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;Not&lt;/strong&gt; generated by myGeneration/CodeSmith, written for demonstration.&lt;br /&gt;///&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in a real Strongly-typed collection you will implement all&amp;nbsp; Members of ArrayList. &lt;br /&gt;/// &amp;lt;/remarks&amp;gt;&lt;br /&gt;public class ContactItems &lt;br /&gt;{&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; private System.Collections.SortedList _contactItems = new SortedList();&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&amp;nbsp; /* public Methods for dealing with Adding/Removing Contact-Groups/Contact */&lt;br /&gt;&amp;nbsp; public void Add(BaseContact curContactBase)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; _contactItems.Add(curContactBase.DisplayName, (object)curContactBase);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; public void Remove(BaseContact curContactBase)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; _contactItems.Remove(curContactBase.DisplayName); &lt;br /&gt;&amp;nbsp; } &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&amp;nbsp; // Get Count property&lt;br /&gt;&amp;nbsp; public int Count &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; get { return _contactItems.Count; }&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&amp;nbsp; // Indexer &lt;br /&gt;&amp;nbsp; public BaseContact this [int index]&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; get { return (BaseContact)_contactItems[index]; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; set { _contactItems[index] = value; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font size="+0"&gt;&lt;font size="+0"&gt;&lt;font face="Arial" size="4"&gt;בנינו את ה-Strony typed collection עם כל ה-Members שהיינו צריכים לתרגיל זה: אפשר להוסיף אך ורק ContactBase או יורשיו, ניתן להוריד אך ורק ContactBase או יורשיו, ישמנו מחדש את Count וכמו כן בנינו Indexer כדי שנוכל לגשת למערך הפנימי. באמת כל מה שעשינו זה Encupsulation ל-SortedList כך שיוכל לקבל אך ורק אובייקטים מהסוג שנקבע לו ויחשוף בדיוק מספיק פונקציונליות כדי שנוכל לעבוד איתו. &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;ניישם ונשכתב את ContactGroup כך שתכיל מערך פנימי של ContactItems כ-Property של ContactGroup: &lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;/* Busniss Logic Layer */&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="5"&gt;&lt;font face="Courier New" size="3"&gt;public class ContactGroup : BaseContact &lt;br /&gt;{&lt;br /&gt;&amp;nbsp; private ContactItems contactItems;&lt;br /&gt;&amp;nbsp; public ContactItems ContactItems&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; get { return contactItems; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; set { contactItems = value; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; // Constructor&lt;br /&gt;&amp;nbsp; public ContactGroup(string pDisplayName)&lt;br /&gt;&amp;nbsp; {&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; this.DisplayName = pDisplayName;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&amp;nbsp;&lt;/font&gt;&lt;font size="5"&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font size="+0"&gt;&lt;font size="+0"&gt;&lt;font face="Arial" size="4"&gt;נבדוק שכיסינו את הדרישות הבאות: דרישות פרוייקט (2) ו-(3), וסעיפים ב&amp;#39; ו-ג&amp;#39; בדרישת פרוייקט (4). &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;דרישת פרוייקט 2 מבקשת מאתנו ש-CG תוכל להכיל CG ו-Contact. היות ושני המחלקות הללו יורשות מ-ContactBase ולכל CG יש ContactItems המכיל SortedList של ContactBase אז מילאנו דרישה זו.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;דרישת פרוייקט 3 מדברת על כך ש-CG ו-Contact יכולים או יכולים שלא להיות חלק מ-CG. היות וניתן ליישם את שניהם ללא צורך בלממש אותם בתוך CG גם דרישה זו מולאה. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;דרישת פרוייקט 4 סעיפים ב&amp;#39; ו-ג&amp;#39; מדברים על כך שניתן יהיה להוסיף או להסיר CG או Contact מרשימה CG קיימת. היות ושני מחלקות אלו יורשות מ-ContactBase ולכל CG יש ContactItems המכיל SortedList של ContactBase ואחת מהאפשרויות היא להסיר ולהוסיף ContactBase ב-SortedList מילאנו דרישות אלו. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;דרישת פרוייקט 4 סעיף ה&amp;#39; מדברת על מיון של CG לפי שמות התצוגה של ה-ContactItems שלה. היות ו-SortedList, שהוא טיפוס המידע הפנימי של ContactItems, מתמיין אוטומטית לפי מפתח - מילאנו דרישה זו כמו כן. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;4. כל מה שנשאר הוא לממש את סעיף ד&amp;#39; של דרישת פרוייקט (4). והוא: תצוגה במבט עץ. ניצור Presentation Layer ובתוכה כל המימוש לתצוגת נתונים אלו. המימוש הפשוט ביותר לדרישה זו הוא דרך פקד תצוגה TreeView.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;נדבר מעט על המבנה של שכבת התצוגה. כל אלמנט בשכבת התצוגה צריך אפשרות להפוך אותו ל-TreeNode (ענף בתצוגת העץ שלנו). ולכן, עלינו ליצור מחלקה שאחראית לתצוגה ל-Contact ול-CG. היות ויש לה תכונה משותפת אלינו לדאוג שהן ירשו מאותה מחלקה\ממשק. בדוגמה זו ישמתי ממשק שנורש ע“י abstract class וזה בתורו נורש ע“י פקדי התצוגה שלנו. צריך להזכיר שלא צריך לממש גם ממשק וגם abstract class, אלא אחד מהם.&amp;nbsp; &lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;/* Presentation Layer */&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;public interface ITreeable&lt;br /&gt;{ &lt;br /&gt;&amp;nbsp; TreeNode ReturnTreeNode();&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;abstract public class BaseContactPresentation : ITreeable&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; abstract public TreeNode ReturnTreeNode();&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;ניישם את המחלקה הזו על ContactPresentation שתהיה אחראית על לממש את התצוגה של Contact:&amp;nbsp; &lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;/* Presentation Layer */&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;public class ContactPresentation : BaseContactPresentation&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; private Contact _contact; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&amp;nbsp; public ContactPresentation(Contact curContact)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; _contact = curContact;&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&amp;nbsp; public override TreeNode ReturnTreeNode()&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; return new TreeNode(_contact.DisplayName);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;שימו לב, כל מה שעשינו זה לבנות קונסטרקטור שמקבל לתוכו Contact ומימשנו אפשרות להחזיר ענף בעץ אשר כתוב עליו את Contact.DisplayName. נעשה דבר דומה עם CG הרי כל CG הופכת בהכרח לענף בעץ לפי ContactGroup.DisplayName. אך, בנוסף לכך - נעבור על כל הפקדים ב-ContactItems ובהתאם לאיזה סוג האובייקט נשלח אותם לפקד המתאים שיחזיר לנו עבורם ענף בעץ.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;/* Presentation Layer */&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;public class ContactGroupPresentation :BaseContactPresentation&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; private ContactGroup _contactGroup; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&amp;nbsp; public ContactGroupPresentation(ContactGroup curContactGroup)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; _contactGroup = curContactGroup;&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&amp;nbsp; public&amp;nbsp; override TreeNode ReturnTreeNode()&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; // Create New TreeNode from DisplayName&lt;br /&gt;&amp;nbsp;&amp;nbsp; TreeNode curTreeNode = new TreeNode(_contactGroup.DisplayName);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&amp;nbsp;&amp;nbsp; // Add SubTreeNodes from ContactGroup.ContactItems&lt;br /&gt;&amp;nbsp;&amp;nbsp; for (int i=0; i&amp;lt;_contactGroup.ContactItems.Count; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BaseContact curBaseContact = _contactGroup.ContactItems[i];&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // If current BaseContact gotten from ContactItems is Contact&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (curBaseContact.GetType() == typeof(Contact))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Add TreeNode from ContactPresentation of Current BaseContact&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curTreeNode.Nodes.Add( new ContactPresentation((Contact)curBaseContact).ReturnTreeNode() );&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // If current BaseContact gotten from ContactItems is ContactGroup&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (curBaseContact.GetType() == typeof(ContactGroup))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Add TreeNode from ContactGroupPresentation of Current BaseContact&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curTreeNode.Nodes.Add( new ContactGroupPresentation((ContactGroup)curBaseContact).ReturnTreeNode() );&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt;&lt;font face="Courier New" size="3"&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&amp;nbsp;&amp;nbsp; // return current TreeNode&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&amp;nbsp;&amp;nbsp; return curTreeNode;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;נציג דוגמה למימוש כל הקוד באפליקציה חלונאית (אשר קיים בה treeview בתצוגת עיצוב):&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;/* Presentation Layer */&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;&amp;nbsp; public Form1()&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp; InitializeComponent();&lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp; ContactGroup _inbox = new ContactGroup(&amp;quot;inbox&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; _inbox.ContactItems.Add(new Contact(&amp;quot;&lt;/font&gt;&lt;a href="mailto:a@a.com&amp;quot;,&amp;quot;Justin"&gt;&lt;font face="Courier New"&gt;a@a.com&amp;quot;,&amp;quot;Justin&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&amp;quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp; _inbox.ContactItems.Add(new Contact(&amp;quot;&lt;/font&gt;&lt;a href="mailto:b@b.com&amp;quot;,&amp;quot;Yony"&gt;&lt;font face="Courier New"&gt;b@b.com&amp;quot;,&amp;quot;Yony&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&amp;quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp; _inbox.ContactItems.Add(new Contact(&amp;quot;&lt;/font&gt;&lt;a href="mailto:c@c.com&amp;quot;,&amp;quot;TTTIS"&gt;&lt;font face="Courier New"&gt;c@c.com&amp;quot;,&amp;quot;TTTIS&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&amp;quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp; _inbox.ContactItems.Add(new Contact(&amp;quot;&lt;/font&gt;&lt;a href="mailto:d@d.com&amp;quot;,&amp;quot;Grandma"&gt;&lt;font face="Courier New"&gt;d@d.com&amp;quot;,&amp;quot;Grandma&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&amp;quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp; _inbox.ContactItems.Add(new ContactGroup(&amp;quot;my Living Enemies&amp;quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp; ContactGroup InLineContactGroup = new ContactGroup(&amp;quot;myFamily&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; InLineContactGroup.ContactItems.Add(new Contact(&amp;quot;&lt;/font&gt;&lt;a href="mailto:mom@family.com&amp;quot;,&amp;quot;mom"&gt;&lt;font face="Courier New"&gt;mom@family.com&amp;quot;,&amp;quot;mom&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&amp;quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp; InLineContactGroup.ContactItems.Add(new Contact(&amp;quot;&lt;/font&gt;&lt;a href="mailto:dad@family.com&amp;quot;,&amp;quot;dad"&gt;&lt;font face="Courier New"&gt;dad@family.com&amp;quot;,&amp;quot;dad&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&amp;quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp; _inbox.ContactItems.Add(InLineContactGroup);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; ContactGroupPresentation inbox = new ContactGroupPresentation(_inbox);&lt;br /&gt;&amp;nbsp;&amp;nbsp; tvwtreeView1.Nodes.Add(inbox.ReturnTreeNode());&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;דבר ראשון - אני רוצה תגובות על איך ה-OOP שלי, תרגישו חופשיים להשתמש במילים כמו “אלוהי“, “חביב“ או “צריך לקחת את המקלדת שלך ולשלול לך את התעודות הכשרה של מיקרוסופט“. ביקורת בונה מאוד תועיל. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;&lt;strong&gt;חלק ב&amp;#39;: המציאות שלי&lt;/strong&gt;&lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;דבר שני - רק אם היו מאיימים לשבור לי עצם חיונית מאוד (או ערימה גבוהה של כסף) הייתי כותב ככה.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;ועכשיו ברצינות - לא הייתי כותב ככה למרות כל היתרונות של הקוד (מודלריות, קלות תחזוקה אלעק וכיו”ב).&amp;nbsp; עכשיו אכתוב איך באמת הייתי ניגש לפרוייקט כזה מבחינת אפיון-עיצוב ותכנות. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;אני לא מאמין באפיון לפי נוהל מפת”ח. אני חושב שזה בזבזני ומיותר לכתוב את הפרוייקט שלך יראה בלי לדעת מה סביבת העבודה שלך. לעומת זאת אני מאמין גדול בשני חלקים של עיצוב מערכת: הראשון הוא אפיון-עיצוב עם הלקוח, והשני עיצוב לתכנות. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;השלב הראשון של אפיון-עיצוב עם הלקוח הוא אחד מהעקרונות של Agile Software developement, לעבוד&lt;strong&gt;&lt;u&gt; עם הלקוח&lt;/u&gt;&lt;/strong&gt; ולתת לו הרגשה שהוא מבין באמת כל מה שאנו הולכים לעשות. כל תוצר שהלקוח רואה הוא צריך להיות יכול להבין בצורה מלאה בלי להשתמש במונחים שזרים לו (כגון: ”שחקנים”, “שאילתות”, “פקדים” וכיו”ב). &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;לצורך הזה אני כותב מסמך מאוד מפורט שמכיל את כל מה שהיה מכיל מסמך אפיון וכל מה שהיה מכיל מסמך עיצוב. אבל אני כותב את זה בצורה שלא משנה מי יקרא אותו הוא יבין אותו. בין אם מחר אני זה שקורא אותו, או התוכניתן שירש את המערכת, או המנהל שאני צריך לעבוד איתו בארגון, או המזכירה באחד המשרדים - השפה צריכה להיות אחידה, ברורה ואינטואטיבית מאוד. לעומת זאת, היא צריכה לשרת ב-100% את המטרה של מי שקורא את המסמך הזה. המנהל צריך להשיג מהמסמך הזה את כל מה שקשור אליו, התוכניתן שבונה את המערכת צריך להוציא ממנה עיצוב בקלות, התוכניתן שמתחזק את המערכת צריך להבין בדיוק מה האינטרקציה בין הגורמים השונים במערכת וכיצד זה בא לכדי ביטוי בעיצוב ובקוד, והמזכירה צריכה להבין בקלות מה התפקיד שלה בכל זה. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;נשמע בלתי אפשרי? כנראה, אבל עם כמה שנות ניסיון בזה אני משתפר מפרוייקט לפרוייקט.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;הפורמט הנוכחי של המסמך הוא:&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;1. כל מה שהיה מכיל אפיון והמסמכים הקודמים והצמודים לו (דרישות הלקוח לפי Features, טכנולוגיות בשימוש, אנשי קשר, חלוקת אחריות, לוחות זמנים וכיו“ב). &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;מבחינת דרישות הלקוח התצוגה היא פר Feature (עוד על Features מתישהו במאמר על Feature-driven development). למשל: הוספת פרטי ספר, עריכת פרטי ספר, חיפוש ספר, תצוגת פרטי ספר, הוספת הוצאת ספרים, עריכת הוצאת ספרים, חיפוש הוצאת ספרים, תצוגת פרטי הוצאה וכך הלאה... &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;הפירוט פר Feature מציג תרשים UMLי אינטואטיבי מאוד שהוא סה”כ תמונה יפה. רואים בו את ה&lt;strong&gt;אנשים&lt;/strong&gt; וכיצד הם &lt;strong&gt;מתקשרים&lt;/strong&gt; ואיזה מקורות מידע וממשוק למערכת חיצוניות\פנימיות הם חלק מאותו תרשים. העובדה שהתרשים הזה הוא “תמונה יפה“ משחרר המון-המון-המון עבודה שבכל העולם היום משקיעים ב-UML. הבעיה הרצינית עם UML נובעת מכך שהוא כלי ולא סטנדרט. בשום מקום לא כתוב לאיזה רמת פירוט צריך להגיע בתרשימי UML. ברגע שמגיעים לסטנדרט ארגוני בנושא נשקיע כל-כך הרבה זמן לעמוד בו שההשקעה הזאת פשוט לא תשתלם. התרשים ה-UMLי במסמך הזה מיועד לכולם: המנהל שמבין כיצד אנו נבנה את התוכנה שלו, המזכירה שרואה את מקומה בארגון ומציעה שינויים, התוכניתן שצריך לבנות ובשלוש שניות מבט הבין מה התהליך שהוא בונה בקוד, והתוכניתן שצריך לתחזק את המערכת ומבין בתוך אותם שלוש שניות מה הולך ומי-נגד-מי. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;בנוסף הפירוט פר Feature מכיל רשימה טקסטואלית לחלוטין של Sub-Features של ה-Features הגדולים יותר. כאן זה המקום שנרשום את ה-Busniss Logic שלנו.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;2. החלק השני במסמך הוא החלק של העיצוב: חילקתי את ה-Features למסכים ובתוכם יש פירוט לרמת: תצוגת נתונים, קישור בין מסכים, טפסים, עיבוד טפסחם וכיו“ב. שכותבים שהשם של הספר יהיה הכותרת של המסך זה “תצוגת נתונים“. שרוצים לציין איזה שדות ומה התנאי וולידציה עליהם נכתוב את זה “טופס“. שרוצים להגיד שנקלטים נתונים הטופס ומוסיפים אותם לטבלת ספרים זה “עיבוד טופס“. שרוצים לקשר בין מסך של ספר למסך של המחבר שלו זה “קישור בין מסכים“. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;3. ERD של המסד נתונים. בנקודה שאתה כבר יודע איזה שדות יש לך במסך ואיזה כותרות ואיזה הכל - אין שום בעיה לכתוב ERD. עכשיו, בניגוד לכל שאר המסמך הזה שמלבד שהוא “מפת-דרכים“ לפרוייקט שלנו ונועד בעיקר ככלי אינטואטיבי להבנת האפליקציה - הERD אצלי הוא כלי עבודה חשוב ומהותי. כרגע אני כותב את ה-ERD בתוך תוכנת עיצוב מסדי נתונים בשם Erwin והוא מופיע במסמך עיצוב כקובץ בתוך מהמסמך. הסיבה היא שבחרתי Data-Driven development כצורת המחשבה שתקשר בין ה-Features האינטואטיביים לקוד של הפרוייקט. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;עכשיו, אחרי שדיברתי המון על מה אני מאמין ומה אני חושב שצריך, תכלס&amp;#39; - איך הייתי ניגש לבעיה שכתובה למעלה. אני יוצא מתוך נקודת הנחה שיש לי בסיס ריאלי להעמיד אליו אפליקציה והיא לא מתרחש או ב-Active directory או ב-Outlook או במסד נתונים, אלא באחד מאלו. לשם הדגמה נבחר במסד נתונים. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;א) Features במערכת:&lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;1. יצירת איש-קשר חדש בטבלת אנשי-קשר. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;2. יצירת קבוצת-קשר חדשה בטבלת קבוצות-קשר.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;3. עריכת פרטי איש-קשר קיים בטבלת אנשי-קשר.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;4. עריכת פרטי קבוצת-קשר קיימת בטבלת קבוצות-קשר.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;5. בחירת אנשי-קשר לקבוצת-קשר קיימת בטבלה שמקשרת בין אנשי-קשר לקבוצות-קשר.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;6. עריכת אנשי-קשר בקבוצת-קשר קיימת בטבלה שמקשרת בין אנשי-קשר לקבוצות-קשר.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;6. תצוגת אנשי-קשר בתצוגת-עץ.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;ב) ERD של המערכת - כתיבת Entity-Reletionship dIagram לשלושת הטבלאות (אנשי-קשר, קבוצות-קשר, וטבלה המקשרת בין אנשי-קשר וקבוצות-קשר). אחר כך הייתי מוסיף את הפונקציות שנובעות מה-Features. למשל אם עובדים עם Stored Procedures הייתי מוסיף לטבלת אנשי-קשר את contacts.AddNew ו-contact.EditExisting, לטבלת קבוצות-קשר הייתי מוסיף את contact_groups.AddNew ו-contact_groups.EditExisting, לטבלה שמקשרת בין שתי הטבלאות הללו הייתי יוצר את relation.AddRelation ואת relation.RemoveRelation. כמו כן הייתי מוסיף SP שמטרתה להחזיר טבלה שתתורגם בקלות ל-TreeView. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;ג) כתיבת המסכים ב-Dot net forms ומקשר ביניהם ל-Stored Procedures. על חלק זה אפשר להרחיב ואני מבטיח לעשות זאת. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;יש עוד המון שהיה אפשר להרחיב כאן על הארכיקטורה שאימצתי אני מאמין שהרוב ברור. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;רק בקשה אחת קטנה, תחשבו על זה. זה כל מה שאני מבקש, לפני שמסכימים, לפני שלא מסכימים, לפני ששוללים, לפני שכותבים תגובה, לחשוב על זה. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;ברכות,&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;ג&amp;#39;סטין-יוסף אנג&amp;#39;ל&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;היסטורית שינויים:&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;24.7.2005 - בחלק א&amp;#39;: יישום Composite Design Pattern, תודה לייוניי. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;25.7.2005 - בחלק א&amp;#39;: כתיבת Presentation layer. הוספת Strongly-typed collection.&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=142926" width="1" height="1"&gt;</description></item><item><title>אורקל ודוט נט - המציאות מוזרה מכל דמיון</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/09/21/142925.aspx</link><pubDate>Sat, 20 Sep 2008 21:14:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:142925</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>1</slash:comments><description>&lt;div dir="rtl" align="right"&gt;&lt;font face="Arial" size="4"&gt; &lt;p align="justify"&gt;שלום לכולם,&lt;/p&gt; &lt;p align="justify"&gt;במאמר הזה אני אדבר על החיבור המוזר של אורקל ודוט נט, &lt;strong&gt;מנקודת המבט של מפתחים המשתמשים System.Data.OracleClient.&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;&lt;u&gt;קדם דבר&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;לפני שנתחיל לדבר, ניישר קו על מה זה אורקל. אורקל הוא מסד נתונים אימתני. אורקל הוא מפלצת אימתנית של מסד נתונים שמסוגלת לעשות פחות או יותר הכל. &lt;/p&gt; &lt;p align="justify"&gt;מה זה אורקל ביחס לסיקוול סרבר(Sql server)?&amp;nbsp; פחות או יותר אותו דבר. יש הבדלים, אבל בוא נגיד שהם יותר למומחי מסדי-נתונים שזה העבודה שלהם ולא למפתחים. לעומת זאת יש הבדלים שחשובים לנו: באורקל עובדים עם PL/SQL ובסיקוול עובדים עם T-SQL, הממשק הנפוץ של סיקוול סרבר הוא ה-Enterprise Manager שהוא כלי גרפי והממשק הנפוץ של אורקל הוא חלון דוס מתוחכם (הרקע בלבן והטקסט בשחור ולא כמו בדוס שזה להפך), אההה וכן - מיקרוסופט לא פיתחה את אורקל. &lt;font size="2"&gt;(המאמר אינו עוסק בהבדלים בין אורקל וסיקוול סרבר ואין לקחת את פיסקה זו אפילו כעל קצה המזלג)&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;מיקרוסופט היא חברה מאוד מונופולית. בכל תחום אפשרי היא מקשה על המתחרים שלה ובכך הורגת אותם באכזריות (מהלך שאני תומך בו מאוד). אז למה מיקרוסופט לא עשתה אותו דבר לפיתוח דוט נט עם אורקל? היה מאוד פשוט לבוא ולהגיד “כן, טוב, אי-אפשר לפתח עם אורקל בדוט-נט”. אבל אורקל הוא מסד נתונים מאוד מבוסס ומיקרוסופט ידעו ויודעים שכל ניסיון להתעלם מאורקל רק יוביל שיתעלמו מדוט נט. אז הם התייחסו אליו, וברצינות. &lt;/p&gt; &lt;p align="justify"&gt;המאמר הזה מיועד בעיקרו לאלו שעובדים עם אורקל ונתקלו בבעיות נפוצות. &lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;&lt;u&gt;חלק א&amp;#39;: Data Providers (או: אופס&amp;#39;, בנינו למתחרים מוצר יותר טוב)&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;כיום עם הדוט-נט Framework נשלח Namespace בשם System.Data, והוא בין השאר מכיל את ה-Data Providers של דוט נט. ה-Data Providers הללו מאפשרים לנו להתקשר למסדי הנתונים. דוט נט פריימוורק נשלח עם שלושה Data Providers כברירת מחדל: סיקוול סרבר (SqlDataProvider), אורקל (OracleDataProvider) ואחד לכל השאר (OleDbProvider). &lt;/p&gt; &lt;p align="justify"&gt;שימו לב מה מיקרוסופט עשו, הם שמו את אורקל באותה רמת חשיבות ותכנון מראש של סיקוול סרבר. זה כמעט שקול לזה שמיקרוסופט יביאו את ווינדוס לונגהורן עם פיירפוקס מותקן בתוכו. תראו את גודל האמירה הזאת: אנחנו תואמים למוצר של חברה יריבה. &lt;/p&gt; &lt;p align="justify"&gt;משהו מאוד מעניין לשים לב עליו הוא בדיקות מהירות (BenchMarking) שבוצעו על שלושת ה-Native Data Providers. חיפשתי במשך כמה שעות מאמר שקראתי לפני כשנתיים ב-Dotnetjunkies.com המראה Preformance testing של שלושת ה-DataProviders ומראה כיצד בכל הסיטואציות שנבדקו לאורקל Data Provider יש ביצועים מהירים יותר. חשוב להדגיש, מיקרוסופט בנו את ה-Data Provider של המתחרים ככה שבשילוב עם מסד הנתונים אורקל - הוא יותר מהיר מה-Data Provider של סיקוול סרבר בשילוב עם סיקוול. &lt;font size="2"&gt;(חשוב להדגיש שחיפשתי את המאמר, לא מצאתי, שלחתי אי-מייל למנהלי האתר ואם וכאשר הם יחזרו אליי עם קישור אני אשים אותו כאן. אגב אתם מוזמנים לחפש בדיקות מהירות של ADO.net ל-Data Providers השונים ולהוסיף בתגובות למאמר)&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;strong&gt;חלק ב: עבודה עם קידודים (או: “מה קורה שמנסים לכתוב עברית במסד נתונים מערב-אירופאי”)&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;אורקל (בדומה לסיקוול סרבר) עובד עם קידודים שונים לשפות שונות. באורקל הקידודים הללו נקראים CharcterSets. ישנם שלושה CharcterSets נפוצים: utf-8 (יוניקוד), IW8ISO8859P8 (עברית ואנגלית), WE8ISO8859P1 (אנגלית). דוט נט בתוך הפריימוורק עצמו, בתוך ה-CLR, עובד עם יוניקוד.&lt;/p&gt; &lt;p align="justify"&gt;אם האורקל שלנו פועל על קידוד יוניקוד - הרווחנו. אין שום צורך לבצע התאמות. &lt;/p&gt; &lt;p align="justify"&gt;אם האורקל שלנו פועל על קידוד עברית ואנגלית - הרווחנו. הפריימוורק יודעת לטפל בזה. &lt;/p&gt; &lt;p align="justify"&gt;אם האורקל שלנו פועל על קידוד אנגלית (והקידוד ASCII המקומי - עברית) ובכל זאת אנחנו מכניסים לתוכו או קוראים ממנו גם מידע בעברית - נדפקנו קשות. כל פעם שנכניס מידע למסד הנתונים נצטרך לדאוג שהוא יעבור לקידוד המתאים, וכל פעם שנקרא מידע ממסד הנתונים נצטרך לדאוג שהוא יעבור לקידוד שאנחנו יכולים לקרוא. אם לא נקודד את המידע לפני ששולחים אותו לאורקל - יופיעו סימני שאלה במסד במקום התווים בעברית. אם לא נקודד את המידע שאנו מחזירים מאורקל - נקבל בחזרה רק סימני שאלה (למרות שהעברית במסד הנתונים עצמו מופיעה בסדר). &lt;/p&gt; &lt;p align="justify"&gt;נציג פונקציה בדוט נט שמטרתה היא להמיר מחרוזת מקידוד מקומי מסויים לקידוד מקומי אחר: &lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public string encodingConvert(string from_encoding,string to_encoding,string src) &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; Encoding fromEncoding = Encoding.GetEncoding(from_encoding);&lt;br /&gt;&amp;nbsp;&amp;nbsp; Encoding toEncoding = Encoding.GetEncoding(to_encoding);&lt;br /&gt;&amp;nbsp;&amp;nbsp; return toEncoding.GetString(fromEncoding.GetBytes(src));&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;font face="Arial" size="4"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;הפונקציה תקבל מחרוזת טקסטואלית ותמיר אותו מקידוד המקור לקידוד היעד. מצאתי שבזמן עבודה עם CharcterSet אנגלית (WE8ISO8859P1) באפליקציות שתומכות בעברית צריך להשתמש בשתי הפונקציות הבאות:&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public string encodeheb(string src)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; return encodingConvert(&amp;quot;windows-1255&amp;quot;,&amp;quot;ISO-8859-1&amp;quot;,src);&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;br /&gt;&amp;nbsp; public string decodeheb(string src)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; return encodingConvert(&amp;quot;ISO-8859-1&amp;quot;,&amp;quot;windows-1255&amp;quot;,src);&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;הפונקציה הראשונה, encodeheb, תקבל מחרוזת עברית מתוך העבודה הפנימית בדוט-נט (למשל מתוך טופס של המשתמש) ותקודד אותו ככה שהעברית תשמר נכון במסד. הפונקציה השנייה,decodeheb, תקבל מחרוזת ממסד הנתונים ותדאג לקודד אותו כך שדוט-נט יוכל לעבוד איתו (להציג אותו למשתמש למשל או לבצע מניפולציות על המחרוזת הזו). &lt;/p&gt; &lt;p align="justify"&gt;ברגע שניישם את הפונקציות הללו בקוד שלנו, נצטרך להתחיל ליצור פונקציות שיודעות לתרגם את הפקדים הרלוונטים. למשל בעת החזרת נתונים מאורקל נצטרך לדאוג לבצע decodeheb על כל DataCell בכל DataRow בכל DataTable בכל DataSet וגם לבנות מעטפת לפונקציות של OracleDataReader. בעת שליחת נתונים לאורקל דרך שאילתות נצטרך לדאוג כי הן יעברו במקום מרכזי שבו יהיה ניתן קדם שליחתם לאורקל לדאוג שהם יעברו לקידוד שאורקל יכול לעבוד איתו באמצעות פונקציה encodeheb (עקרונית, לעבור על OracleParameter.Value ולדאוג להעביר אותו לקידוד המתאים). &lt;/p&gt; &lt;p align="justify"&gt;שאלה נפוצה היא אם משחקים כאלו ב-Encoding לא פוגעים בביצועים או מקשים בצורה בלתי-סבירה על תהליך כתיבת הקוד - התשובה היא לא. בכל אפליקציה רצינית שראיתי תמיד יש פונקציות שמטפלות בכל הקשור ל-DAL בצורה פרטנית לטיפוסי הנתונים. לא חסרות דרכים לשלב כאלו פונקציות בצורה שתהיה שקופה ברוב תהליך כתיבת הקוד. אפשר למשל לשלב את זה ב-DAL שלנו, אפשר לרשת מפקדי ה-Data השונים ולהוסיף להם את הפונקציות שאחריות לשינויי הקידודים ב-Delegates הרלוונטים, ועוד אלף ואחת אפשרויות. &lt;/p&gt; &lt;p align="justify"&gt;עוד שאלה נפוצה על שינויי קידוד היא מה קורה אם (למשל) עבדנו בפיתוח באורקל בקידוד אנגלית אבל שרת האורקל ריצה שלנו פועל על קידוד יוניקוד\עברית-אנגלית. מאוד פשוט, ניתן לשמור קונפיגיורציה אפלקטיבית שאומרת האם בכלל יש לבצע את שינויי הקידודים האלו או לא. כמובן שהתרחיש היותר הגיוני הוא שבגירסה 1.0 של האפליקציה היינו חייבים לעבוד עם קידוד אנגלית, ולפני גירסה 2.0 עברנו ל-CharcterSet של יוניקוד\עברית-אנגלית. גם כן, היות וכל הקריאות לשינויי הקידודים הם Centerlized באפליקציה שלנו אפשר דרך עריכה של הקוד (או כתיבה נכונה של והסתמכות על קונפיגיורציה אפלקטיבית) לדאוג שלא יתבצעו שינויי הקידוד. &lt;/p&gt; &lt;p align="justify"&gt;שוב, כל הסיפור הזה תקף אך ורק אם אתה עובדים עם מסד אורקל שמאיזהשהי סיבה ה-Charcter Set שלו הוא אנגלית בלבד (WE8ISO8859P1). &lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;strong&gt;חלק ג&amp;#39;: ORA-01036: illegal variable name/number&amp;nbsp; (או: “הודעת שגיאה ג&amp;#39;נארית שלא אומרת כלום!“)&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;למי מכם שצברו ניסיון בעבודה עם System.Data.OracleClient הבינו עד עכשיו קטע מאוד מעניין: מיקרוסופט לא היו כזה סגורים על כל הקטע של Bind Variables (המקביל של אורקל ל-SqlParameter של סיקוול) ובחלק מהמקומות פשוט לא דאגו להודעות שגיאה נורמליות. &lt;/p&gt; &lt;p align="justify"&gt;ההודעת שגיאה אשר כתובה למעלה היא הודעת שגיאה של אורקל. אורקל זורק את השגיאה הזאת כאשר דוט נט מצהירה בצורה בלתי-זהירה על Bind Variables. מה זה “בלתי-זהירה”? מה צריך לבדוק? מה צריך לתקן? &lt;/p&gt; &lt;p align="justify"&gt;מצחיק מאוד שכל הנושא הזה לא מתועד בשום מקום, אין שום מאמר מקיף אליו בשום-מקום באינטרנט ולמעשה כרגע אני די משוכנע שאני היחידי שעושה טעויות כאלו, אבל ניחא :)&lt;/p&gt; &lt;p align="justify"&gt;הנה האפשרויות שאני נתקלתי בהן:&lt;/p&gt; &lt;p align="justify"&gt;1. השם של ה-Bind Variable גדול מ-31 תווים. &lt;/p&gt; &lt;p align="justify"&gt;2. אי-הוספת “:” בהצהרה על שם ה-Bind Variable (בדומה לשטרודל של סיקוול סרבר). &lt;/p&gt; &lt;p align="justify"&gt;3. אם הצהרנו על Bind Variable ולא השתמנו בו. &lt;/p&gt; &lt;p align="justify"&gt;4. סינטקס קלול ליד שם הפרמטר - למשל, לשים רווח לפני\אחרי שם פרמטר או שם פרמטר עם רווחים.&lt;/p&gt; &lt;p align="justify"&gt;5. לא הוספנו ל-OracleCommand מאפיין CommandType.&lt;/p&gt; &lt;p align="justify"&gt;6. הצהרה על סוג פרמטר לא נכון ביחס לעבודה איתו בשאילתות או PL/SQL (הצהרה על מחרוזת ולהשוות למספר, להעביר LONG במקום NUMBER בתוך פונקציה וכיו”ב).&lt;/p&gt; &lt;p align="justify"&gt;השגיאה הזאת מאוד מפורסמת בעיקר כי יש אנשים שביזבזו שעות על גבי שעות לנסות למצוא פסיק או שורה שכחלק מהרגלי כתיבת קוד הם תמיד שמים ומאוד קשה לשים לב שהם לא שם או שיש שם פסיק יותר מדי. &lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;strong&gt;חלק ד&amp;#39;: ORA-00100 error: maximum open cusors (או: “הפקודות שסירבו למות”)&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;שגיאה מאוד פשוטה שנגרמת מכך שלכל שרת אורקל יש מספר מקסימלי של Cursors שהוא רשאי לפתוח בזמן נתון. אם עברנו את הגבול הזה - כנראה מאוד שעשינו משהו לא נכון. (או שיש לנו מעל 100+ פניות למסד הנתונים פר שנייה ביחס לערך ההתחלתי של המקסימום Open cursors). &lt;/p&gt; &lt;p align="justify"&gt;אופציה ראשונה היא שבטעות הכנסו את האפליקציה שלנו ללולאה אין-סופית והיא מפגיזה את השרת בשאילתות בלי לתת לו הזדמנות להחזיר נתונים (למשל בלולאה אין-סופית שבראש מסך מסויים תתבצע שאילתא א-סינכרונית וישר אחר-כך תתבצע הפנייה למסך אחר). אם זה המצב - לולאות אין-סופיות זה דבר רע - תתקנו את זה.&lt;/p&gt; &lt;p align="justify"&gt;אופציה שנייה, לא עשיתם Dispose ל-OracleCommand שלכם. בכדי להחזיר רשומות דרך PL/SQL בדוט נט צריך לעבוד עם מה שנקרא Ref Cursors.&amp;nbsp; מה שקורה הוא שנשלחות תוצאות שאילתא מאורקל בטיפוס הנתונים הפנימי שאורקל עובד איתו. הטיפוס נתונים הזה צריך בסוף להיסגר אחרת הוא נחשב פתוח (עמוק, אני יודע). יש גבול לכמה תוצאות שאילתות פתוחות אפשר להחזיק בו-זמנית בשרת אורקל. אם שלחנו Ref Cursors מ-PL/SQL לדוט נט באמצעות OracleCommand חובה עלינו לבצע Dispose ל-OracleCommand ברגע שהיא כבר לא בשימוש. אסור לחכות ל-GC שיעשה את זה. &lt;/p&gt; &lt;p align="justify"&gt;אופציה שלישית, לא עשיתם שום דבר רע. האפליקציה שלכם גדלה והגיע למצב שצריך לדאוג ל-Oracle Scalability. דברו עם ה-DBA שלכם, אבל בעקרון מספיק לשנות את max_open_cursors בקובץ ההגדרות של השרת אורקל. מניסיון מכאיב עם DBA, אל תעלו את המקסימום לפי 5 בלי להגיד ל-DBA :)&lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;strong&gt;חלק ה&amp;#39;: פריסת לקוח אורקל (או: “איזה מזל שצריך לעשות את זה רק פעם אחת!”)&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;בשעה טובה הגעתם לזמן לפרוס שרת אפליקציה שמתקשר לשרת אורקל. היות ובניגוד לאקסס וסיקוול סרבר, Windows Server לא בא עם הכלים המתאימים להתחבר לאורקל. צריך תשתית מתאימה על המכונה בכדי ששרת האפליקציה שלנו (web server) יוכל להתקשר לשרת האורקל. &lt;/p&gt; &lt;p align="justify"&gt;האפשרות הראשונה היא להתקין על המכונה הזאת Oracle Client שזאת חבילת תוכנות שאפשר להוריד מהאתר של אורקל. לקנפג את ה-TNS_NAMES והכל מוכן. למיטב ידיעתי לכל גירסה של אורקל שאינו 10/11 אין שום אפשרות אחרת.&lt;/p&gt; &lt;p align="justify"&gt;אם עובדים עם אורקל 10/11 יש מה שנקרא Oracle Instant Client. מדובר על קבוצה מאוד קטנה של DLLים שמאפשרים התחברות למסד אורקל. כמה התהליך של התקנת Instant Client:&lt;/p&gt; &lt;p align="justify"&gt;1. הורדת Oracle 10g/11 Instant Client מאתר ההורדות של אורקל.&lt;/p&gt; &lt;p align="justify"&gt;2. העתקת כל ה-DLLים שבספרייה הראשית של ה-ZIP שהורדתם לספריית System32. כמובן שבמקום להעתיק ל-System32 ניתן להוסיף איזה תיקייה בצד ולהוסיף אותה ל-Path של חלונות, אבל במצב הזה כבר מומלץ להצטייד באיש IT הידודותי הקרוב למקום מגוריכם. &lt;/p&gt; &lt;p align="justify"&gt;3. העתקת TNS_NAMES.ora ו-Sqlnet.ora לספריה כלשהי במכונה. (לא לשכוח קנפג את TNS_NAMES). &lt;/p&gt; &lt;p align="justify"&gt;4. להוסיף Enviorment variable על המכונה בשם TNS_ADMIN שיכוון למיקום של הקובץ.&lt;/p&gt; &lt;p align="justify"&gt;5. לתת למשתמשי ה-IIS הרלוונטים גישת Read &amp;amp; Read and execute &amp;amp; List content על הספרייה שבו שמנו את ה-TNS_NAMES.ora. ייתכן וגם יהיה צורך לתת למשתמשי ה-IIS הרלוונטים הרשאה לקרוא את ה-DLLים שפרסנו בסעיף 2 (משתנה לפי גירסת מערכת ההפעלה של חלונות ועדכוני האבטחה). &lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;strong&gt;לסיכום&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;השתדלתי במאמר זה להעביר חלק מהידע שהצטבר אצלי בעבודה על השילוב המוזר של אורקל ודוט נט. מקווה שעזרתי לכם וחסכמתי כמה שעות של דיבוג.&lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;ברכות,&lt;/p&gt; &lt;p align="justify"&gt;ג&amp;#39;סטין-יוסף אנג&amp;#39;ל&lt;/p&gt;&lt;/font&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=142925" width="1" height="1"&gt;</description></item><item><title>Struct ו-Class -ההבדלים והכוח הטמון בשוני ביניהם</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/09/21/struct-class.aspx</link><pubDate>Sat, 20 Sep 2008 21:06:22 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:142916</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>0</slash:comments><description>&lt;div dir="rtl" align="right"&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;שלום לכולם,&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;font face="Arial" size="4"&gt;קדם דבר&lt;/font&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;בואו נדבר קצת על ההבדלים בין Struct (להלן: מבנה) ל-Class (להלן: מחלקה). למי שרק עכשיו שומע על מבנה נסביר בתמצות מהו מבנה (מהפן הפרקטי). שאנו כותבים מחלקה חדשה הקוד יראה בערך ככה: &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public class ClassName &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;{&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;// ...&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;}&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;אז שאנחנו עובדים עם מבנה זה יראה ככה: &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public struct StructName &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;{&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;// ...&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;}&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;הבדל ענק נכון? אז אתם, שנתקלים במושג הזה פעם ראשונה או שנתקלתם בו בעבר, כנראה חושבים שהוא מיותר לחלוטין. סתם עוד פדנטיות שמתכנתי הסיפיפי האלו הכניסו לנו לשפה כי הייתה להם חרדת נטישה. אז אני בא ואומר שזה לא המצב. במאמר הזה נראה מה באמת ההבדלים בין מבנה למחלקה,&amp;nbsp; ולא רק מה ההבדלים - אלה נראה איזה כוח עצום טמון במבנים. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;חלק א&amp;#39;: על Stack ו-Heap, ועל Refrence type ו-Value type (או: “אני אמיתי ואתה לא!“)&lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;נחזור ונכיר כמה מושגי יסוד: Value types ו-Reffrence types. כידוע, כל אובייקט במערכת יורש מ-System.Object, אך יש קבוצה קטנה של בעלי סגולה שיורשים גם מ-System.ValueType ומכאן מתחילים כל ההבדלים. נזכיר כעת כמה ValueTypes שהם סלברטאים: int, bool, char ו-enum. עכשיו נראה כמה Refrence Types שגם הם סלבריטאים: System.Web.UI.DropDownList, System.Windows.Forms.CheckBox ו-ArrayList. מניסיון קודם אנחנו רואים בבירור שיש הבדלים כלשהם. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;אחרי שהראינו כי באופן אינטואטיבי קיים הבדל כלשהו, ניכנס עוד יותר לעומק ונדבר על Stack ו-Heap. ה-Stack וה-Heap הם מקומות המוקצים בזכרון המחשב ובו נמצאים האובייקטים שלנו.&amp;nbsp; כל Refrence type שניצור יווצר על ה-Heap, ובתוך בלוק הקוד שלנו יווצר לנו משתנה המצביע על אותו מקום ב-Heap רק שההפנייה הזאת ל-Heap יושבת ב-Stack. במילים פשוטות, שניצור DropDwonList הוא נוצר למעשה ב-Heap ושאנו עובדים עם אותו DropDownList אנו למעשה עובדים עם הפנייה שיושבת ב-Stack שמפנה לאותו מקום ב-Heap. מהסיבה הזאת אפשר ליצור מיליון הפניות ב-Stack לאותו מקום ב-Heap. נראה בדוגמה על מה דיברנו כרגע:&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public void someProcedure() &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;{&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&amp;nbsp; System.Web.UI.DropDownList firstDDL = new DropDownList(); &lt;/font&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&amp;nbsp; System.Web.UI.DropDownList secondDDL = firstDDL;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&amp;nbsp; firstDDL.Items.Add(new ListItem(“SomeItem)); &lt;/font&gt; &lt;div dir="ltr" align="justify"&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&amp;nbsp; // print how many items in firstDDL&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&amp;nbsp; Response.Write( firstDDL.Items.Count + “ items in first DDL“ ); &lt;/font&gt;&lt;/div&gt;&lt;font face="Arial"&gt;&amp;nbsp; // print how many items in secondDDL&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&amp;nbsp; Response.Write( secondDDL.Items.Count + “ items in second DDL“ ); &lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;}&lt;/font&gt;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;נעקוב בקצרה אחרי מה שעשינו, הצהרנו על Refrence type ובנינו לו שני הפניות. הוספנו להפנייה הראשונה פריט אחד. שהדפסנו כמה פריטים יש בכל DropDonwList נקבל שיש בכל הפניה פריט אחד, למרות שלא הוספנו פריט להפניה השנייה. כלומר, עבדנו למעשה בשני ההפניות האלו על אותו אובייקט בזכרון. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;עכשיו נדבר על Stack. הרעיון מאחורי Stack זה לשמור מידע כמה שיותר זמין לתקופת הזמן שאנו עובדים איתו. ה-Stack באופן יחסי קטן באופן ניכר מה-Heap מהסיבה היא שזה הזכרון שאיתו רוב הזמן המעבד עובד איתו וככל שהוא יותר “ממוקד” ככה העבודה מהירה יותר. זה מתקשר ל-ValueTypes בכך שכל ValueType נשמר רק על ה-Stack ואין טיפת קשר ל-Heap. היות ואנו לא עובדים עם הפניות אנו תמיד עובדים עם אובייקטים ממשיים. ניישם את הדוגמה שהוזכרה למעלה על int32:&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public void someOtherProcedure()&amp;nbsp; { /* Changed on 30.7.05, Thanks Eran */&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;{&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;int firstInt = 1;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;int secondInt =&amp;nbsp; firstInt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&amp;nbsp; secondInt = secondInt + 1; // (secondInt += 1;)&amp;nbsp; &lt;/font&gt; &lt;div dir="ltr" align="justify"&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&amp;nbsp; // print first Int&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&amp;nbsp; Response.Write(”first Int32 is: “ + firstInt.ToString() ); &lt;/font&gt;&lt;/div&gt;&lt;font face="Arial"&gt;&amp;nbsp; // print second string&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&amp;nbsp; Response.Write(”second Int32 is: “ + secondInt.ToString() ); &lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;}&lt;/font&gt;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;הצהרנו על משתנה מספרי חדש, השוונו משתנה מספרי נוסף אליו וביצענו שינוי במשתנה המספרי הנוסף. לעומת הדוגמה הקודמת, אנו נקבל שהמספר הראשון לא שונה בעקבות זאת, רק המספר השני השתנה. כלומר, באמת הוכחנו שאנו עובדים עם אובייקטים ממשיים המבוססים על ערך ולא על הפנייה. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;חלק ב&amp;#39;: ואיך כל זה קשור למבנים ומחלקות? (או: “נו, תכלס&amp;#39;, למה שיהיה אכפת לי?”)&lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;מבנה הוא ValueType (בדומה למחרוזת, מספרים, בוליאנים ו-Enums) ומחלקה היא Refrence Type (פחות או יותר כל השאר). נתחיל לדבר על הבדלים מבחינת תכנות:&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;1. אי-חובת כתיבת Constructors: (או: “אותי אתה לא צריך לאתחל“)&lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;למחלקה תמיד חובה שיהיה Constructor אחד לפחות. כאשר כל ה-Constructorים של מחלקה הם Private - לא ניתן לממש את המחלקה. נראה דוגמה:&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public class myClass&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; private myClass()&lt;br /&gt;&amp;nbsp; { }&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;myClass curClass = new myClass(); // Throws exception&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;למעשה את myClass מהדוגמה אי-אפשר לממש. אין לו שום Constructor שבאמת ניתן דרכו לממש את myClass.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;לעומת זאת, מבנה תמיד תמיד תמיד אפשר לאתחל. תכתבו Constructor, אל תכתבו Constructor, תכתבו שה-Constructor הוא Private, למי אכפת?&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public struct myStruct_NoConstructor&lt;br /&gt;{&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public struct myStruct_PrivateConstructor&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; private myStruct_PrivateConstructor(int x)&lt;br /&gt;&amp;nbsp; { }&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public struct myStruct_SomeConstructor&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public myStruct_SomeConstructor(int x)&lt;br /&gt;&amp;nbsp; { }&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;// No Exceptions will be thrown&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;myStruct_NoConstructor struct1 = new myStruct_NoConstructor();&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;myStruct_PrivateConstructor struct2 = new myStruct_PrivateConstructor();&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;myStruct_SomeConstructor struct3 = new myStruct_SomeConstructor();&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;שמתם לב? בין אם נכתוב או לא נכתוב Constructor יהיה אפשר לממש מבנה. את ההסבר לזה נראה בסוף הסעיף הבא. אבל ביינתים נראה בדוגמה שגם הרי לא חייבים את ה-Constructor של מספר כדי ליצור מופע של מספר. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;2. אי-חובת איתחול (או: “ברגע שדיברת אליי, אני כבר פה“)&lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;בזמן שניתן לממש כל מבנה בלי קשר לסטטוס ה-Constructor שלו, לא חייבים בכלל לאתחל אותו. מספיק לתת “הפנייה” למבנה והוא כבר מאותחל. ברגע שנכתוב הפנייה למבנה נוכל לגשת לכל ה-Public members שלו.&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public struct myStruct&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public int x; &lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;// We do not initliize myStruct&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;myStruct curStruct;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;// Change public X int value (no exception is thrown)&lt;br /&gt;curStruct.x = 1;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; // Print X (no exception is thrown)&lt;br /&gt;Console.Write(curStruct.x);&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;יצרנו מבנה שאין לו אפילו Constructor, לא איתחלנו אותו, שמנו ערך חדש במשתנה Public ועוד הדפסנו לו את הערך. אם היינו מנסים כזה דבר במחלקה היינו חוטפים שגיאות על זה שאין לו Constructor ועל זה שלא קראנו ל-Constructor. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;ברור גם למה זה קורה, הרי מבנה יושב ב-Stack שברגע שאנו מגדירים אובייקט שיושב שם ברור שלא מדובר באיזה הפנייה ל-Heap, אלא באובייקט לפני עצמו ולכן ה-CLR ישר שם מקום המיועד למבנה ב-Stack. כנ”ל ברור יקרה גם עם&amp;nbsp; int, enum ושאר Value Types.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;3. מבנה לא יכול להיות null (או: “אני תמיד איתכם ברוחי“)&lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;היות ותמיד ניתן לאתחל מבנה מרק ליצור אליו הפנייה - לא ייתכן שנדבר על מבנה שהוא null. למעשה, null מתייחס להפנייה ל-Heap שלא מצביעה לשום מקום. היות ואין שום הפנייה ל-Heap לא יכול להיות שמבנה שווה ל-null. &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;myStruct curStruct;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;if (curStruct==null) { } // Throws Exception&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;font size="4"&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&lt;u&gt;4. אין הורשה למבנה או ממבנה (או: “נדוניה וירושה”)&lt;/u&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;כל מה שהוא Value Type יורש בהכרח מ-System.ValueType שנותן לו את כל היכולות שהזכרנו ונזכיר. אך, מעבר ללרשת מ-System.ValueType שקורה באופן שקוף לנו, לא ניתן לבצע ירושה על ValueTypes. כלומר מבנים לא יכולים לרשת מבנים\מחלקות אחרות, ולא יכולים להיות אובייקטים מהם יורשים. דוגמה ידועה לזה היא שלא ניתן לרשת int וליצור SuperInt עם הרבה יותר פונקציונליות. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;לכאורה מדובר בחסרון, אבל בגלל היעוד של מבנה מדובר למעשה בנכס היות וה-CLR מכריח אותנו לעבוד פשוט. (עוד על היעוד של מבנה בהמשך)&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;נחדד את ההבדלים בין מבנה למחלקה בנושא ירושה: כל מבנה הוא Sealed (לא ניתן לרשת ממנו והוא לא יכול לרשת), אי-אפשר להצהיר על Abstract struct (הרי אם אין ירושה ממבנה זה מיותר),&amp;nbsp; לא ניתן להצהיר על Protected members (הרי אם לא ניתן לרשת ממנו אז מה הטעם לכתוב משתנים שרק מי שיורש ממנו יכול לגשת אליהם?), ומבנה לא יכול לעשות Override למתודות שלא נורשות מ-System.Object. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;font face="Arial"&gt;5. אסור Destructor (או: “אני הולך לבד הביתה”)&lt;/font&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;במבנה כל ניסיון לכתוב Destrector (פונקציה שנקראת בזמן הריסת המבנה ע”י ה-garbage collector) תגרום לשגיאה. במחלקה אפשר לרשום Destructor (למרות שאלמלא אתם בונים מחדש תשתיות גישה לקבצים\מסדי-נתונים\... זאת תהיה טעות דרסטית לעשות את זה). &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;הנה דוגמה למחלקה עם Destructor שיתקמפל, ודוגמה למבנה עם Destructor שלא יתקמפל: &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;// Will not throw compile error&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public class myClass_Destrcutor&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public myClass_Destrcutor()&lt;br /&gt;&amp;nbsp; { }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; ~myClass_Destrcutor()&lt;br /&gt;&amp;nbsp; { }&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;// Will throw Exception&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;public struct myStruct_Destrcutor&lt;br /&gt;{&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&amp;nbsp; ~myStruct_Destrcutor()&lt;br /&gt;&amp;nbsp; { }&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;שננסה לקמפל את myStruct_Destrcutor נקבל את השגיאה הבאה: Only class types can contain destructors. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;הסיבה לכך נעוצה בתכולת החיים של משתנים ב-Stack ובה-Heap. למעשה ה-Heap מיועדת להחזיק בחיים משתנים מעבר לתחולת החיים של הפונקציה הנוכחית, ה-Thread הנוכחי, ואף מעבר לתכולת החיים של כלל התוכנית. לעומת זאת, משתנים ב-Stack הם משתנים מקומיים שחיים רק כל עוד שבלוק הקוד שלהם פעיל. בנוסף, מבחינה הגיונית - ב-#C קיימים Destructrים אך ורק בשביל תשתיות נרחבות שנבנו מחדש, שזה לא היעוד של מבנים. (עוד על היעוד של מבנים בהמשך)&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;font face="Arial"&gt;6. אופן ההשוואה בין מבנים ומחלקות (או: “במחלקות זה האריזה, במבנה זה התוכן“)&lt;/font&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;כאשר נשווה בין שתי מחלקות מה שיתרחש למעשה זה השוואה של “האם ההפניות בזכרון מפנות לאותו מקום?”&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public class myClass&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public myClass()&lt;br /&gt;&amp;nbsp; { }&amp;nbsp; &lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;myClass firstClass = new myClass();&lt;br /&gt;myClass firstClass_SamePointer = firstClass;&lt;br /&gt;myClass secondClass = new myClass();&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;bool firstTest = (firstClass== firstClass_SamePointer); // Is true&lt;br /&gt;bool secondTest = (firstClass == secondClass); // Is False&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;Console.WriteLine(firstTest.ToString() + &amp;quot; &amp;quot; + secondTest.ToString());&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;יצרנו שלושה מחלקות: מחלקה ראשונה שהיא myClass ברירת-מחדל, מחלקה שנייה שהיא הפנייה נוספת למחלקה הראשונה, ומחלקה שלישית שהיא גם myClass ברירת-מחדל. המחלקה הראשונה שווה למחלקה השנייה (היות ושניהן מצביעות לאותו מקום בזכרון). לעומת זאת, המחלקה הראשונה לא שווה למחלקה השלישית, למרות שיש להן &lt;strong&gt;בדיוק אותו תוכן&lt;/strong&gt;. למעשה כל מה שאנו בודקים בהשוואה בין מחלקות זה הפניות לזכרון. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;לעומת זאת, שאנו משווים בין מבנים חובה עלינו לבנות פונקציה שעושה השוואה בין התוכן שלהם.&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public struct myStruct_Equels &lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public int x;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public override bool Equals(object OtherObj)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; myStruct_Equels otherMyStruct_Equels&amp;nbsp; = (myStruct_Equels) OtherObj;&lt;br /&gt;&amp;nbsp;&amp;nbsp; return otherMyStruct_Equels.x == x;&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;}&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;יצרנו מבנה שעושה Override ל-Equels ובודק אם ה-X של מופע אחר של אותו מבנה שווה ל-X שלו. &lt;/font&gt;&lt;/p&gt;&lt;font size="4"&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;myStruct_Equels firstStruct;&lt;br /&gt;firstStruct.x = 1;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;myStruct_Equels secondStruct;&lt;br /&gt;secondStruct.x = 1; &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;Console.WriteLine((firstStruct.Equals(secondStruct)).ToString());&lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;יצרנו שני מבנים מאותו סוג, הכנסנו להם אותו ערך ל-X ובדקנו אם הם שווים. התוצאה תהיה True. אם נשנה את הערך X של אחד מהם - התוצאה תהיה False. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;יבואו המתחכמים ויגידו - אבל אתה יכול לממש מחלקה שגם הוא תבדוק השוואה לפי התוכן, ובכלל למה אני צריך לממש את הבדיקה של התוכן&amp;nbsp; במבנה? &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;דבר ראשון, אפשר לממש מחלקה שתעשה פחות או יותר הכל, אבל זה לא סטנדרט לדרוס את הפונקציות השוואה של מחלקות ולשנות להן לחלוטין את המשמעות. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;דבר שני, אנחנו בכלל לא חייבים לממש את Equels של myStruct_Equels. זאת רק הייתה דוגמה. &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public struct myStruct_Equels &lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public int x;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;}&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;המימוש הזה של myStruct_Equels ירוץ בדיוק אותו דבר כמו זה שרשמנו למעלה, וה-CLR יעשה לבד את ההשוואה בין כל המשתנים שלו. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;ברור לנו גם למה יש את ההבדל המהותי הזה. היות ושני המבנים הם ValueTypes, הם לעולם לא יצביעו לאותו מקום בזכרון (תביטו בחלק א&amp;#39; ותראו דוגמה של איך זה פועל במחרוזות). לכן חובה שההשוואה תהיה לפי תוכן, ולא לפי הפניה.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;font face="Arial"&gt;7. התייחסות פנימית (או: “אני בכלל הוא”)&lt;/font&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;תשומת לב במיוחד לסעיף הזה (והבא) בבקשה כי עליהם מבוססת הדוגמה בהמשך. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;נביט שנייה על myClass:&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public class myClass_ThisIsOtherThis&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public myClass_ThisIsOtherThis()&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; this = new myClass_ThisIsOtherThis(); // Throws exception&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;בדוגמה הזאת ניסינו בתוך פונקציה כלשהי (במקרה היא ה-Constructor) להגיד this שווה משהו אחר. במחלקהזה בלתי אפשרי. הסיבה היא שבמחלקה ה-this הוא רק הפנייה למקום מאוד ספציפי בזכרון. כחלק מרעיון ה-managed code (קוד שמנהל לנו שימוש בזכרון) לא ניתן לעשות את זה. ולכן הקומפיילר זורק לנו שגיאת this is readonly. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;לעומת זאת היות ומבנה יושב על ה-Stack כן ניתן בתוך פונקציה כלשהי של המבנה לשים ערך חדש לחלוטין כל עוד הוא מאותו סוג. נביט על דוגמה: &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public struct myStruct_ThisIsOtherThis&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; private void myStruct_ChangeThis()&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; this = new myStruct_ThisIsOtherThis(); // Will not throw exception&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;public struct myStruct_ThisIsOtherThis&lt;br /&gt;{&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&amp;nbsp; public int x;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;br /&gt;&lt;font face="Arial"&gt;&amp;nbsp; public myStruct_ChangeThis(int x)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this = new myStruct_ThisIsOtherThis(x+1); // Will not throw exception&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;font face="Arial"&gt;8. אתחול משתנים פנימיים (או: “אני בכלל לא פה”)&lt;/font&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;כאשר אנו בונים Members למחלקה הם מקבלים ערך של ברירת מחדל כאשר אנו מאתחלים את המחלקה (וכפי שידוע, לא ניתן לגשת למחלקה בלי שתהיה מאותחלת או בלי שה-Memebers יהיו סטטיים). נסביר בפשטות, אם נרשום משתנה פנימי למחלקה,&amp;nbsp; ברגע אתחול המחלקה המשתנה הפנימי יקבל ערך ברירת-מחדל. למשל מספר יקבל 0, מחרוזת תקבל “”, בוליאני יקבל 0 וכך הלאה. נדגים זאת:&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public class myClass_ValueOnInit&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public bool innerBool;&lt;br /&gt;&amp;nbsp; public int innerInt;&lt;br /&gt;&amp;nbsp; public string innerString;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public myClass_ValueOnInit()&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine(innerBool.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine(innerInt.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine(innerString.ToString());&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;myClass_ValueOnInit myClass = new myClass_ValueOnInit();&lt;/font&gt;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;שמנו שלושה משתנים פנימיים: אחד מסוג בוליאני, אחד מסוג מספר והשלישי מסוג מחרוזת. בקונסטרקטור הדפסנו אותם. נקבל שהבוליאן הוא False, המספר הוא 0 והמחרוזת ריקה. כך שלמעשה קיבלנו שהיינו יכולים לרשום ככה את המחלקה: &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public class myClass_ValueOnInit&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public bool innerBool = false;&lt;br /&gt;&amp;nbsp; public int innerInt = 0;&lt;br /&gt;&amp;nbsp; public string innerString = &amp;quot;&amp;quot;;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public myClass_ValueOnInit()&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine(innerBool.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine(innerInt.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine(innerString.ToString());&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;מדובר בערכים ברירת מחדל של ה-CLR שברגע שאנו נאתחל את המחלקה הם יקבלו את ערכים אלו. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;נדגים מה קורה במבנה. נשנה את המחלקה למבנה: (באמצעות החלפת ה-“Class“ ב-“Struct“) &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public struct myStruct_ValueOnInit&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public bool innerBool;&lt;br /&gt;&amp;nbsp; public int innerInt;&lt;br /&gt;&amp;nbsp; public string innerString;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public myStruct_ValueOnInit(object blah)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine(innerBool.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine(innerInt.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine(innerString.ToString());&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;// Throws Exception&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;myStruct_ValueOnInit myStruct = new myStruct_ValueOnInit(new object());&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;ברגע שניסינו לקמפל את המבנה הזה נקבל שגיאה שהמשתנים הפנימיים אינם מאותחלים. נכתוב מחדש את ה-Struct לשם מיקוד:&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public struct myStruct_ValueOnInit&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public bool innerBool;&lt;br /&gt;&amp;nbsp; public int innerInt;&lt;br /&gt;&amp;nbsp; public string innerString;&lt;/font&gt;&lt;font size="4"&gt;&lt;br /&gt;&lt;font face="Arial"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;אפשר לראות בבירור שבשום מקום בקוד (וגם לא בברירת-מחדל) לא מאתחלים את הערכים הפנימיים. למעשה עצם הגדרת המבנה רק אומרת כי המבנה קיים ולא מאתחלת את המשתנים הפנימיים. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;font face="Arial"&gt;9. עוד הבדלים&lt;/font&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;לא חסרים עוד הבדלים בין מבנים למחלקות: ניתן לשלוח מבנה כ-ref או out בפונקציות פנימיות, לא ניתן לנעול מבנה (כדי שהוא יהיה thread-safe), וכיו”ב. אתם מוזמנים להמשיך לחקור את הנושא.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;font face="Arial"&gt;חלק ב&amp;#39;: ייעוד המבנה (או: “עף כמו דבורה, עוקץ כמו פרפר”)&lt;/font&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;את החלק הזה אני בכוונה שמרתי עד שנגיע למצב בו באמת נראה מה ההבדלים בין מבנה למחלקה. אין פה באמת גם הרבה מה להגיד מבחינת תאוריה. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;מבנה יועד להיות האח הקטן, הטיפה נכה והחמוד של מחלקה. הוא צריך היה לתת מענה למצב שבו לקרוא למחלקה זה פשוט Overkill. כמו לקרוא למייק טייסון לקטטת רחוב, פשוט מיותר. מבנה אמור להיות טיפוס נתונים קל ולשם כך הוא בנוי וכל התכונות וההתנהגות שלו מבוססים על זה. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;נראה דוגמה ונבין למה מחלקה לא מתאים להיות טיפוס נתונים קל. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;font face="Arial"&gt;חלק ג&amp;#39;: דוגמה לשימוש נכון במבנה (או: “הלכתי לאיבוד, מה הקורדינטות של מיקומי הנוכחי?”)&lt;/font&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;תרחיש אמיתי לחלוטין. אנחנו בונים מערכת GIS (מערכת מפות). ברצוננו לציין ולעבוד עם 10,000-100,000 קורדינטות במסך תצוגה אחד. קורדינטה בכל מסך ישנם שילובים של שלוש סוגי קורדינטותה מהסוגים הבאים: &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;- קורדינטת ציר אחד (ציר X בלבד)&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;- קורדינטית שני צירים (צירי X,Y בלבד)&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;- קורדינטת שלוש צירים (צירי X,Y,Z)&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;נממש את קורדינטה במחלקה.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;יש לנו שתי אפשרויות:&amp;nbsp; 1. לבנות שלושה מחלקות של קורדינטות ונעשה תנאי לבין איזה נממש, 2. לבנות מחלקה אחת שתכיל שלושה צירים ושלושה קונסטרקטורים.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;נתחיל מהאפשרות הראשונה. אין טעם אפילו לנסות לממש אותה ההיות ומדובר על אפליקציית זמן אמת&amp;nbsp; שטוענת בכל מסך חדש עד 100,000 נתונים שונים. כלומר, לכל נתון כזה נצטרך להכניס לתנאי ולבדוק לאיזה מחלקה לממש אותו - 100,000 תנאיים על מחשב. בוא נגיד שמדובר ב-Overhead ממש ממש לא רצוי. למרות שמבחינת עיצוב המערכת מדובר במודל טוב, מבחינת ביצועים זה סיוט וספק אם זה יטען במסגרת זמן סבירה. יש עוד סיבות למה לא מדובר ברעיון טוב מבחינת ביצועים (צריך לבצע 100,000 המרות מהמחלקה\ממשק הבסיסי כדי לעבוד עם הנתונים האלו וכך הלאה). &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;האפשורת השנייה היא לממש מחלקה אחת שמכילה את כל שלושת הנתונים עם שלושה קונסטרקטורים. &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public class myCord&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public int x;&lt;br /&gt;&amp;nbsp; public int y;&lt;br /&gt;&amp;nbsp; public int z;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public myCord(int x)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.x = x;&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public myCord(int x,int y)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.x = x;&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.y = y;&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public myCord(int x,int y, int z)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.x = x;&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.y = y;&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.z = z;&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;}&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;(לצורך דיון לא ראיתי לנכון לסבך את הקוד עם Properties).&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;לפי מה שראינו המחלקה למעלה שקולה למחלקה הבאה:&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public class myCord&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public int x = 0;&lt;br /&gt;&amp;nbsp; public int y = 0;&lt;br /&gt;&amp;nbsp; public int z = 0;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public myCord(int x)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.x = x;&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public myCord(int x,int y)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.x = x;&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.y = y;&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public myCord(int x,int y, int z)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.x = x;&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.y = y;&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.z = z;&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;}&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;עוד פעם נקבל שמבחינת ביצועים אנחנו בבעיה, אם למשל נעבוד עם 100,000 קורדינטות מסוג X בלבד נקבל כי ישנם 200,000 מספרים מאותחלים שלא עושים בהם שימוש. גם זה Overhead מיותר לחלוטין שאין אפשרות לעמוד בו. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;לפי מה שעשינו עד כה ראינו כי אנו צריכים טיפוס נתונים כלשהו שיכול להכיל את כל השלושת הנתונים בלי לאתחל אותם - תכונה ידועה של מבנה! &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;public struct myCord&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; public int x;&lt;br /&gt;&amp;nbsp; public int y;&lt;br /&gt;&amp;nbsp; public int z;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public myCord(int x)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.x = x;&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public myCord(int x,int y)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.x = x;&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.y = y;&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public myCord(int x,int y, int z)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.x = x;&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.y = y;&lt;br /&gt;&amp;nbsp;&amp;nbsp; this.z = z;&lt;br /&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;}&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;קיבלנו מצב שבו לא יהיה שום Overhead שאינו נדרש. אין המרות, אין משתנים שלא בשימוש, אין תנאים. זה לא הרבה יותר טוב? &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;(במצב אמיתי גם היינו בונים Properties שהיו מגבילות גישה לנתוני Y,Z שאינם מאותחלים)&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;font face="Arial"&gt;לסיכום&lt;/font&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial"&gt;דיברנו על ההבדלים בין מבנה למחלקה, ראינו מאיפה נובעים ההבדלים האלו, מדוע קיים כזה דבר מבנה, והראינו מצב אחד מרבים בו מבנה הוא טיפוס נתונים קל הרבה יותר טוב ממחלקה. כמו כל דבר בדוט נט מדובר על לבחור את הכלי הנכון בזמן הנכון.&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=142916" width="1" height="1"&gt;</description></item><item><title>Assemblies ו-Strong named Assemblies - המדריך למדוע וכיצד</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/09/21/assemblies-strong-named-assemblies.aspx</link><pubDate>Sat, 20 Sep 2008 21:05:57 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:142915</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>1</slash:comments><description>&lt;div dir="rtl" align="right"&gt;&lt;font face="Arial" size="3"&gt;&lt;font color="#000000"&gt; &lt;p&gt;שלום לכולכם, &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;כולנו עובדים עם Assemblies (להלן: אסמבליס ברבים, אסמבלי ביחיד). גם אם אתמול התחלתם לעבוד בדוט נט ובניתם רק אפליקציה לדוגמה - אתם עבדתם עם אסמבלי.&amp;nbsp; בואו כולנו נפתח עכשיו Visual studio, נבחר לפתוח פרוייקט חדש ונקמפל (נעשה build). מה שכרגע קרה זה שהקומפיילר בנה לכם אסמבלי. אם בנינו אפליקציית web אז קיבלנו בספריית ה-bin קובץ myProject.dll, ואם בנינו אפליקציית winform/console נקבל בספריית ה-bin קובץ myProject.exe.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;&lt;u&gt;&lt;font color="#000000"&gt;א. מהן אסמבליס?&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;אסמבליס הן אבני הבנייה הבסיסיות בדוט נט אשר ניתן לפרוס ויוצרות תיחום של אבטחה, גרסאות, טיפוסי נתונים והפנייה הדדית כל זאת באמצעות תיאור עצמי. &lt;br /&gt;אם לא הבנתם את המשפט הזה, אל תדאגו, הכל יהיה ברור. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;דיברנו בנפנוף-ידיים על איך מקבלים אסמבלי, אז בואו נדבר על זה עוד קצת.כל קוד בדוט נט ללא שייכות לשפת התכנות מתקפל בסופו של דבר לקוד MSIL. קוד ה-MSIL הזה יושב בתוך קבצי PE (גם: Portable executable). אל תדאגו אם בחיים לא ראיתם כזה סוג קובץ, אם אתם עובדים עם Visual studio.net סביר להניח שבחיים גם לא תראו. הקבצי PE הללו שמכילים קוד MSIL בחיים לא יוכלו לרוץ אלא אם כן הם יהיו קשורים ל-Assembly manifest (להלן: מניפסט). אותם קבצי PE כברירת מחדל אינם מכילים מניפסט. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;עוד חלק מהאסמבלי הוא ה-Type metadata. באנגלית Metadata זה - מידע שמתאר מידע. אז Type metadata זה מידע שמתאר טיפוסים. ב-#C טיפוסי נתונים הם המחלקות השונות שלנו. כלומר, Type metadata זה המידע שמתאר את המחלקות השונות שלנו. ה-Type metadata מכיל ממש את ה&amp;quot;כותרות&amp;quot; של המחלקה: האירועים שהמחלקה חושפת, המשתנים הפנימיים, ה-Properties שהמחלקה חושפת, המתודות של המחלקה (והפרמטרים שהיא מקבלת ומחזירה, האם היא סטטית או לא), ומאיזה מחלקה הטיפוס יורש. הנ&amp;quot;ל גם תקף לכל חלק אחר מה-assembly שיורש מ-System.object ולא רק למחלקות, למשל גם לממשקים ול-Enums.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;פתחתי את כלי ה-ilsdam, שנותן לנו לבחון אסמבלי לאחר שהתקמפלה (כמו ה-Reflector המפורסם, רק יותר מאותגר ומגיע עם הפריימוורק). בחרתי להביט על System.dll והתחלתי לדפדף בפנים: &lt;/font&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_2.png"&gt;&lt;img height="601" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_thumb.png" width="547" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;כל זה&amp;nbsp; (יותר נכון הרוב) זה Type metadata. &lt;/font&gt;&lt;font color="#000000"&gt;בתמונה לעיל אפשר לראות כאן פרטים של מחלקת System.Timers.Timer. הכל נמצא כאן: החל ממשתנים פנימיים, Properties שהמחלקה חושפת, מתודות שהמחלקה חושפת (עם הפרמטרים שהיא מקבלת ומחזירה), המחלקה ממנה היא יורשת, הממשקים שאותה היא מממשת ועוד. כל זה הוא ה-Type metadata.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;קבצי ה-PE שהזכרנו קודם לכן מכילים שלושה חלקים: נקודת כניסה (PE header), קוד MSIL, וה-Metadata של האובייקטים בקובץ. ה-Metadata של האובייקטים שלנו בתוך האסמבלי למעשה נשמר בתוך קבצי ה-PE. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;אז אם נחשוב לרגע על איך פועלים למעשה כל ה-Reflectorים וה-ildasmים למיניהם שהם מראים לנו כזה תפריט ניווט. הם לא פותחים את קוד ה-MSIL בתוך האסמבלי, הם רק קוראים את המידע מתוך ה-metadata ומציגים לנו אותו כמו שהוא. עד כאן עם Type metadata. (אגב, רק לתת דוגמה עד כמה מסובך כל הסיפור הזה, בשפות כמו VB.net ו-#C יש הגבלה להורשה ממחלקה אחת בלבד, אבל ה-Type metadata גם יודע למשל לתאר הורשה ממספר מחלקות).&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;עוד חלק מכל אסמבלי הוא ה-Resources (להלן: משאבים). המשאבים הנפוצים של אפליקציות הם קבצים שגררנו לתוך עץ הפרוייקט ב-Visual studio (כגון תמונות וקבצי טקסט), ובנוסף משאבים שאחראים על שינוי תצוגה לתרבויות שונות. נציג כאן דוגמה של הראשון - קובץ תמונה בתוך פרוייקט. נגרור תמונה לתוך עץ הפרוייקט ב-visual studio ונרצה לראות שהוא באמת בתוך האסמבלי שלנו ולא בתוך איזו תיקייה מסתורית איפהשהו על ההארד-דיסק. איתרע מזלנו וה-ildasm אינו תומך בהצגת משאבים, אז נשתמש ב-Reflector: &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_4.png"&gt;&lt;img height="357" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_thumb_1.png" width="662" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;והנה, אנו יכולים לראות באמצעות ה-reflector שבאמת בתוך ה-Reflector קיים קובץ התמונה שגררתי לתוך הפרוייקט. שאר הקבצים בתוך ספריית ה-Resources הם כמו שהזכרתי קבצים שיוצרו אוטומטית ע&amp;quot;י Visual studio למקרה ונרצה לשנות תכונות של האפליקציה בהתאם לתרבות בה היא מורצת (למשל, אם נרצה שבתרבות הישראלית-עברית ניתן יהיה להגדיל חלון ותרבות הצרפת-צרפתית לא יהיה ניתן). &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;אז מה יש לנו עד עכשיו בתוך אסמבלי: קבצי PE עם קוד MSIL, משהו בלתי מוכר בשם מניפסט, Type metadata, ומשאבים. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;המניפסט של האסמבלי הוא החלק שנותן לכל אמסבלי את היכולת לתאר את עצמה. הוא גם אגב, החלק היחידי מבין ארבעת החלקים שראינו שחובה שיהיה בכל אסמבלי באשר היא. המניפסט של האסמבלי הוא למעשה מה שמחבר את כל החלקים השונים יחדיו ונותן להם שורה וצורה משותפת. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;המניפסט מכיל מידע על כל הקבצים שהם חלק מהאסמבלי, ובפרט: קבצי ה-PE המכילים קוד MSIL, והמשאבים השונים. כלומר, זה לא מספיק שרק נוסיף קוד או משאב לתוך האמסבלי, אלא צריך גם להוסיף אותם לאיזה אינדקס שאומר למעשה &amp;quot;אני כאן&amp;quot;. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;בנוסף המניפסט מכיל שני הפניות חשובות: Type metadata reffrence ו-Assemblies reffrence. ה-Type metadata reffrence משמש להגיד למי שטוען את האסמבלי &amp;quot;במקום הזה והזה תוכל למצוא את טיפוסי הנתונים שאיתם אני עובד&amp;quot;. לרוב ה-Type metadata reffrence יפנה על האסמבלי עצמה ל-Type metadata שהיא חלק מהאסמבלי. בתקופה שלפני דוט נט שכולנו עבדנו רכיבי Com היו המון בעיות סנכרון של רכיבים מול ה-Type libaries שלהם. למזלנו, כברירת מחדל האסמבלי מכילה את המידע שמתאר את הטיפוסים איתה היא עובדת. (רוב המקרים בדוט נט בהם ה-Type metadata reffrence לא יפנה לאסמבלי עצמה היא באמת בעבודה עם רכיבים מהדור הישן). &lt;br /&gt;ה-Assemblies reffrence גם מאוד חשוב. הוא זה שבא ואומר לאיזה אסמבליס אחרים האסמבלי הזו קשורה. למשל, אם אנחנו כתבנו קוד שמצייר פרח על המסך, כאשר נקמפל את הקוד אנו נקבל כחלק מהמניפסט הפנייה ל-System.Drawing. &lt;br /&gt;עוד משהו שהמניפסט מכיל הוא מידע שמזהה את האמסבלי - שם האסמבלי, גירסת האסמבלי, התרבות אליה שייכת האסמבלי ומפתח. כל אלו ביחד נקראים Strong name. עוד נדבר על הנושא הזה בהמשך. אבל כרגע נזכור שלכל אסמבלי יש את ארבעת הנתונים הללו במניפסט שלה, ואם לא הגדרנו אותם הם מקבלים ערכי ברירת מחדל. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;&lt;u&gt;בוא נסכם מה מכילה כל אסמבלי:&lt;/u&gt; &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;1.&amp;nbsp; קבצי PE המכילים קוד MSIL. זה למעשה הקוד המקומפל אותו כתבנו. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;2. Type metadata. זה למעשה תיאור כל האובייקטים בכלל וכל מחלקות בפרט. (צריך לזכור שהמידע הזה לרוב יושב בתוך קבצי ה-PE שלנו)&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;3. משאבים. קבצים חיצוניים שנשמרו לתוך האסמבלי. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;4. מניפסט האסמבלי (חובה) שמכיל את: רשימת קבצי ה-PE והמשאבים באסמבלי, Type metadata reffrence שלרוב יצביע בחזרה על ה-type metadata מסעיף 2, Assemblies reffrence שיצביע על שאר האסמבליס בהן תלויה האסמבלי שלנו, וארבעת נתוני ה-Strong name.&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;u&gt;&lt;strong&gt;&lt;font color="#000000"&gt;ב. הדגמה מעשית, היתרונות של אסמבליס (אבטחה והפנייה הדדית)&lt;/font&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;&amp;quot;אסמבליס הן אבני הבנייה הבסיסיות בדוט נט אשר ניתן לפרוס ויוצרות תיחום של &lt;strong&gt;אבטחה,&lt;/strong&gt; גרסאות, טיפוסי נתונים &lt;strong&gt;והפנייה הדדית&lt;/strong&gt; כל זאת באמצעות תיאור עצמי.&amp;quot; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;עד עכשיו הרחבנו מה זה &amp;quot;תיאור עצמי&amp;quot; של אסמבליס. בחלק זה נתמקד בנושא האבטחה וההפנייה ההדדית. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;בואו ניצור פרוייקט לדוגמה שהוא Class libary של מחשבון שמקבלת שתי מספרים ומחזירה את התוצאה. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_6.png"&gt;&lt;img height="565" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_thumb_2.png" width="662" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;יצרנו מחלקה חדשה בשם Calc עם קונסטרקטור ריק ומתודת Add שמחברת שני מספרים ומחזירה אותם. בנינו את הפרוייקט ונראה שאכן קיבלנו אסמבלי: &lt;/font&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_8.png"&gt;&lt;img height="297" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_thumb_3.png" width="446" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;הקובץ DLL שקיבלנו הוא הדוט נט אסמבלי שלנו. הקובץ השני למי שמתעניין הוא קובץ למטרות Debug של האפליקציה ולא קשור ישירות לנושא שלנו. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;נבנה אפליקציה חלונאית חדשה שתייצג את המחשבון שלנו:&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_10.png"&gt;&lt;img height="352" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_thumb_4.png" width="662" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;אך אבוי! אין לנו את היכולת לדעת מה הסכום של שני מספרים! (לכו איתי עם זה, תעמידו פנים)&lt;br /&gt;אנחנו חייבים לקשר לאסמבלי שבנינו קודם לכן. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;ניכנס לתפרט Reffrences ונבחר Add reffrence:&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_12.png"&gt;&lt;img height="540" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_thumb_5.png" width="667" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;נביט על רשימת ה-Assembly reffrence שלנו ונראה את רשימת האסמבליס אשר להן קשורה האסמבלי שלנו:&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_14.png"&gt;&lt;img height="276" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_thumb_6.png" width="210" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;בואו נבנה את הפרוייקט ונראה שבאמת קיבלנו אסמבלי גם לאפליקציית EXE שלנו בתייקת ה-bin שלו:&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_16.png"&gt;&lt;img height="307" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_thumb_7.png" width="524" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;בואו נחזור לרשימה הזאת שראינו קודם לכן. היה שם למשל את האסמבלי של System.Windows.Forms. כל אפליקציה חלונאית חייבת לכלול Assembly reffrence ל-System.Windows כדי להשתמש ב-Windows controls. כמו כן ראינו הפנייה ל-System אסמבלי, כל אסמבלי באשר היא תכלול הפנייה ל-System. גם ראינו שיש הפנייה ל-Justin_calc שבנינו קודם לכן. בואו נפנים לרגע מה זה אומר - כל אסמבלי מכילה ויודעת לאיזה אסמבליס אחרות היא קשורה. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;אבני-יסוד שבנויות ומסתמכות על אבני-יסוד אחרות.&lt;/font&gt;&lt;/p&gt;&lt;font color="#000000"&gt; &lt;p align="justify"&gt; &lt;p align="right"&gt; &lt;hr style="width:561px;height:2px;" /&gt;  &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p align="justify"&gt;בואו נדבר קצת על אבטחה. כל אסמבלי לפני שהיא רצה מc:\Inetpub\WinCalc\AssemblyInfo.csבקשת הרשאות ממערכת הפעלה ומהפריימוורק על אותו מחשב. ההרשאות האלו מגוונות וכוללות למשל: הרשאה לצייר על המסך, הרשאה להדפיס למסך, הרשאה לכוננים, הרשאה לגשת לאינטרנט, הרשאה לפתוח קישורים למסדי נתונים וכך הלאה. כל ההרשאות הללו יושבות ב-System.Security ודורשות מאמר בפני עצמו. האסמבלי שהיא נטענת לזכרון מבצעת שלושה בקשות: מינימום הרשאות כדי לרוץ, הרשאות אופציונליות כדי לרוץ והרשאות שאסור לאסמבלי לקבל. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;האסמבלי שהיא נטענת תבוא ותבקש: &amp;quot;תתן לי בבקשה את כל ההרשאות המינימליות שלי &lt;strong&gt;ו&lt;/strong&gt;האופציונליות שלי, ואל תתן לי את ההרשאות האסורות שלי&amp;quot;. הפריימוורק ירוץ ויבדוק מול ה-Security policy של הארגון, המחשב והמשתמש ויבדוק אם התוכנה אמורה לקבל את ההרשאות האלו ובהתאם יעניק או יסרב. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;שימו לב מה קורה, האסמבלי מבקשת גם הרשאות מינימליות וגם אופציונליות. ההרשאות האופציונליות של כל אסמבלי הן כל ההרשאות. כלומר, כל אסמבלי תבקש גישה לכל ההרשות לרוץ אבל מה - רק כאופציה. אז מה אם בכלל אני יכול לכתוב תוכנת שרת-לקוח שחייבת גישה לרשת, הגישה לרשת שלי תהיה אופציונלית בלבד. אם ה-Security policy של הארגון, המחשב או המשתמש יחליטו שאין לי גישה - אין לי גישה. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;מפתחים מנוסים וחדשים כאחד לרוב לא מודעים לזה. למה? הם מפתחים על מחשבי-פיתוח בסביבת פיתוח אוהדת שמעודדת אותם ונותנת להם את כל ההרשאות שהם צריכים כדי לרוץ. ואז שהתוכנה עוברת ללקוח שה-IT שלו החליט שכל תוכנה שהוא לא אישר לא מקבלת שום גישה לרשת של החברה - הכל נופל כמו מגדל קלפים. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;בוא נגיד ותוכנת המחשבון שלנו היא למעשה תוכנת שרת-לקוח שחייבת גישה לרשת או תוכנת דו&amp;quot;חות שחייבת גישה למדפסות או תוכנת עיבוד תמונה שחייבת גישה למסך. נלך על הדוגמה הראשונה. האסמבלי שלנו חייבת כגישה מינימלית גישה לרשת. בלי זה, אין לתוכנה מה לעשות. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;נפתח את קובץ ה-AssemblyInfo.cs שלנו ושם אנו יכולים לבקש לאסמבלי גישות מינימליות ואופציונליות וגם לבקש שלאסמבלי שלנו יסרבו גישה. בואו נגדיר את גישת הרשת כדרישה מינימלית:&lt;/font&gt;&lt;/p&gt;&lt;font color="#000000"&gt; &lt;p dir="ltr" align="left"&gt;&lt;span style="font-size:11px;color:black;font-family:courier new;background-color:transparent;"&gt;&lt;span style="font-size:11px;color:green;font-family:courier new;background-color:transparent;"&gt;// AssemblyInfo.cs&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:transparent;"&gt;using&lt;/span&gt; System.Security; &lt;br /&gt;&lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:transparent;"&gt;using&lt;/span&gt; System.Security.Permissions;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:11px;color:green;font-family:courier new;background-color:transparent;"&gt;//...&lt;/span&gt;&lt;br /&gt;[assembly: PermissionSet(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SecurityAction.RequestMinimum,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name=&lt;span style="font-size:11px;color:#666666;font-family:courier new;background-color:#e4e4e4;"&gt;&amp;quot;LocalIntranet&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&lt;span style="font-size:11px;color:green;font-family:courier new;background-color:transparent;"&gt;//...&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;ובכך דרשנו כגישה מינימלית לאפליקציה שלנו גישה לאינטרה-נט של הארגון. עכשיו בואו נציג מקרה הפוך, אנחנו לא כותבים תוכנת שרת-לקוח, אלא תוכנת ציור פרחים. התוכנה יודעת לצייר פרחים. האסמבלי שלה לא צריכה גישה לרשת המקומית של הארגון, ולכן נרצה לסרב גישה לאותה גישה לאסמבלי שלנו. &lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;font color="#000000"&gt;&lt;span style="font-size:11px;color:black;font-family:courier new;background-color:transparent;"&gt;&lt;span style="font-size:11px;color:green;font-family:courier new;background-color:transparent;"&gt;// AssemblyInfo.cs&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:transparent;"&gt;using&lt;/span&gt; System.Security; &lt;br /&gt;&lt;span style="font-size:11px;color:blue;font-family:courier new;background-color:transparent;"&gt;using&lt;/span&gt; System.Security.Permissions;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:11px;color:green;font-family:courier new;background-color:transparent;"&gt;//...&lt;/span&gt;&lt;br /&gt;[assembly: PermissionSet(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SecurityAction.Request&lt;strong&gt;Refused&lt;/strong&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name=&lt;span style="font-size:11px;color:#666666;font-family:courier new;background-color:#e4e4e4;"&gt;&amp;quot;LocalIntranet&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&lt;span style="font-size:11px;color:green;font-family:courier new;background-color:transparent;"&gt;//...&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;בנושא הגדרת אבטחה לאסמבלי אפשר לקחת שתי גישות:&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;להגדיר מראש אילו הרשאות האסמבלי תצטרך ולהגדיר לאילו הרשאות לסרב.  &lt;li&gt;לא להגדיר מראש אילו הרשאות האסמבלי תצטרך, אבל להיות מוכנים לאלף ואחת SecurityExceptions שיקפצו לנו. והכוונה לא רק בזמן הפיתוח, אלא גם ובעיקר אצל הלקוח עצמו. מעניין מה הלקוח יחשוב שתוכנת השרת-לקוח שלנו נופלת בזמן שהיא מנסה להתחבר לרשת, או תוכנת דו&amp;quot;חות בזמן ששולחים אותה למדפסת. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;&lt;strong&gt;&lt;u&gt;ג. מהן Strong named assemblies וכיצד הופכים אסמבלי רגילה ל-Strong named&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;הזכרנו בחלק א&amp;#39; שכל מניפסט מכיל את שם האסמבלי, גירסת האסמבלי, התרבות אליה היא קשורה והמפתח שלה. אלו הם ארבעת הפרטים המזהים של האסמבלי. (ישנו חלק חמישי שנקרא Digital signature, ולא נעסוק בו)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;שם האמסבלי נקבע בקובץ ה-AssemblyInfo.cs ואם לא קבענו אותו הוא יהיה ריק. &lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;span style="font-size:11px;color:black;font-family:courier new;background-color:transparent;"&gt;&lt;span style="font-size:11px;color:green;font-family:courier new;background-color:transparent;"&gt;// AssemblyInfo.cs&lt;/span&gt;&lt;br /&gt;[assembly: AssemblyTitle(&lt;span style="font-size:11px;color:#666666;font-family:courier new;background-color:#e4e4e4;"&gt;&amp;quot;Justin_Calc&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&lt;span style="font-size:11px;color:green;font-family:courier new;background-color:transparent;"&gt;// or for an empty name:&lt;/span&gt;&lt;br /&gt;[assembly: AssemblyTitle(&lt;span style="font-size:11px;color:#666666;font-family:courier new;background-color:#e4e4e4;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;גירסת האמסבלי רשומה בקובץ ה-AssemblyInfo.cs ואם לא קבענו אותו הוא יהיה ספרור רץ כך שכל בנייה שונה של האמסבלי תקבל מספר גירסה שונה. &lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;span style="font-size:11px;color:black;font-family:courier new;background-color:transparent;"&gt;&lt;span style="font-size:11px;color:green;font-family:courier new;background-color:transparent;"&gt;// AssemblyInfo.cs&lt;/span&gt;&lt;br /&gt;[assembly: AssemblyVersion(&lt;span style="font-size:11px;color:#666666;font-family:courier new;background-color:#e4e4e4;"&gt;&amp;quot;1.2.3.100&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:11px;color:green;font-family:courier new;background-color:transparent;"&gt;// or the default value that gives each build a unique version:&lt;/span&gt;&lt;br /&gt;[assembly: AssemblyVersion(&lt;span style="font-size:11px;color:#666666;font-family:courier new;background-color:#e4e4e4;"&gt;&amp;quot;1.0.*&amp;quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;תרבות האסמבלי גם היא רשומה בקובץ ה-AssemblyInfo.cs. בתרבות הכוונה היא שלאסמבלי כלשהי יכולות להיות גרסאות רבות וכאשר אסמבלי אחרת רוצה לטעון את האסמבלי הראשונה היא יכולה לטעון גירסה שהיא תלויית תרבות. למשל, אם נרצה נוכל לטעון אסמבלי של מחשבון שיודעת לטפל ספציפית במספרים צרפתיים (במקום נקודה עשרונית יש פסיק ובמקום פסיקים יש נקודה) ונוכל להכין אסמבלי של מחשבון שיודע לטפל במספרים כפי שאנו מכירים אותם מהתרבות המטרית. אם לא נגדיר אסמבלי, היא תהיה ה-Invarient culture, כלומר בלתי תלויה בתרבות כלשהי. &lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;span style="font-size:11px;color:black;font-family:courier new;background-color:transparent;"&gt;&lt;span style="font-size:11px;color:green;font-family:courier new;background-color:transparent;"&gt;// AssemblyInfo.cs&lt;/span&gt;&lt;br /&gt;[assembly: AssemblyCulture(&lt;span style="font-size:11px;color:#666666;font-family:courier new;background-color:#e4e4e4;"&gt;&amp;quot;He-Il&amp;quot;&lt;/span&gt;)]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:11px;color:green;font-family:courier new;background-color:transparent;"&gt;// or for the invarient culture:&lt;/span&gt;&lt;br /&gt;[assembly: AssemblyCulture(&lt;span style="font-size:11px;color:#666666;font-family:courier new;background-color:#e4e4e4;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;המפתח הוא למעשה החלק שהופך את האמסבלי ל-Strong name assembly. מדובר למעשה בקובץ עם סיומת snk שאנו נפנה אליו מתוך ה-assembly. הקובץ הזה יכיל מפתח ציבורי ומפתח פרטי בשביל זיהוי האמסבלי ע&amp;quot;י אסבמליס אחרות. נפתח את ה-Visual studio 2003 command prompert (מסך שחור דמוי DOS) ונכתוב: &lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;span style="font-size:11px;color:black;font-family:courier new;background-color:transparent;"&gt;sn.exe -k c:\myTestKeyFile.snk&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;מה שנקבל הוא שבכונן C יווצר קובץ בשם &lt;font face="Courier New" size="2"&gt;myTestKeyFile.snk&lt;/font&gt; והוא מכיל זוג מפתחות לאפליקציה שלנו: אחד ציבורי ואחד פרטי. נעתיק את הקובץ מכונן C לתוך תיקיית הפרוייקט שלנו, לאותה תיקייה בה יושב קובץ ה-AssemblyInfo.cs שלנו. נערוך את ה-AssemblyInfo.cs כך שהוא יצביע על המפתח: &lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;span style="font-size:11px;color:black;font-family:courier new;background-color:transparent;"&gt;[assembly:AssemblyKeyFileAttribute(&lt;span style="font-size:11px;color:#666666;font-family:courier new;background-color:#e4e4e4;"&gt;&amp;quot;myTestKeyFile.snk&amp;quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;ארבעת הפרטים הללו: שם האסמבלי, גירסת האסמבלי, תרבות האסמבלי והמפתח שלה הופכים אותה ל-Strong name. (צריך להדגיש שחובה גם לבצע Build לאסמבלי לפני שהיא באמת הופכת לאחת כזו).&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;אז למה זה טוב? במילה אחת (או שלוש), זיהוי אחד ויחיד. יצרנו עכשיו אסמבלי שלה ולה בלבד יש את התכונות הללו. זיהוי וודאי. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;קיימת תיקייה שנקראת Global Assembly Cache (או בקיצור: GAC). הסבר מקיף על התקייה הזאת היא מחוץ לתחום המאמר הזה, אבל נסקור בהקשרנו מה חשיבותה. בתיקייה זו ניתן לפרוס\להתקין Strong-named assemblies. ברגע שנתנו את ארבעת התכונות שהזכרנו לעיל (וליתר הדיוק, ברגע שנתנו לאסמבלי קובץ מפתח) היא נחשבת Strong named assembly. למה צריך תיקייה מיוחדת? סיבה ראשונה היא שהפריימוורק דבר ראשון ניגשת לשם לחפש אסמבליס מה שמקל מאוד על פריסת מערכות (נרחיב על כך בהמשך), סיבה שנייה היא כדי לנהל גרסאות. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;אם היום נבנה את גירסה 1.0 של המנוע של המחשבון שלנו, ומחר נבנה את גירסה 1.1, מבחינת מערכת ההפעלה (עליה יושבים הקבצים) אין ביניהם שום הבדל. שניהם נקראים Justin_Calc.dll. בתיקייה מסויימת יכול לשבת רק עותק אחד של אותה אסמבלי. לעומת זאת, ב-GAC יכולות לשבת מספר גרסאות של אותה אסמבלי. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;בניתי אפליקציית web שעובדת על גירסה 1.0 של מנוע המחשבון ומאחר והוא כזה טוב קיבלתי ישר הצעות לחשוף את המנוע בתור Webservice לעולם מחברות שמוכנות לשלם. אבל צריך לשנות כמה מתודות, כמה מהחתימות הקיימות של המתודות, להוסיף כמה מתודות, קיצר - שינוי טוטאלי באסמבלי. נשנה את הגירסהשל המנוע שלנו ל-2.0. ב-GAC שלנו יכולות לשבת גם גירסה 1.0 וגם גירסה 2.0, וכל אפליקציה יודעת עם איזו גירסה היא אמורה לעבוד. האפליקציית ASP.net שלי יודעת לעבוד עם גירסה 1.0 וה-Webservice יודע לעבוד עם גירסה 2.0. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font color="#000000"&gt;הניהול המאוד פשוט והגיוני הזה של גירסאות שונות של אותה אסמבלי שעובדות כולן מאותו ספרייה מנע המון המון בעיות שהיוא נפוצות בטכנולוגיות קודמות. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;&lt;strong&gt;&lt;u&gt;ד. איפה וכיצד מחפשת האסמבלי את האסמבליס בהן היא תלויה.&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;ברגע שהגדרנו שאסמבלי תלויה באסמבליס אחרות, נפתחת לנו בעיה חדשה לחלוטין: אם פתחנו אפליקיית דוט נט למשל עם סיומת EXE שראינו שהיא אסמבלי, איפה היא תחפש את ה-DLLים שהיא תלויה בהם? (כנ&amp;quot;ל כמובן יהיה תקף על אפליקציןת ASP.net ו-Webserviceים)&lt;/font&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;font color="#000000"&gt;דבר ראשון שהפריימוורק עושה זה לברר את הפרטים של האמסבלי אותה היא מחפשת. שם האמסבלי, הגירסה של האסמבלי, התרבות שלה והמפתח הציבורי שלה (כפי שהוא מופיע בקובץ המפתח שהוספנו לאסמבלי שלנו). אפשר לראות דוגמה לקישור ל-System.Drawing מתוך אפליקציית ה-WinCalc שלנו כפי שהוא נראה בReflector:&lt;br /&gt; &lt;div align="left"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_18.png"&gt;&lt;img height="360" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/AssembliesStrongnamedAssemblies_1278E/image_thumb_8.png" width="528" border="0" /&gt;&lt;/a&gt; &lt;/font&gt;&lt;/div&gt; &lt;li&gt;&lt;font color="#000000"&gt;הפריימוורק תחפש בקבצי קונפיגיורציה למיניהם הוראות מיוחדות. קבצי קונפיגיורציה כאלו יכולים לבוא בסמוך לאסמבלי שנטענת לזכרון, יכולים להיות ברמת המכונה וניתן גם שהם יהיו ברמת הארגון. בקבצים כאלו נקבעת מדיניות בנושא שימוש באסמבליס מסויימות, אך אינם הכרחיים לעבודה עימן ולכן לא נסקור אותם במאמר זה.&lt;/font&gt;  &lt;li&gt;&lt;font color="#000000"&gt;הפריימוורק תבדוק אם האסמבלי שהיא מחפשת כבר נטענה לאחרונה לזכרון ואם כן, בזה מסתיים החיפוש. &lt;/font&gt; &lt;li&gt;&lt;font color="#000000"&gt;אם הפריימוורק מחפשת אסמבלי שהיא Strong name היא עכשיו תחפש בספריית ה-GAC. &lt;/font&gt; &lt;li&gt;&lt;font color="#000000"&gt;אם הפריימוורק לא מצאה עד עכשיו את האסמבלי היא תתחיל &amp;quot;לחפור&amp;quot; בתוך התיקייה של האסמבלי שרוצים לטעון לזכרון. אם לאפליקציה שלנו קוראים WinCalc (שיושבת ישירות על כונן C) והאסמבלי שאנו מחפשים היא בעלת השם Justin_Calc בתרבות He-IL אלו יהיה הנתיבים בהם תחפש הפיימוורק: (לפי הסדר)&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;&lt;font color="#000000"&gt; &lt;p align="left"&gt;&lt;font color="#000000"&gt;C:\WinCalc\Justin_Calc.dll&lt;br /&gt;C:\WinCalc\Justin_Calc\Justin_Calc.dll&lt;br /&gt;C:\WinCalc\Justin_Calc.exe&lt;br /&gt;C:\WinCalc\Justin_Calc\Justin_Calc.exe&lt;br /&gt;&lt;font color="#000000"&gt;C:\WinCalc\He-IL\Justin_Calc.dll&lt;br /&gt;C:\WinCalc\He-IL\Justin_Calc\Justin_Calc.dll&lt;br /&gt;C:\WinCalc\He-IL\Justin_Calc.exe&lt;br /&gt;C:\WinCalc\He-IL\Justin_Calc\Justin_Calc.exe&lt;br /&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="right"&gt;&lt;u&gt;&lt;strong&gt;ה. יתרונות ה-Strong name לאסמבליס&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;u&gt;&lt;strong&gt;יחודיות שם האסמבלי בעזרת המפתח -&lt;/strong&gt;&lt;/u&gt; אי-אפשר ליצור בטעות שתי אסמבליס עם מפתח פרטי וציבורי זהים. באמצעות היחודיות הזו אפשר לבצע זיהוי וודאי שהאסמבלי אליה קשרנו את האסמבלי שלנו היא אכן האסמבלי שאנו צריכים. &lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;u&gt;&lt;strong&gt;פריסה ב-GAC -&lt;/strong&gt;&lt;/u&gt; אסמבלי שאינה Strong-name לא ניתן לפרוס ב-GAC. פריסה ב-GAC מבטיחה שללא חשיבות היכן נתקין על אותה מכונה את האפליקציה שלנו היא תמיד תמצא את האסמבליס בהן היא משתמשת.&amp;nbsp; אנחנו לא צריכים להתחיל להתעסק עם איפה פרסנו את האסמבליס שלנו, היות וברגע שפרסנו אותן ל-GAC הפריימוורק תמיד תמצא אותן. &lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;strong&gt;&lt;u&gt;ניהול גרסאות נכון בפריסת מערכות -&lt;/u&gt;&lt;/strong&gt;&amp;nbsp; כאשר יש לנו גירסה אחת ויחידהשל אסמבלי אליה אנו רוצים ליצור קישור אז הכל בסדר. אבל ברגע שיש לנו שתי גרסאות (או מאות גרסאות!) כבר אי-אפשר סתם להעתיק אותה לתוך תיקיית הפרוייקט. אנחנו נתחיל להסתבך עם &amp;quot;רגע, איזה גרסה יש לנו כרגע מותקנת שם?&amp;quot; ו-&amp;quot;לעזאזל, אני עובד עם הגירסה הלא נכונה בזמן פיתוח&amp;quot; ועוד נענה ללקוח &amp;quot;זה בסדר, זה בסדר, הכל פועל פשוט יש לך גירסה לא נכונה של המנוע הזה והזה&amp;quot;.&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;strong&gt;&lt;u&gt;התייחסות להבדלי גירסאות -&lt;/u&gt;&lt;/strong&gt; אם&amp;nbsp; נבחר אמסבלי לאסמבלי אחרת, נוכל להחליף את האסמבלי שמחברים בטעות בגירסה אחרת שלה ע&amp;quot;י העתקת הגירסה הלא-נכונה לתוך ספריית האפליקציה. לעומת זאת, כאשר אנו עובדים עם Strong name האפליקציה שמחפשת את האסמבליס הקושרות אליה מחפשת גירסה ספציפית. באסמבליס שהן לא Strong name אין חשיבות מבחינת הקישוריות בין אסמבליס לאיזה גירסה קבענו. &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;מבחינה תפיסתית, כאשר אנו רוצים ליצור אסמבלי שהיא משותפת בין שתיים (או יותר) אפליקציות שלנו ו\או עשויה לצאת במספר גרסאות, תמיד לפני פריסת המערכת ניצור אותה כ-Strong name ובכך נמנע מאין ספור מרעין-בישין שתמיד ניתקל בהם אם לא נעשה כך.  &lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;&lt;u&gt;לסיכום&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;דיברנו על מה הן אסמבליס, מה הן מכילות, מה היתרונות של עבודה בצורה של אסמבליס, כיצד אסמבלי מתארת את עצמה, כיצד ניתן להגדיר הגדרות אבטחה ברמת האסמבלי, כיצד יוצרים קישוריות בין אסמבליס ומה הבעיות באותן קישוריות, היכן ניתן לפרוס אסמבליס, מהי הדרך הטובה ביותר לפרוס אסמבליס ומתי להשתמש בה והראנו את הפתרון לבעיית הקישוריות, בעיית הגירסאות ובעיית מיקום הפריסה בצורה של Strong named assemblies. &lt;/p&gt; &lt;p align="right"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="right"&gt;בהצלחה לכולכם,&lt;/p&gt; &lt;p align="right"&gt;ג&amp;#39;סטין-יוסף אנג&amp;#39;ל&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="right"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="right"&gt;שינויים:&lt;br /&gt;1. 15.11.05 -תוקנה ההתייחסות בדוגמה של המחשבון מ-Refrence מ-System.Windows ל-Refrence ל-System.Windows.Forms. תודה לאורן ואריק שציינו את זה. &lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=142915" width="1" height="1"&gt;</description></item><item><title>שאלות מראיונות עבודה בדוט נט - האם יש לך מה שדרוש?</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/09/21/142914.aspx</link><pubDate>Sat, 20 Sep 2008 21:02:33 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:142914</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>2</slash:comments><description>&lt;div dir="rtl" align="right"&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;שלום לכולם,&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;לאחרונה ישבתי עם מפתחת דוט נט מוכשרת מאוד. התוכניתנית הזו מחפשת משרה חלקית ובעלת שנתיים ניסיון בדוט נט בחברת אלביט. חלק מהשיחה התמקדה בשאלות טכניות על דוט נט שידוע לי שנוטים לשאול בראיונות עבודה. אחרי שהיא ענתה על השאלות הכי מכשילות שהיו לי והוכיחה רמת ידע מאוד גבוהה, החלטתי לכתוב מאמר מקיף המכיל אוסף רב של שאלות כאלו. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;1. הפניות לרכיבים מסוג using או reffrences, באם לא נעשה בהן שימוש, יראו בקוד ה-IL?&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial"&gt;&lt;font size="4"&gt;&lt;strong&gt;לא. במהלך קומפילציה כל הפניה מסוג using או reffrences לא תירשם בקוד ה-IL אלא אם כן היא בשימוש כלשהו בתוך הקוד. קרי, הפניה לרכיב חיצוני או הפנייה ל-namespace שלא בשימוש לא יראו בקוד הסופי.&lt;/strong&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;using System; // Will be included in the MSIL&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;using System.Data; // Will not even show up in the MSIL&lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;class myClass&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;{&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; public static void Main()&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; {&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Writeline(“Hello world“);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;}&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;2. מה ההבדל בין readonly ל-constant?&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;יותר קל לעמוד על הדימיון ביניהם: הם קבועים בזמן ריצת התוכנית. ההבדל המהותי הוא כזה: הערך שנותנים ל-constant נכתב בקוד ובזמן קימפול האפליקציה פשוט מועתק לכל מקום בו הוא בשימוש, כלומר שבזמן הריצה בכלל לא קיים שום משתנה מסוג constant. על הצד השני readonly אכן קיים בזמן הריצה כמשתנה וצריך לאתחל אותו או בשורת הצהרת המשתנה או בתוך ה-constructor של המחלקה. עוד הבדל חשוב הוא ש-constant לא יכול להיות אובייקט אלא חייב להיות משהו פשוט (int, string, bool וכיו”ב)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;3. מה זה boxing ומה זה unboxing?&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;&lt;strong&gt;&lt;font face="Arial"&gt;באחד מהמאמרים הקודמים שלי (”&lt;/font&gt;&lt;/strong&gt;&lt;a id="viewpost.ascx_TitleUrl" href="http://www.justinangel.net/CommentView,guid,cf901837-6027-47db-b262-f82a7e6c9073.aspx"&gt;&lt;font face="Arial" color="#0000ff"&gt;&lt;strong&gt;Struct ו-Class -ההבדלים והכוח הטמון בשוני ביניהם&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;strong&gt;&lt;font face="Arial"&gt;”) דיברתי על ההבדלים בין Value types ל-reffrence type ומה זה Stack ו-Heap. בקצרה, כל מחלקה בדוט נט יורשת בהכרח מ-System.Object ובהקצאת זכרון תשב פיזית על ה-Heap כאשר ההפנייה למיקום על ה-Heap ישב ב-Stack. ישנה קבוצה קטנה של מחלקות שיורשות מ-System.ValueType (למשל int, bool, enums, structs וכיו”ב) שהם יושבים פיזית על ה-Stack. פעולת ה-boxing היא לקיחת ValueType והעתקו ל-Heap עם יצירת הפנייה ל-heap שיושבת על ה-stack. הפעולה unboxing היא ההפוכה והיא לקיחת ValueType שעשו לו boxing ויצירת אובייקט זהה ב-stack.&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;font face="Arial"&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;4. האם ניתן לתת הרשאות public/private/internal שונות ל-get של Property ול-Set של property?&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;לא. הגישה ל-get ול-set של property הם בעלי אותה רמת גישה בדיוק (שנלקחת מרמת הגישה כפי שנקבעה לכל ה-Property).&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;5. מהי הרשאת internal? &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;בדומה להרשאות גישה של public/private קיימת הרשאה בשם internal. הראשת internal קובעת כי המשאב הזה יהיה זמין רק בתוך ה-assembly שבה נכתבה המחלקה. למשל, אם יצרנו שכבה אחת במערכת שרצינו להגביל לה גישה למתודה\מחלקה\Property מסויימת לשימוש פנימי בתוך אותה assembly נשתמש בהרשאת הגישה internal.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;6. מה ידפיס הקוד הבא? &lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;public void myMethod()&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;{&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; try &lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; {&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Writeline(“Hello“);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; catch&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; {&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Writeline(“ my “);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; finally&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp; {&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Writeline(“ world“);&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;}&lt;br /&gt;&lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;הקוד הנ“ל ידפיס Hello World. סעיף ה-finally תמיד תמיד מתבצע. זה העקרון המנחה שכותבים בלוק finally. גם אם יש חריגה, גם אם יצאנו מהפונקציה, גם אם הקפצנו אירועים לא קשורים, תמיד יתבצע הקוד בתוך בלוק ה-finally. &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;7. מהם ה“דורות“ של ה-Garbage collector?&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;ה-Garbage collector מבוסס על העקרון הבא: כל אובייקט חדש שנוצר מתווסף למה שנקרא “דור 0“. מספר הדור אומר כמה “איסופים“ של ה-Garbage collector הוא “שרד“. “איסוף“ מתייחס לכאשר ה-garbage collector מחליט שצריך לפנות זכרון ובודק אילו אובייקטים יש להשאיר ואיזה אפשר לזרוק. אם ה-garbage collector קובע שהאובייקט צריך להישאר הוא יעביר אותו ל“דור 1“ ובאיסוף הבא ל“דור 2“. אין דורות מעבר לדור 2.&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;8. האם ניתן להכריח את ה-Garbage collector לאסוף אובייקטים כדי לפנות מקום בזכרון? והאם כדי?&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;כן, אפשר. המתודה הסטטית GC.Collect מאפשרת להריץ את ה-garbage collector על “דור” מסויים או כל ה”דורות” בזכרון. לעומת זאת, העובדה שהפונקציה קיימת שם לא אומר שזה בהכרח רעיון טוב. מלבד מצבי קצה, עדיף להימנע מלקרוא ל-GC.Collect היות ורק עצם הזמן שה-Garbage collector משקיע בלברר איזה אובייקטים להשמיד ואיזה לא להשמיד (ולהעביר דור אחד הלאה) לוקח הרבה יותר משאבים וזמן מאשר אלו שאנו רוצים לחסוך. תנו ל-Garbage collector לנהל לעצמו את הזכרון.&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;9. האם אפשר לכתוב Desctructor למחלקות? והאם כדי? (Destructor היא פונקציה שמתבצעת בעת האיסוף של ה-garbage collector)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;כן, אפשר.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;class myClass&lt;br /&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;public myClass() {} // Constructor&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;public ~myClass() {} // Destructor&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;על הצד השני - לא עושים כזה דבר (אלמלא במצבי קצה). כאשר ה-Destructor רץ זה אומר שה-Garbage collector הגיע למסקנה ש- “טוב, אתה הולך למות כדי לפנות מקום! תמות! תמות! תמות!“, אבל אם יש Destructor אז המחלקה אומרת “יש לי עוד פונקציה להריץ!”. ומה שקורה בסוף הוא שבמקום שה-Garbage collector יהרוג את המחלקה, היא חוזרת לזכרון כדי להריץ את ה-Destructor שלה וה-Garbage collector יחכה לאיסוף הבא כדי להרוג אותה. במקום לחסוך זכרון או לעזור במשהו, רק דפקנו את ה-Garbage collection. &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;מתי כן נכתוב Destructor? כאשר כותבים “ישומיי תשתית”, למשל אם כותבים מחדש מחלקה שמבצעת חיבור לקבצים ורוצים להיות בטוחים שהמשאב נסגר, אם כותבים מחלקה שמבצעת חיבור למסד נתונים ורוצים להיות בטוחים שהמשאב נסגר, אם כותבים Wrapper לקוד שנכתב ב-++c וכך הלאה. אלא אם כן יש באמת צורך אמיתי וברור ל-Destructor, לא כותבים אותו.&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;10. איך משתמשים בפונקציה מ-DLL חיצוני? &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;משתמשים ב-namespace של System.Runtime.InteropServices, ב-Attribute שנקראת DLLImport המכילה את שם ה-DLL, כותבים פונקציה עם קידומת static extern לשם הפונקציה והחתימה שלה ב-DLL ומתפללים. למשל: &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;using System.Runtime.InteropServices;&lt;br /&gt;class myImport&lt;br /&gt;{&lt;br /&gt;[DllImport(&amp;quot;user32.dll&amp;quot;)]&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;br /&gt;&lt;strong&gt;public static extern int MessageBoxA(int h, string m, string c, int type);&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;br /&gt;&lt;strong&gt;public static int Main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; return MessageBoxA(0, &amp;quot;Hello World!&amp;quot;, &amp;quot;myHello&amp;quot;, 0);&lt;br /&gt;}&lt;br /&gt;}&lt;/strong&gt;&lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;11. כתבנו [DLLImport], הצהרנו על פונקציה וכאשר אנו קוראים לה, שום דבר לא קורה, מדוע? &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;חובה לציין לפני חתימת הפונקציה מה-DLL שהיא מסוג static extern.&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;12. מהי קידומת unsafe לבלוקי קוד \ מתודות?&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;קידומת זו מאפשרת לנו לכתוב בלוקי קוד עם פוינטרים (חברינו האבודים מ-++c). בנוסף לקידומת זו, צריך לשנות בתוך ה-Project properties, בתוך Configuration properties את התכונה Allow unsafe code blocks ל-true. נראה קוד לדוגמה:&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;unsafe&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; int* myPointer; // Reffrence to new empty pointer&lt;br /&gt;&amp;nbsp; int myIntValue = 9; // new int value&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; // Set pointer to point to the new int memory location&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; myPointer = &amp;amp;myIntValue;&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; // print value of pointer: will print “myPointer is 9“&lt;br /&gt;&amp;nbsp; Console.WriteLine(”myPointer is: “ + *myPointer); &lt;br /&gt;}&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;13&lt;/font&gt;&lt;font face="Arial" size="4"&gt;. האם חובה לכתוב על כל פונקציה extern שהיא מסוג Unsafe? &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;לא. ואלא אם כן זה באמת נדרש (עבודה מסוכנת עם pointerים) בתוך ה-DLL, עדיף להימנע מלעשות את זה.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;14. כאשר אנו משתמשים ב-int בסביבת הפיתוח של #C, באיזה טיפוס נתונים אנו משתמשים באמת? &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;כאשר אנו משתמשים ב-int אנו משתמשים באמת ב-System.Int32.&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;15. אילו סוגים של intים קיימים? &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;Int16 - שהערך המינימלי שלו -32767 והערך המקסימלי שלו 32767.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;Int32 - שהערך המינימלי שלו 2,147,483,648- והערך המקסימלי 2,147,483,648.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;Int64 - שהערך המינימלי שלו 9,223,372,036,854,775,808- והערך המקסימלי שלו 9,223,372,036,854,775,808.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;IntPtr - מחלקה זו היא תלויה בחומרת המחשב עליה היא רצה. במחשב 32bit היא Int32 ובמחשב 64bit היא Int64. המחלקה שימושית מאוד שצריך להעביר פוינטרים למספרים לכל מיני Reffrences שדורשות אותן (למשל המקרה הנפוץ הוא DLLImport למתודה שמקבלת פוינטר לספר). &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;16. מה זאת CLScompliant Attribute?&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;ה-Attribute הזאתי באה ומצהירה על המחלקה\אסמבלי\... עליה היא רשומה את הדבר הבא “אפשר לתרגם אותי לשפות אחרות בדוט נט”. אם נוסיף את התכונה הזאת למשל לכל האסמבלי שלנו (דוגמה בהמשך) הקומפיילר יבדוק: &lt;br /&gt;* האם שמות המתודות שלנו שונות בלי קשר ל-casing (אחרת יכול להיווצר מצב של שתי מתודות עם אותו שם עם הבדל של casing ולמשל ב-VB.net זה בלתי אפשרי).&lt;br /&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;* כל מתודה\Property שמוצהרת כ-public אסור שתתחיל במקף תחתון.&lt;br /&gt;* אין Opearator overloading, כלומר לא&lt;/strong&gt; &lt;strong&gt;התחלנו להקצות התנהגות מיוחדת לכל האופרטורים שלנו.&lt;br /&gt;* הוא בודק שאין חתימות זהות לפונקציות ומתעלם מפרמטרים מסוג ref/out.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;כדי להכיל על אסמבלי למשל שהיא CLScomplaint נוסיף ב-AssesmblyInfo.cs את השורה הבאה:&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;strong&gt;&lt;font face="Arial"&gt;&lt;font color="#000000" size="4"&gt;[assembly: CLSCompliant(true)]&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;17. איזה סוגי Intים לא הזכרתי בתשובה בסעיף 15? (רמז: שאלה 16) &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;UInt16, UInt32, UInt64, UIntPtr. הערכים המקסימליים של ה-UIntים כפולים מהערכים המקסימלים של ה-Intים הרגילים. אבל, הם לא CLScompliant. כלומר, הם קיימים ב-#C, אבל הם לא קיימים בפירוט השפה של דוט נט ולכן כנראה ולא יתרגמו טוב לשפות דוט נטיות אחרות. אם נרצה לכתוב על אסמבלי שהיא CLSComplaint בזמן שאנו עובדים עם Uintים נציין שהמתודה\... שעובדת עם ה-Uintים היא לא CLScomplaint. &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;// In AssesmblyInfo.cs&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;strong&gt;&lt;font face="Arial" color="#000000" size="4"&gt;[assembly: CLSCompliant(true)]&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;// Somewhere in the assembly: (From MSDN)&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;[CLSCompliant(false)] &lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;public int SetValue(UInt32 value);&lt;/strong&gt; &lt;/div&gt;&lt;/font&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;18. מה המקביל (מבחינת ערכי מקסימום ומינימום) של Int128 (שאינו קיים) ושל Uint64 (שאמרנו שערכיו המקסימליים והמינימלים כפולים מאלו של Int64)? &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;הטיפוס decimal.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;19. מדוע ומתי עדיף לעבוד עם StringBuilder מאשר עם String? &lt;br /&gt;&lt;font size="1"&gt;(אם הייתי מקבל שקל כל פעם ששאלו אותי את זה...)&lt;/font&gt; &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;String הוא מה שנקרא Imuteable, הווה אומר כל פעם שנשנה לו את הערך תיווצר מחרוזת חדשה לחלוטין עם הערך השונה. אם למשל נרצה לשרשר את כל המספרים בין אחד למיליון בתוך מחרוזת ונעשה את זה במחרוזת רגילה - כל פעם בתוך הלולאה תיווצר מחרוזת חדשה לחלוטין. מיליון מחרוזת זה קצת בזבזני. במקום זה למקרים כאלו עובדים עם StringBuilder ובעיקר עם מתודות Append ו-ToString. ככה ניתן להוסיף כל פעם ל-StringBuilder או לשנות אותו בהתאם לצרכינו וליצור מחרוזת אמיתית רק כאשר אנו צריכים אותה. כלל האצבע הוא שכאשר אנו עוברים 5 חיבורים של מחרוזות - עוברים לעבוד עם StringBuilder. חשוב לציין שעם עובדים עם פחות מ-5 השימוש ב-StringBuilder על פני String הופך להיות בזבזני מאוד במשאבי מערכת.&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;20. מה ההבדל בין System.Array.CopyTo ל-System.Array.Clone? &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;CopyTo מבצע Deep copy, כלומר יוצר מופע חדש לחלוטין ונותן לנו הפנייה אליו. Clone מבצע Shallow Copy, כלומר CopyTo יוצר הפנייה נוספת למופע הקיים. כלומר, ב-Clone אנו נעבוד על אותו מערך כל הזמן, כאשר ב-CopyTo נעבוד על מערכים שונים.&lt;/strong&gt;&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;21. קיים מערך מסוג&amp;nbsp; System.Array (או כל טיפוס שיורש ממנו) כיצד ניתן לסדר אותו בסדר יורד? &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;נשתמש במתודת ()Array.Sort ואז במתודת ()Array.Reverse. ככה נסדר את המערך בסדר עולה ונהפוך את הסדר כך שנקבל סדר יורד.&lt;/strong&gt;&lt;/font&gt; &lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;22. מהם שלושת סוגי ההערות בדוט נט ומה ההבדל העקרוני ביניהן? &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;סלאש כפול (\\), סלאש וכוכבית (\*) עם סוגר של כוכבית וסלאש (*\) וסלאש משולש (&lt;/strong&gt;&lt;/font&gt;&lt;a&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;\\\&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;). שני הראשונים משמשים להערות בגוף הקוד, כאשר השלישי משמש לתיעוד הערות XML על מתודות\Properties\מחלקות\אסמבליס\&lt;font size="1"&gt;...&lt;/font&gt;. &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;23. כיצד ניתן לקבל את כל הערות ה-XML בגוף הקוד בתוך קובץ דוקומטציה מאורגן? ובפרט, מתוך ה-Command line?&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;בתוך Visual Studio בתפריט Tools קיים כפתור Generate XML documention, בלחיצה עליו כל הערות ה-XML של ה-Solution נאספות לקובץ HTML מאורגן ומעוצב היטב. אפשרות נוספת היא כאשר מבצעים קימפול מה-Command Line דרך פקודת csc.exe נוסיף doc/ וגם אז יווצר קובץ תיעוד לכל ה-XML מה-Solution.&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;24. קיים מסד מסוג SqlServer, כיצד ניתן להתחבר אליו מתוך דוט נט, מהן האפשרויות? מהן החסרונות והיתרונות של כל אפשרות?&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;למסד הנתונים סיקוול קיים DataProvider מיוחד ומותאם לו - System.Data.SqlClient. הוא המהיר מבין האפשרויות הבאות, אך דורש לרכוש רישיון שרת סיקוול מתאים ממיקרוסופט. בנוסף קיים OleDbClient שמאפשר גישה ג&amp;#39;נארית לכל מסד נתונים מתוך דוט נט. הוא חינם, אבל הוא איטי לפחות פי שתיים מה-DataProviderים היעודיים. בנוסף קיים Odbc.Net שגם הוא ג&amp;#39;נארי (ולמעשה חלק מ-OleDb) אבל מאפשר גישה יותר מיושנת והרבה יותר ג&amp;#39;נארית למסדי נתונים. הבעיה עם Odbc.Net היא שהוא איטי באופן ניכר מ-OleDbClient. היתרון שלו (כפי שנאמר), היא שהוא תומך באופן יותר ג&amp;#39;נארי ולכן יכול לתמוך גם במסדי נתונים מאוד מאוד ישנים.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;25. מה ההבדל בין Overloading ל-Overriding? &lt;br /&gt;&lt;/font&gt;&lt;font face="Arial" size="1"&gt;(וברצינות, ראבאק, מי חשב על השאלה הזאת? איזה עובד מתוסכל מ-HR שחשב שהמושגים נשמעים ממש דומה וכולם מתבלבלים איתם? השאלה הכי מעצבנת ביקום.)&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;Overloading היא פיתוח מתודה בעלת שם מתודה ורמת גישה זהה למתודה קיימת אך עם פרמטרים שונים. כך ניתן לכתוב למשל 10 מתודות עם אותו שם ורמת גישה, אך שמקבלות פרמטרים שונים ומבצעות דברים שונים (ולרוב גם קיימים קשרים בין המתודות השונות). Overriding היא מושג מתחום הירושה המאפשר לדרוס מתודה מהמחלקה שנורשת המוסמנת ב-virtual ולכתוב במחלקה היורשת שהמתודה היא overriden. בצורה זו, ניתן לדרוס פונקציות שנורשות, אך היתרון הכי חשוב הוא שגם בעת עבודה עם פולימורפיזם השימוש יהיו בפונקציה שדורסת ולא בפונקציה המקורית (כל עוד מתקיימת שרשרת הורשה).&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;class myInheritedClass &lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;public myInheritedClass() {}&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;virtual public void myVirtualMethod()&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; {&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Writeline(“I am virtual“);&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; }&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;}&lt;br /&gt;&lt;br /&gt;class myInhertingClass :myInheritedClass &lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; public myInhertingClass() {}&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; override public void myVirtualMethod()&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; {&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Writeline(“I am override!“);&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; }&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;}&lt;br /&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;class myMain&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; public static void Main()&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; {&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myInheritedClass a = new myInheritedClass();&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a.myVirtualMethod(); // Will print out “I am virtual!“&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; &lt;/strong&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; myInhertingClass b = new myInhertingClass();&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b.myVirtualMethod(); // Will print out “I am override!“&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = b;&lt;/strong&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a.myVirtualMethod(); // Will print out “I am override!“&lt;/strong&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;/font&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; }&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&lt;strong&gt;בדוגמה האחרונה למרות שאנו עובדים עם הפנייה לטיפוס שנורש עדיין מודפסת ההודעה מהטיפוס היורש. הסיבה לכך הוא שהפולימורפיזם בדוגמה זו דואג לכך שהמתודה myVirtualMethod עדיין נדרסת גם בתוך הפולימורפיזם.&lt;/strong&gt;&lt;/font&gt; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;26. האם ניתן לבצע הורשה מרובה בדוט נט? &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&lt;strong&gt;לא. אי-אפשר. קפוט. זיפ. פיניטו. אין כזה דבר הורשה משתי מחלקות בו זמנית (כלומר שמחלקה אחת תירוש בהגדרה שלה שתי מחלקות שאינן קשורות דרך הורשה בעצמן), ותחליפים נורמליים קיימים פר מצב ב-Design Patterns.&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;27. מה ההבדל בין הצהרות switch ב-++C ל-#C? &lt;br /&gt;&lt;font size="1"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font face="Arial" size="1"&gt;שיהיה ברור דבר אחד, אני בקושי יודע איך לכתוב hello world ב-++C, אבל בשביל ראיונות עבודה למדתי לענות על השאלה הזאת.)&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;ב-++C ניתן ליפול בין הצהרות שונות של case, וב-#C זה בלתי אפשרי. &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;switch(myInt)&lt;br /&gt;{&lt;br /&gt;case 0: // fall through to 2&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; Console.Writeline(“myInt Equels 0“);&lt;br /&gt;case 1: // fall through to 2&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;case 2: &lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; Console.Writeline(“myInt Equels 2“); &lt;br /&gt;break;&lt;br /&gt;}&lt;/strong&gt;&lt;/div&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;הקוד למעלה ירוץ ב-++C, אך יזרוק שגיאת קומפיילר ב-#C. זאת היות וכל ענף (case) בהצהרת switch מחוייב להכיל break. כלומר, לא ניתן להריץ קוד כלשהו בתוך case בלי לשים בסופו הצהרת break. אז מה כן אפשר לעשות? כאפשרות ראשונה קיים הפתרון של להשתמש ב-goto: &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;switch(myInt)&lt;br /&gt;{&lt;br /&gt;case 0: // fall through to 2&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;strong&gt;&lt;font face="Arial" size="4"&gt;&amp;nbsp;&amp;nbsp; Console.Writeline(“myInt Equels 0“); &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; goto case 2;&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;case 1: // fall through to 2&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; goto case 2;&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; break;&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;case 2: &lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; Console.Writeline(“myInt Equels 2“); &lt;br /&gt;break;&lt;br /&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;&lt;font face="Arial"&gt;&lt;strong&gt;זה הפתרון הפשוט והבנאלי שכולם מחפשים. לעומת זאת, מנסיוני, אם תעבדו ככה במציאות עם מצבים קצת יותר מסובכים, כל ההירכיה הזאת של “תקפוץ לכאן! תקפוץ לשם! ותקפוץ מפה לפה!“ תדרדר לג&amp;#39;יבריש לא ברור ובלתי קריא.&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="4"&gt;&lt;strong&gt;&lt;font face="Arial"&gt;אז מה כן אפשר לעשות? אישית, אני יוצר delegate שמקבל את האובייקט עליו עושים switch, בתוך ההצהרות השונות מוסיף מתודות שרצות כחלק מ-multi cast delegate ואחרי ה-switch מריץ את ה-delegate. &lt;/font&gt;&amp;nbsp;&lt;font face="Arial"&gt; &lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;class myClass&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;&lt;font face="Arial"&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font size="4"&gt;&lt;strong&gt;&amp;nbsp; // Delegate to hold functions to be executed (param curInt)&lt;br /&gt;&amp;nbsp; private delegate void mySwitchDelegate(int curInt); &lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;strong&gt;&amp;nbsp; // Static method for case1&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; static private void DoCase1(int curInt) &lt;br /&gt;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine(&amp;quot;Case 1 execution!&amp;quot;);&lt;br /&gt;&amp;nbsp; }&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp; // Static method for case2&lt;br /&gt;&amp;nbsp; static private void DoCase2(int curInt) &lt;br /&gt;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine(&amp;quot;Case 2 execution!&amp;quot;);&lt;br /&gt;&amp;nbsp; }&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;&lt;font face="Arial"&gt; &lt;div dir="ltr" align="left"&gt;&lt;br /&gt;&lt;font size="4"&gt;&lt;strong&gt;&amp;nbsp; static void Main(string[] args)&lt;br /&gt;&amp;nbsp; {&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; int myInt = 1;&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; // Empty Delegate &lt;br /&gt;&amp;nbsp;&amp;nbsp; mySwitchDelegate myDelegate = null; &lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="4"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; switch(myInt)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 0: // fall through to 2&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Add Execution of DoCase2 to Delegate&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myDelegate +=&amp;nbsp; new mySwitchDelegate(DoCase2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 1: // Do case 1&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Add Execution of DoCase1 to Delegate&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myDelegate+=&amp;nbsp; new mySwitchDelegate(DoCase1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 2: // Do case 2&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Add Execution of DoCase2 to Delegate&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myDelegate +=&amp;nbsp; new mySwitchDelegate(DoCase2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; // Execute myDelegate with current myInt&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; myDelegate(myInt);&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font size="+0"&gt;&lt;br /&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; Console.ReadLine();&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;div dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt; &lt;p align="right"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;אם נבחר myInt שהוא 1 יודפס (פעם אחת) Case 1 execution ואם נבחר myInt שהוא 2 יודפס (פעם אחת) Case 2 execution. בשיטה הזאתי הכל הרבה יותר נקי ומסודר ואפשר לפתח עץ לוגי שלם עם חזרות בתוך הצהרת ה-switch.&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;עוד שאלות נפוצות הן פשוטות ובסיסיות, למשל:&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;- מהו ממשק?&lt;br /&gt;&lt;strong&gt;ממשק מאפשר לחייב כל מחלקה שיורשת אותו להכיל את המתודות אשר כתובות בו ובכך ניתן לאפשר פולימורפיזם וגם תאימות בין חלקים שונים של הפריימוורק למחלקה.&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;- האם אפשר לבצע הורשה מרובה מממשקים?&lt;br /&gt;&lt;strong&gt;כן, אין סיבה שלא.&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;- כיצד יוצרים מערך מסוג זה או זה? &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;- מה הם Jagged arrays?&lt;br /&gt;&lt;strong&gt;מערך של מערכים בגדלים שונים.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;- מה ההבדל בין Struct ל-Class? &lt;br /&gt;&lt;/font&gt;&lt;a id="viewpost.ascx_TitleUrl" href="http://www.justinangel.net/CommentView,guid,cf901837-6027-47db-b262-f82a7e6c9073.aspx"&gt;&lt;font face="Arial" color="#0000ff" size="4"&gt;Struct ו-Class -ההבדלים והכוח הטמון בשוני ביניהם&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;- שאלות על מילת מפתח sealed, כגון: כיצד ניתן למנוע ירושה ממחלקה? כיצד ניתן למנוע דריסה של מתודה? &lt;/font&gt;&lt;/p&gt; &lt;p align="right"&gt;&lt;font face="Arial" size="4"&gt;- איזה חתימות אפשריות יש לפונקצית Main? &lt;br /&gt;&lt;/font&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;() public static void Main&lt;br /&gt;() public static int Main&lt;br /&gt;public static void Main( string[] args )&lt;br /&gt;public static int Main(string[] args )&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;- מה ההבדל בין Delegate ל-event? &lt;br /&gt;&lt;strong&gt;Delegate אפשר לרוקן ממתודות, ו-event אי-אפשר לרוקן ממתודות. event הוא הדרך לחשוף delegateים ב-OOP.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;- מהי אסמבלי? &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;- שאלות על Global assembly cache, למשל: מה ההבדל בין Shared assembly ל-private assmebly? מהו strongname, כיצד מייצרים אחד ומה הוא מכיל? &lt;br /&gt;&lt;strong&gt;Shared assembly היא assembly שנמצאת ב-Global assembly cache (או GAC בקיצור), Private assembly בשימוש באפליקציה אחת בלבד. Strong name הוא שם שמזהה אפליקציה באופן ספציפי ומכיל גירסה, תרבות, שם האסמבלי ומפתח זיהוי יחודי. כל אסמבלי ב-Global assembly cache צריכה Strong name. &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;&lt;strong&gt;לסיכום&lt;/strong&gt;&lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;ניסיתי במאמר הזה לסקור שאלות טכניות אשר נפוצות במבחנים טכניים בראיונות עבודה. השאלות התמקדו באופן כללי בתחום הדוט נט, ובנוסף כמובן ניתן לשאול שאלות בתחומים יותר ספציפיים כמו עבודה עם מסדי נתונים, ASP.net, Winforms, אבטחה, פריסת ישומים, Webservices ועוד. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;אם יש לכם שאלות נוספות, שאלות\הערות\תגובות על התשובות שלי, או כל דבר אחר - תרגישו חופשיים להשאיר תגובה. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;ברכות,&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;ג&amp;#39;סטין-יוסף אנג&amp;#39;ל&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=142914" width="1" height="1"&gt;</description></item><item><title>Visual Studio .Net 2005 - מצגת Webcast שלי בנושא Themes</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/09/20/visual-studio-net-2005-webcast-themes.aspx</link><pubDate>Sat, 20 Sep 2008 20:53:07 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:142911</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>1</slash:comments><description>&lt;div dir="rtl" align="right"&gt; &lt;p align="right"&gt;&lt;font face="Arial" size="4"&gt;שלום לכולם,&lt;/font&gt; &lt;/p&gt; &lt;p align="right"&gt;&lt;font face="Arial" size="4"&gt;מהן Themes? איך אפשר להשתמש בהן? למה לא השתמשו בהן בדוט נט 1.1? כיצד ניתן לבנות Theme? מה אפשר לעשות איתן? איך מחליפים צבעים עם Themes? איך מחליפים תצוגה של תמונות? איך גורמים למבנה שונה בפקדים? כל זאת ועוד בהמשך.&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;p align="right"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;&lt;strong&gt;עדכון: &lt;/strong&gt;בזכות עזרתו של MVP &lt;a href="http://asaf.shelly.co.il/Eng/"&gt;אסף שלי&lt;/a&gt; במקום קובץ AVI של 125 מגה ניתן כעת לצפות במצגת כקובץ Streaming בגודל 25 מגה.&lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="right"&gt;&lt;font face="Arial" size="4"&gt;ביום ראשון בתחילת השבוע עשיתי &amp;quot;אודישן&amp;quot; לצוות המרצים של מיקרוסופט. &lt;/font&gt;&lt;/p&gt; &lt;p align="right"&gt;&lt;font face="Arial" size="4"&gt;כחלק מהאודישן הזה הייתי צריך לדבר במשך עשר דקות על כל נושא לבחירתי. &lt;br /&gt;&lt;/font&gt;&lt;font face="Arial" size="4"&gt;הנושא עליו דיברתי היה Themes ב-Visual studio .Net 2005 ו-ASP.net 2.0. &lt;/font&gt;&lt;/p&gt; &lt;p align="right"&gt;&lt;font face="Arial" size="4"&gt;ואם כבר יש לי מצגת מוכנה וקטעי קוד כתובים, החלטתי לעשות Webcast. &lt;/font&gt;&lt;/p&gt; &lt;p align="right"&gt;&lt;font face="Arial" size="4"&gt;אז לפניכם: &lt;/font&gt;&lt;a href="mms://ttvv.tv/users/publicftp/justinangel/webcast-themes.wmv"&gt;&lt;font face="Arial" size="4"&gt;Visual Studio .Net 2005 Themes Webcast &lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="right"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/VisualStudio.Net2005WebcastThemes_12494/image_2.png"&gt;&lt;img height="464" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/VisualStudio.Net2005WebcastThemes_12494/image_thumb.png" width="615" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;strong&gt;&lt;u&gt;(רזולוציית מסך מומלצת 768 * 1024)&lt;/u&gt; &lt;/strong&gt;&lt;/p&gt; &lt;p align="right"&gt;&lt;a href="http://www.justinangel.net/files/Visual_Studio_Net_2005_WebCast_Themes_source.zip"&gt;&lt;font face="Arial" size="4"&gt;קבצי המקור של הפרוייקט לדוגמה המשתמש ב-Themes&lt;/font&gt; &lt;/a&gt;&lt;font face="Arial" size="4"&gt;זמינים להורדה. &lt;/font&gt;&lt;/p&gt; &lt;p align="right"&gt;&lt;a href="http://www.justinangel.net/files/Visual_Studio_Net_2005_Themes_WebCast(Hebrew).ppt"&gt;&lt;font face="Arial" size="4"&gt;המצגת בנושא Themes ב-ASP.net 2.0 &lt;/font&gt;&lt;/a&gt;&lt;font face="Arial" size="4"&gt;שהשתמשתי בה גם זמינה להורדה. &lt;/font&gt;&lt;/p&gt; &lt;p align="right"&gt;&lt;font face="Arial" size="4"&gt;אם אתה מקבלים בעיית Codec בנגן ווידאו שלכם צריך להוריד את &lt;a href="http://download2.techsmith.com/tscc/TSCC.exe"&gt;ה-Codec של TechSmith&lt;/a&gt; (גודל: 170kb). &lt;/font&gt;&lt;/p&gt; &lt;p align="right"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="right"&gt;&lt;font face="Arial" size="4"&gt;אשמח לקבל תגובות,&lt;/font&gt; &lt;/p&gt; &lt;p align="right"&gt;&lt;font face="Arial" size="4"&gt;ג&amp;#39;סטין-יוסף אנג&amp;#39;ל&lt;/font&gt; &lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=142911" width="1" height="1"&gt;</description></item><item><title>Full Guide to System.Net.Mail</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/09/20/full-guide-to-system-net-mail.aspx</link><pubDate>Sat, 20 Sep 2008 20:52:04 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:142909</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>3</slash:comments><description>&lt;div dir="rtl" align="right"&gt;&lt;font face="Arial" size="4"&gt; &lt;p align="right"&gt;שלום לכולם,&lt;/p&gt; &lt;p align="justify"&gt;בעתיד הקרוב אני ניגש למבחן העדכון של MCSD ל-MCPD ואחד מהנושאים שם זה שליחת דוא&amp;quot;ל דרך דוט נט. אז בואו ונדבר על System.Net.Mail. &lt;/p&gt; &lt;p align="justify"&gt;System.&lt;strong&gt;Net&lt;/strong&gt;.Mail הוא הגירסה בדוט נט 2.0 של System.&lt;strong&gt;Web&lt;/strong&gt;.Mail. כן כן, שמתם לב להבדל - העבירו את זה Namespace משני. &lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;&lt;strong&gt;חלק א&amp;#39;: שרת ה-SMTP ב-IIS (או: &amp;quot;The little email who could&amp;quot;)&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt; &lt;p align="justify"&gt;בואו נתחיל מהתחלה. בכל שרת אינטרנט של מיקרוסופט מותקן IIS שזה ה-Internet information service&lt;strong&gt;&lt;u&gt;s&lt;/u&gt;&lt;/strong&gt;. שמתם לב שהדגשתי את ה-s ב-service&lt;strong&gt;&lt;u&gt;s&lt;/u&gt;&lt;/strong&gt;? כן, ה-IIS המיקרוסופטי מכיל מספר שירותים אפשריים ולא רק את היכולת להגיש דפי אינטרנט. שלושת השירותים העיקריים שה-IIS מציע הם: הגשת דפי אינטרנט, גישת FTP ושרת SMTP. כולנו מכירים את יכולת הגשת דפי אינטרנט וכולנו פחות או יותר יודעים מה זה FTP (&amp;quot;&lt;em&gt;נו, אתה יודע, זה כמו העתקת קבצים רגילה רק איטי ומתסכל&lt;/em&gt;&amp;quot;). אבל מה זה ה-SMTP הזה שהזכרתי? &lt;/p&gt; &lt;p align="justify"&gt;בפשטות ובקצרה, שרת ה-SMTP המובנה ב-IIS הוא שירות מוכר, ידוע ואמין שמאפשר שליחת דוא&amp;quot;ל. במאמר זה אנחנו נלמד כיצד ניתן לנצל את השירות הזה דרך דוט נט בכדי לשלוח דוא&amp;quot;ל מתוך הישומיים שלנו. &lt;/p&gt; &lt;p align="justify"&gt;בואו נביט ונראה שבאמת קיים כזה דבר. נפתח את IIS manager (פותחים Start --&amp;gt; Run --&amp;gt; Intermgr) ונביט מה אנחנו רואים שם:&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/FullGuidetoSystem.Net.Mail_1243F/image_2.png"&gt;&lt;img height="165" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/FullGuidetoSystem.Net.Mail_1243F/image_thumb.png" width="616" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="justify"&gt;כמו שאמרנו ה-IIS מציע לנו שלושה שרתים אפשריים: Web, Ftp, Smtp. בואו נביט על c:\inetpub&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;img height="289" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/FullGuidetoSystem.Net.Mail_1243F/image_5affd4f5-9249-46b8-bd41-c3d1de239d7c.png" width="722" border="0" /&gt; &lt;/p&gt; &lt;p align="justify"&gt;בתוך תיקיית ה-inetpub שהיא ברירת המחדל ל-IIS אפשר לראות שלושה תיקיות חשובות: wwwroot, ftproot, mailroot. את wwwroot כולנו מכירים מ-ASP.Net והיא הספרייה שבה אנו מפתחים ופורשים אפליקציות ASP.Net. כלומר, שם יושבים הקבצים בשביל השירות שדואג להגיש דפי אינטרנט. בצורה דומה, ה-ftproot היא הספרייה הראשית אליה ניגשים כאשר ניגשים לשירות ה-ftp של ה-IIS. לעומת הפשטות של ספריות ה-wwwroot וה-ftproot ספריית ה-mailroot קצת יותר מורכבת. בואו נביט עליה:&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;img height="290" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/FullGuidetoSystem.Net.Mail_1243F/image_50f19ac0-7477-4920-9240-7077dcbfcdf7.png" width="729" border="0" /&gt; &lt;/p&gt; &lt;p align="justify"&gt;&lt;u&gt;יש שלוש תיקיות עיקריות ב-mailroot:&lt;/u&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;div align="justify"&gt;Pickup - כאשר פריט דואר נשלח לראשונה הוא מגיע לכאן ומחכה לניסיון הראשון לשלוח אותו.&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;Queue - אם לאחר השליחה הראשונית יש צורך להמתין מאיזהשהי סיבה כאן ימתין הדוא&amp;quot;ל.&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;Badmail - גן-עדן לדוא&amp;quot;ל שמשהו השתבש בצורה דרסטית בשליחה שלו. &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="justify"&gt;מילה אחת אחרונה על התשתית של ה-IIS. בתוך הספריות השונות הדוא&amp;quot;ל יהיה עם סיומת eml ובעקרון מדובר בקובץ טקסט מפורמט (כמו שנראה בהמשך). ביחד איתו לרוב ימצא קובץ rtr שהוא היומן פעולות (&amp;quot;לוג&amp;quot;) של חייו הקצרים אך המרתקים של הדוא&amp;quot;ל. &lt;/p&gt; &lt;p&gt;&lt;/font&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;&lt;strong&gt;חלק ב&amp;#39;: שליחת דוא&amp;quot;ל ראשון (או: &amp;quot;אם בהתחלה לא הצלחת כנראה שנכשלת&amp;quot;)&lt;/strong&gt;&lt;/u&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;בואו נראה קוד מאוד בסיסי לשליחת מייל&lt;/font&gt;&lt;/p&gt;&lt;font face="Arial" size="4"&gt;&lt;font color="#008080" size="2"&gt;&lt;font color="#0000ff" size="2"&gt; &lt;p dir="ltr" align="left"&gt;using&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#323232"&gt; System.Net.Mail;&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt; &lt;p dir="ltr" align="left"&gt;&lt;font color="#008080" size="2"&gt;MailMessage&lt;/font&gt;&lt;font size="2"&gt; myMessage = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#008080" size="2"&gt;MailMessage&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#800000" size="2"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;,&amp;quot;&lt;/font&gt;&lt;font color="#800000" size="2"&gt;&lt;a href="mailto:J@JustinAngel.net"&gt;J@JustinAngel.net&lt;/a&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;quot;,&lt;br /&gt;&lt;/font&gt;&lt;font color="#800000" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;simple mail&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;,&lt;/font&gt;&lt;font color="#800000" size="2"&gt;&amp;quot;hello justin, how are you today?&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;);&lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;font color="#008080" size="2"&gt;SmtpClient&lt;/font&gt;&lt;font size="2"&gt; mySmtp = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#008080" size="2"&gt;SmtpClient&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#800000" size="2"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;, 25);&lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;font size="2"&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/p&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;בקוד יצרנו MailMessgae חדשה שמקבלת כפרמטר ראשון את כתובת הדוא&amp;quot;ל של השולח, כפרמטר שני את כתובת הדוא&amp;quot;ל של מען ההודעה, נושא הדוא&amp;quot;ל ותוכן הדוא&amp;quot;ל. לאחר מכן פתחנו SmtpClient על המחשב הלוקאלי (פורט 25 הוא הפורט ברירת המחדל של ה-SMTP) ושלחנו דרכו את הדוא&amp;quot;ל. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;מעכשיו ככה זה הולך לעבוד: &lt;strong&gt;MailMessage זה הדוא&amp;quot;ל שנשלח ו-SmtpClient שולח הודעות דוא&amp;quot;ל.&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;נריץ את הקוד ונקבל שגיאה: &lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;Mailbox unavailable. The server response was: 5.7.1 Unable to relay for &lt;a href="mailto:J@justinangel.net"&gt;J@justinangel.net&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;img height="380" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/FullGuidetoSystem.Net.Mail_1243F/image_bebc1d2d-6728-464d-8161-d1827e108eda.png" width="724" border="0" /&gt; &lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;הפתרון יחסית פשוט: &lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;Start --&amp;gt; Run --&amp;gt; intermgr --&amp;gt; right click smtp server --&amp;gt; Access --&amp;gt; Realy --&amp;gt; Add --&amp;gt; Ip Address: 127.0.0.1 --&amp;gt; Ok --&amp;gt; Apply&lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;img height="598" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/FullGuidetoSystem.Net.Mail_1243F/image_b31d0067-b421-4724-bfe4-071ad2998a73.png" width="635" border="0" /&gt; &lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;או קיי, טיפלנו בזה - בואו נריץ שוב. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;הכל רץ חלק. ביינתים הדוא&amp;quot;ל שלנו הגיע לתיקיית inetpub\mailroot\Pickup ושרת ה-Smtp ניסה לשלוח אותו. ודרך הפיירוול במחשב חסמתי את פורט 25 ככה שביינתים השרת לא הצליח והדוא&amp;quot;ל עבר לתיקיית inetpub\wwwroot\Queue. נפתח את תיקיית ה-Queue:&lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;img height="289" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/FullGuidetoSystem.Net.Mail_1243F/image_1d83b8ea-481f-4df2-8ef1-9c3b296ac76d.png" width="614" border="0" /&gt; &lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;נפתח את הקובץ הזה בפנקס רשימת וזה מה שנראה:&lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;Received: from justin ([127.0.0.1]) by justin with Microsoft SMTPSVC(5.0.2172.1);&lt;br /&gt;&amp;nbsp; Fri, 3 Feb 2006 19:31:57 +0200&lt;br /&gt;mime-version: 1.0&lt;br /&gt;from: &lt;a href="mailto:J@justinAngel.net"&gt;J@justinAngel.net&lt;/a&gt;&lt;br /&gt;to: &lt;a href="mailto:mail@JustinAngel.net"&gt;mail@JustinAngel.net&lt;/a&gt;&lt;br /&gt;date: 3 Feb 2006 19:31:57 +0200&lt;br /&gt;subject: simple mail&lt;br /&gt;content-type: text/plain; charset=us-ascii&lt;br /&gt;content-transfer-encoding: quoted-printable&lt;br /&gt;Return-Path: &lt;a href="mailto:J@justinAngel.net"&gt;J@justinAngel.net&lt;/a&gt;&lt;br /&gt;Message-ID: &amp;lt;&lt;a href="mailto:JUSTINUFSXju17BKjJ000000001@justin"&gt;JUSTINUFSXju17BKjJ000000001@justin&lt;/a&gt;&amp;gt;&lt;br /&gt;X-OriginalArrivalTime: 03 Feb 2006 17:31:57.0344 (UTC) FILETIME=[BB696200:01C628E7]&lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;font face="Arial" size="4"&gt;hello justin, how are you today?&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;בקצרה, מדובר על פורמט MIME וזה הפורמט שדוא&amp;quot;ל עובר בעולם. אפשר לראות שנושא ההודעה שלנו שם, הכתובת מען שלנו שם, הכתובת משלוח המקורית שם ותוכן ההודעה שם. אז במקום שאנחנו נצטרך לדעת איך לעבוד עם הפורמט הזה מה שלמעשה קרה זה ש-System.Net.Mail כתב אותו בהתאם למה שביקשנו ממנו. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;בואו נשכתב את הקוד שכתבנו למעלה ובמקום לעבוד עם Constructors נעבוד עם מאפיינים (גם באנגלית: Properties). &lt;/font&gt;&lt;/p&gt;&lt;font face="Arial" size="4"&gt; &lt;p dir="ltr" align="left"&gt;&lt;font color="#008080"&gt;&lt;br /&gt;&lt;font size="2"&gt;MailMessage&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; myMessage = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;MailMessage&lt;/font&gt;();&lt;br /&gt;myMessage.To.Add(&amp;quot;&lt;font color="#800000"&gt;&lt;a href="mailto:J@justinAngel.net"&gt;J@justinAngel.net&lt;/a&gt;&amp;quot;&lt;/font&gt;);&lt;br /&gt;myMessage.From =&amp;nbsp; &amp;quot;&lt;font color="#800000"&gt;&lt;a href="mailto:mail@JustinAngel.net"&gt;mail@JustinAngel.net&lt;/a&gt;&amp;quot;&lt;/font&gt;; &lt;font color="#ff1493"&gt;// will cause compliation error&lt;/font&gt;&lt;br /&gt;myMessage.Subject = &lt;font color="#800000"&gt;&amp;quot;simple mail&amp;quot;&lt;/font&gt;;&lt;br /&gt;myMessage.Body = &lt;font color="#800000"&gt;&amp;quot;hello justin, how are you today?&amp;quot;&lt;/font&gt;;&lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;&lt;font color="#008080" size="2"&gt;SmtpClient&lt;/font&gt;&lt;font size="2"&gt; mySmtp = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#008080" size="2"&gt;SmtpClient&lt;/font&gt;&lt;font size="2"&gt;();&lt;br /&gt;mySmtp.Host = &lt;/font&gt;&lt;font color="#800000" size="2"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;;&lt;br /&gt;mySmtp.Port = 25;&lt;/p&gt; &lt;p dir="ltr" align="left"&gt;mySmtp.Send(myMessage);&lt;/p&gt;&lt;/font&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;u&gt;חלק ג&amp;#39;: חוקרים את MailMessage (או: &amp;quot;4,000 טריקים בתוך מאפיינים&amp;quot;)&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;MailAdress - שכתוב הדוגמה&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;MailAddress היא מחלקה שיועדה להכיל כתובת דוא&amp;quot;ל ושם תצוגה כמשתנה אופציונלי נוסף. נשכתב את הדוגמה למעלה&lt;/font&gt;&lt;/p&gt;&lt;font face="Arial" size="4"&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;J@justinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Justin Angel&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Subject = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;simple mail&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Body = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;hello justin, how are you today?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;כמען לדוא&amp;quot;ל יצרנו מחלקת MailAddress חדשה שתפנה לכתובת הדוא&amp;quot;ל שלי &lt;a href="mailto:J@JustinAngel.Net"&gt;J@JustinAngel.Net&lt;/a&gt; ותציג בתצוגה את השם שלי Justin Angel. כשולח לדוא&amp;quot;ל יצרנו MailAddress נוסף אבל שיכיל כתובת דוא&amp;quot;ל בלבד בלי שם ותיאור. &lt;/p&gt; &lt;p align="justify"&gt;MailMessage.Form הוא מסוג מחלקת MailAddress (ולכן הדוגמה האחרונה בחלק ב&amp;#39; לא תתקמפל). &lt;/p&gt; &lt;p align="justify"&gt;אם הבטתם מקרוב שמתם לב למשהו מעניין MailMessage.To הוא לא ערך בודד כמו MailMessage.From אלא אוסף של MailAddress. כלומר, לדוא&amp;quot;ל יש אוסף של מענים ולא מען בודד. עוד אינפורמציה מעניינת (וטיפה לא קשורה) היא שמדובר באוסף שפנימית עובד עם Generics. עכשיו, אתם כנראה חושבים &amp;quot;היי, זה מתחיל להזכיר לי את האי-מיילים בעבודה! אבל לאי-מיילים בעבודה יש עוד המון תכונות למשל גם יש מעני CC ומעני BCC&amp;quot;. אז נכון, יש MailMessage.To שאלו הם המענים הרגילים, יש את MailMessage.CC שאלו הם המענים המכותבים ויש את MailMessage.BCC שאלו הם המענים המכותבים הנסתרים. &lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;J@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Justin Angel&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Ayende@ayende.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Eini&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;oren.ellenbogen@hmail.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Ellenbogen&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;royo@oshrovo.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Roy Osherove&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Bcc.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mikiwatts@orb-software.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Miki Watts&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Subject = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;simple mail&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Body = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;hello justin, how are you today?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;אז בדוגמה הזו שלחנו לאורן עיני ולי דוא&amp;quot;ל, כיתבנו את אורן אלנבוגן ואת רועי אושרוב ובאופן נסתר את מיקי ווטס (קישורים לבלוגים שלהם זמינים בצד). עבדנו עם המענים כאוסף לכל דבר. אגב, תמנעו בבקשה מלהריץ את הדוגמאות האלו עם הכתובות דוא&amp;quot;ל הספציפיות האלו.&lt;/p&gt; &lt;p align="justify"&gt;אם אתם דומים לי אז אתם כנראה עכשיו אתם חושבים &amp;quot;או קיי, זה כמו אי-מייל בעבודה, אבל זה לא מייל אמיתי לפני שאני מסמן אותו כדחוף&amp;quot;. אכן, ניתן לסמן MailMessage כדחופה בעזרת MailMessage.Priority.&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt; myMessage = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;(&lt;span style="color:maroon;"&gt;&amp;quot;J@JustinAngel.net&amp;quot;&lt;/span&gt;, &lt;span style="color:maroon;"&gt;&amp;quot;Justin Angel&amp;quot;&lt;/span&gt;));&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;(&lt;span style="color:maroon;"&gt;&amp;quot;Ayende@ayende.com&amp;quot;&lt;/span&gt;, &lt;span style="color:maroon;"&gt;&amp;quot;Oren Eini&amp;quot;&lt;/span&gt;));&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;(&lt;span style="color:maroon;"&gt;&amp;quot;oren.ellenbogen@hmail.com&amp;quot;&lt;/span&gt;, &lt;span style="color:maroon;"&gt;&amp;quot;Oren Ellenbogen&amp;quot;&lt;/span&gt;));&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;(&lt;span style="color:maroon;"&gt;&amp;quot;royo@oshrovo.com&amp;quot;&lt;/span&gt;, &lt;span style="color:maroon;"&gt;&amp;quot;Roy Osherove&amp;quot;&lt;/span&gt;));&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Bcc.Add(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;(&lt;span style="color:maroon;"&gt;&amp;quot;mikiwatts@orb-software.com&amp;quot;&lt;/span&gt;, &lt;span style="color:maroon;"&gt;&amp;quot;Miki Watts&amp;quot;&lt;/span&gt;));&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;(&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;myMessage.Priority = &lt;span style="color:teal;"&gt;MailPriority&lt;/span&gt;.High;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Subject = &lt;span style="color:maroon;"&gt;&amp;quot;simple mail&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Body = &lt;span style="color:maroon;"&gt;&amp;quot;hello justin, how are you today?&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt; mySmtp = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;משהו שמאוד נפוץ לעשות בשליחת דוא&amp;quot;ל אוטומטי זה ליצור שכתובת הדוא&amp;quot;ל של שולח ההודעה היא כתובת מיוחדת שמדגישה מהמען בבקשה לא הגיב. אז באמת אנחנו לא רוצים שאנשים יגיבו לכתובת ה-From אז נשים כתובת ReplyTo.&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;J@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Justin Angel&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Ayende@ayende.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Eini&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;oren.ellenbogen@hmail.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Ellenbogen&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;royo@oshrovo.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Roy Osherove&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Bcc.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mikiwatts@orb-software.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Miki Watts&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Priority = &lt;/font&gt;&lt;span style="color:teal;"&gt;MailPriority&lt;/span&gt;&lt;font color="#323232"&gt;.High;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;myMessage.ReplyTo = &lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;do-not-reply@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Subject = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;simple mail&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Body = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;hello justin, how are you today?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;כל תוכנת דוא&amp;quot;ל מאז 97&amp;#39; בערך תומכת בכך שאם מפורטת כתובת ReplyTo בלחיצה על Reply היא תיקח את כתובת ה-ReplyTo לשליחת תגובה. באופן כללי, זאת מדיניות מאוד טובה ששולחים דוא&amp;quot;ל אוטומטי להוסיף ReplyTo שמכוון את התגובות לדוא&amp;quot;ל. &lt;/p&gt; &lt;p align="justify"&gt;אנחנו ישראלים טובים וכיאה לכאלו יהיו לנו בעיות עם הקידוד. אז אל תחששו - ניתן לכתוב נושא להודעה ותוכן להודעה באיזה Encoding שרוצים (ואפילו בקידודים שונים כמו בדוגמה לפנינו). בוא נגיד ואנחנו רוצים לשלוח את המייל עם הכותרת &amp;quot;מה שלומך?&amp;quot; ולשאול &amp;quot;מה שלומך גבר גבר?&amp;quot;. נשתמש ב-MailMessage.BodyEncoding ו-MailMessage.SubjectEncoding שנותנים לנו לפרט באיזה קידוד להשתמש. &lt;/p&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt; myMessage = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;(&lt;span style="color:maroon;"&gt;&amp;quot;J@JustinAngel.net&amp;quot;&lt;/span&gt;, &lt;span style="color:maroon;"&gt;&amp;quot;Justin Angel&amp;quot;&lt;/span&gt;));&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;(&lt;span style="color:maroon;"&gt;&amp;quot;Ayende@ayende.com&amp;quot;&lt;/span&gt;, &lt;span style="color:maroon;"&gt;&amp;quot;Oren Eini&amp;quot;&lt;/span&gt;));&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;(&lt;span style="color:maroon;"&gt;&amp;quot;oren.ellenbogen@hmail.com&amp;quot;&lt;/span&gt;, &lt;span style="color:maroon;"&gt;&amp;quot;Oren Ellenbogen&amp;quot;&lt;/span&gt;));&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;(&lt;span style="color:maroon;"&gt;&amp;quot;royo@oshrovo.com&amp;quot;&lt;/span&gt;, &lt;span style="color:maroon;"&gt;&amp;quot;Roy Osherove&amp;quot;&lt;/span&gt;));&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Bcc.Add(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;(&lt;span style="color:maroon;"&gt;&amp;quot;mikiwatts@orb-software.com&amp;quot;&lt;/span&gt;, &lt;span style="color:maroon;"&gt;&amp;quot;Miki Watts&amp;quot;&lt;/span&gt;));&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;(&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Priority = &lt;span style="color:teal;"&gt;MailPriority&lt;/span&gt;.High;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.ReplyTo = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;(&lt;span style="color:maroon;"&gt;&amp;quot;do-not-reply@JustinAngel.net&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Subject = &lt;span style="color:maroon;"&gt;&amp;quot;&lt;span&gt;מה שלומך&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;?&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.SubjectEncoding = &lt;span style="color:teal;"&gt;Encoding&lt;/span&gt;.Unicode;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Body = &lt;span style="color:maroon;"&gt;&amp;quot;hello justin, how are you today?&amp;quot;&lt;/span&gt; + &lt;span style="color:maroon;"&gt;&amp;quot;&lt;span&gt;מה המצב גבר גבר&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;?&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.BodyEncoding = &lt;span style="color:teal;"&gt;Encoding&lt;/span&gt;.GetEncoding(&lt;span style="color:maroon;"&gt;&amp;quot;iso-8859-8-i&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt; mySmtp = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;כמו בכל הודעת דוא&amp;quot;ל רגילה ניתן להוסיף קבצים כנספחים. ובדומה למענים, מדובר באוסף של קבצים ולא בקובץ יחיד. &lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;J@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Justin Angel&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Ayende@ayende.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Eini&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;oren.ellenbogen@hmail.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Ellenbogen&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;royo@oshrovo.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Roy Osherove&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Bcc.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mikiwatts@orb-software.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Miki Watts&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Priority = &lt;/font&gt;&lt;span style="color:teal;"&gt;MailPriority&lt;/span&gt;&lt;font color="#323232"&gt;.High;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.ReplyTo = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;do-not-reply@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Subject = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;span&gt;מה שלומך&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.SubjectEncoding = &lt;/font&gt;&lt;span style="color:teal;"&gt;Encoding&lt;/span&gt;&lt;font color="#323232"&gt;.Unicode;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Body = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;hello justin, how are you today?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt; + &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;span&gt;מה המצב גבר גבר&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.BodyEncoding = &lt;/font&gt;&lt;span style="color:teal;"&gt;Encoding&lt;/span&gt;&lt;font color="#323232"&gt;.GetEncoding(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;iso-8859-8-i&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Attachments.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Attachment&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\myFile.txt&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Attachments.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Attachment&lt;/span&gt;&lt;font color="#323232"&gt;(GetAttachmentStream(),&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;font face="Arial" size="4"&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&lt;font color="#323232"&gt; System.IO.&lt;/font&gt;&lt;span style="color:teal;"&gt;Stream&lt;/span&gt;&lt;font color="#323232"&gt; GetAttachmentStream()&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;FileStream&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\myFile.txt&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:teal;"&gt;FileMode&lt;/span&gt;&lt;font color="#323232"&gt;.Open);&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;אפשר לראות שהוספנו להודעת הדוא&amp;quot;ל שלנו שני מחלקות מסוג Attachment. המחלקה Attachment מייצגת קובץ שנספח לדוא&amp;quot;ל ויכלה להיווצר או מנתיב מקומי לקובץ או מ-Stream שמכיל את הקובץ. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;עד עכשיו שלחנו הודעות טקסטואליות בלבד וכמו שאנחנו יודעים הודעות דוא&amp;quot;ל מכילות תמונות וציורים וטבלאות (ולאחרונה הם גם אומרות לי &amp;quot;שלום&amp;quot; שאני פותח אותן שזה מפחיד בפני עצמו). בכל מקרה, כל אותם משחקי עיצוב הם HTML פשוט. בואו נגיד שלמשל נרצה לשלוח את הטקסט שלנו בתוכן מודגש.&lt;/font&gt;&lt;/p&gt;&lt;font face="Arial" size="4"&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;J@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Justin Angel&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Ayende@ayende.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Eini&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;oren.ellenbogen@hmail.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Ellenbogen&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;royo@oshrovo.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Roy Osherove&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Bcc.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mikiwatts@orb-software.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Miki Watts&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Priority = &lt;/font&gt;&lt;span style="color:teal;"&gt;MailPriority&lt;/span&gt;&lt;font color="#323232"&gt;.High;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.ReplyTo = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;do-not-reply@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Subject = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;span&gt;מה&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt; &lt;span&gt;שלומך&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.SubjectEncoding = &lt;/font&gt;&lt;span style="color:teal;"&gt;Encoding&lt;/span&gt;&lt;font color="#323232"&gt;.Unicode;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Body = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&amp;lt;b&amp;gt;&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt; + &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;hello justin, how are you today?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt; + &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;span&gt;מה המצב גבר גבר&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt; + &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&amp;lt;/b&amp;gt;&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;myMessage.IsBodyHtml = &lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.BodyEncoding = &lt;/font&gt;&lt;span style="color:teal;"&gt;Encoding&lt;/span&gt;&lt;font color="#323232"&gt;.GetEncoding(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;iso-8859-8-i&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Attachments.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Attachment&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\myFile.txt&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Attachments.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Attachment&lt;/span&gt;&lt;font color="#323232"&gt;(GetAttachmentStream(), &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;בפשטות, הוספנו את עיצוב ה-HTML שלנו ואמרנו כי MailMessage.IsBodyHtml הוא אמת וזה כל מה שצריך לעשות בשביל תוכן HTMLי. ומכאן השמיים הגבול, טבלאות, צבעים, פונטים, הכל בטוח בפנינו במרחק מאפיין (באנגלית: Property) אחד - IsBodyHtml. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;כל זה טוב ויפה, אבל HTML זאת טכנולוגיה מתקדמת. ייתכן וכי יש שירותי דואר שלא תומכים בהצגת HTML גרפי (בכוונה או מחוסר יכולת). כדי לפתור את הבעיה הזאת באו ואמרו ככה - את הדוא&amp;quot;ל הזה אפשר להציג לפי סוג התוכן שביקשת. הכי נפוץ לראות דוא&amp;quot;ל בפורמט text/plain שזה טקסט פשוט ודוא&amp;quot;ל בפורמט text/html שזו תצוגת HTML. אבל יש עוד המון פורמטים, למשל אתמול קיבלתי דוא&amp;quot;ל שמציג טבלה מאוד ארוכה ומורכבת. בתצוגת HTML היה ניתן לראות את הטבלה, בתצוגת טקסט היה אפשר לראות את הטקסט &amp;quot;אנא פתח אוטלוק לתצוגת טבלה&amp;quot; ותצוגה שלישית כמסמך אקסל (!). על כל עניין הפורמטים הזה בנו Namespace שלם בשם System.Net.Mime שהוא האח הקטן והשימושי של System.Net.Mail. בתוך System.Net.Mime יש מחלקה בשם ContentType שמחזיקה סוג פורמט. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;עכשיו אתם כנראה קצת מבולבלים &amp;quot;סוג פורמט למה? כל מה שאמרת זה שיש פורמטים, איך אני עובד איתם בתכלס&amp;#39;?&amp;quot;. סיכמנו שיש סוגי פורמטים. לכל סוג פורמט כזה ניצור AlternateView לדוא&amp;quot;ל שלנו. כלומר, לכל סוג פורמט ניצור סוג תצוגה אפשרי. לטקסט ניצור תוכן טקסטואלי ול-HTML ניצור תוכן HTMLי. בואו נביט על איך זה נראה. &lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;J@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Justin Angel&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Ayende@ayende.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Eini&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;oren.ellenbogen@hmail.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Ellenbogen&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;royo@oshrovo.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Roy Osherove&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Bcc.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mikiwatts@orb-software.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Miki Watts&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Priority = &lt;/font&gt;&lt;span style="color:teal;"&gt;MailPriority&lt;/span&gt;&lt;font color="#323232"&gt;.High;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.ReplyTo = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;do-not-reply@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Subject = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;span&gt;מה שלומך&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.SubjectEncoding = &lt;/font&gt;&lt;span style="color:teal;"&gt;Encoding&lt;/span&gt;&lt;font color="#323232"&gt;.Unicode;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Attachments.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Attachment&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\myFile.txt&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Attachments.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Attachment&lt;/span&gt;&lt;font color="#323232"&gt;(GetAttachmentStream(), &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt; PlainContentType = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt; PlainView = &lt;/font&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt;.CreateAlternateViewFromString&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Hi justin, how are you?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, PlainContentType);&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.AlternateViews.Add(PlainView);&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt; HtmlContentType = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt; HtmlView = &lt;/font&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt;.CreateAlternateViewFromString&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&amp;lt;b&amp;gt;Hi justin, how are you?&amp;lt;/b&amp;gt;&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, HtmlContentType);&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.AlternateViews.Add(HtmlView);&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;עשינו משהו מאוד פשוט - הוספנו ContentType חדש, הוספנו AlternateView לאותו סוג פורמט ואת אותו AlternateView הוספנו ל-MailMessage.AlternateViews (שזה אוסף של AlternateViews). וככה אנחנו יכולים מאוד בקלות ליצור כמה תצוגות שצריך לדוא&amp;quot;ל שלנו. &lt;/font&gt;&lt;font face="Arial" size="4"&gt;סה&amp;quot;כ זה מנהג מאוד טוב להוסיף AlternateView אחד ל-HTML ו-AlternateView אחד לטקסט פשוט. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;אם בחנתם את הדוגמה לעיל לעומק שמתם כנראה לב שביצעתי מחטף קטן, העלמתי את העברית מהדוא&amp;quot;ל. אז בואו נחליף את התצוגה הטקסטואלית לעברית פשוטה ונוסיף קידוד בהתאם. &lt;/font&gt;&lt;/p&gt;&lt;font face="Arial" size="4"&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;J@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Justin Angel&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Ayende@ayende.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Eini&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;oren.ellenbogen@hmail.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Ellenbogen&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;royo@oshrovo.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Roy Osherove&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Bcc.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mikiwatts@orb-software.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Miki Watts&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Priority = &lt;/font&gt;&lt;span style="color:teal;"&gt;MailPriority&lt;/span&gt;&lt;font color="#323232"&gt;.High;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.ReplyTo = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;do-not-reply@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Subject = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;span&gt;מה שלומך&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.SubjectEncoding = &lt;/font&gt;&lt;span style="color:teal;"&gt;Encoding&lt;/span&gt;&lt;font color="#323232"&gt;.Unicode;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Attachments.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Attachment&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\myFile.txt&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Attachments.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Attachment&lt;/span&gt;&lt;font color="#323232"&gt;(GetAttachmentStream(), &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;myMessage.BodyEncoding = &lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;&lt;span style="color:teal;"&gt;Encoding&lt;/span&gt;&lt;font color="#323232"&gt;.UTF8;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt; PlainContentType = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt; PlainView = &lt;/font&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt;.CreateAlternateViewFromString&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;span&gt;אהלן ג&amp;#39;סטין, מה המצב גבר גבר&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, PlainContentType);&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;PlainView.TransferEncoding = &lt;/font&gt;&lt;span style="color:teal;"&gt;TransferEncoding&lt;/span&gt;&lt;font color="#323232"&gt;.Base64;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.AlternateViews.Add(PlainView);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt; HtmlContentType = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt; HtmlView = &lt;/font&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt;.CreateAlternateViewFromString&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&amp;lt;b&amp;gt;Hi justin, how are you?&amp;lt;/b&amp;gt;&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, HtmlContentType);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.AlternateViews.Add(HtmlView);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;font size="3"&gt;&lt;font color="#323232"&gt;&lt;font face="Times New Roman"&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;/font&gt;&lt;font face="Arial" size="4"&gt;AlternateView הוא למעשה סוג של Attachment לדוא&amp;quot;ל ולכן הוא קצת יותר מוגבל מבחינת קידוד (TransferEncoding הוא Enum יחסית מוגבל שמתייחס לקידוד בו מועבר הקובץ). זאת בזמן ש-MailMessage.BodyEncoding מתייחס לקידוד שבו תוצג ההודעה. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;קודם דיברנו על תמונות כחלק מהדוא&amp;quot;ל ודוא&amp;quot;ל מדבר. אז דוא&amp;quot;ל מדבר לא נדגים כאן, אבל תמונה אין למה לא. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;נשתמש בחלק האחרון של AlternateView - ב-LinkedResources. אוסף זה מאפשר לנו להוסיף קובץ שיהיה חלק מהמסמך ולא כקובץ כנספח חיצוני למסמך. את ה-LinkedResource ניתן ליצור (בדומה ל-Attachment) מתוך נתיב לקובץ או מתוך Stream שמכיל את הקובץ. בואו נראה דוגמה להוספת תמונה שלי בראש המסמך וכרטיס ביקור בסיומו. &lt;/font&gt;&lt;/p&gt;&lt;font face="Arial" size="4"&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;J@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Justin Angel&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Ayende@ayende.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Eini&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;oren.ellenbogen@hmail.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Ellenbogen&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;royo@oshrovo.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Roy Osherove&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Bcc.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mikiwatts@orb-software.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Miki Watts&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Priority = &lt;/font&gt;&lt;span style="color:teal;"&gt;MailPriority&lt;/span&gt;&lt;font color="#323232"&gt;.High;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.ReplyTo = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;do-not-reply@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Subject = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;span&gt;מה שלומך&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.SubjectEncoding = &lt;/font&gt;&lt;span style="color:teal;"&gt;Encoding&lt;/span&gt;&lt;font color="#323232"&gt;.Unicode;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Attachments.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Attachment&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\myFile.txt&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Attachments.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Attachment&lt;/span&gt;&lt;font color="#323232"&gt;(GetAttachmentStream(), &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.BodyEncoding = &lt;/font&gt;&lt;span style="color:teal;"&gt;Encoding&lt;/span&gt;&lt;font color="#323232"&gt;.UTF8;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt; PlainContentType = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt; PlainView = &lt;/font&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt;.CreateAlternateViewFromString&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;span&gt;אהלן ג&amp;#39;סטין, מה המצב גבר גבר&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, PlainContentType);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;PlainView.TransferEncoding = &lt;/font&gt;&lt;span style="color:teal;"&gt;TransferEncoding&lt;/span&gt;&lt;font color="#323232"&gt;.Base64;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.AlternateViews.Add(PlainView);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt; HtmlContentType = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt; HtmlView = &lt;/font&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt;.CreateAlternateViewFromString&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;strong&gt;&amp;lt;img src=cid:JustinPic&amp;gt;&lt;/strong&gt;&amp;lt;b&amp;gt;Hi justin,&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt; + &lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;how are you?&amp;lt;/b&amp;gt;&lt;strong&gt;&amp;lt;img src=cid:JustinBusinessCard&amp;gt;&lt;/strong&gt;&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, HtmlContentType);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:teal;"&gt;LinkedResource&lt;/span&gt;&lt;font color="#323232"&gt; SomePic = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;LinkedResource&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\Justin-02-02-2006.gif&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;SomePic.ContentId = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;JustinPic&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;HtmlView.LinkedResources.Add(SomePic);&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;LinkedResource&lt;/span&gt;&lt;font color="#323232"&gt; SomeOtherPic = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;LinkedResource&lt;/span&gt;&lt;font color="#323232"&gt;(GetBusinessCardStream());&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;SomeOtherPic.ContentId = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;JustinBusinessCard&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;HtmlView.LinkedResources.Add(SomeOtherPic);&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;HtmlView.LinkedResources.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;LinkedResource&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\JustiPic.gif&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.AlternateViews.Add(HtmlView);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Stream&lt;/span&gt;&lt;font color="#323232"&gt; GetBusinessCardStream()&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;FileStream&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\Bizcard.jpg&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:teal;"&gt;FileMode&lt;/span&gt;&lt;font color="#323232"&gt;.Open);&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Stream&lt;/span&gt;&lt;font color="#323232"&gt; GetAttachmentStream()&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;FileStream&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\myFile.txt&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:teal;"&gt;FileMode&lt;/span&gt;&lt;font color="#323232"&gt;.Open);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;בואו נעבור על מה שעשינו, דבר ראשון יצרנו LinkedResource שנובע מקובץ מקומי או Stream. נתנו לאותו LinkedResource.ContentId שתסמל אותו שנעבוד בתוך המסמך. בתוך המסמך, כחלק מה-HTML מוכר יצרנו תגית &amp;lt;img&amp;gt; עם ווריציה קלה - כתבנו src=cid:myLinkedResourceContentId. אגב, בכוונה נתתי לקבצים ולמחלקות LinkedResource שמות לא קשורים כדי שתראו בדיוק מאיפה מגיע ה-ContentId. &lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;/font&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;u&gt;חלק ד&amp;#39;: חוקרים את SmtpClient (או: &amp;quot;סינכרוני\א-סינכרוני, מאובטח\לא-מאובטח ומשלוח מקומי או משלוח ברשת&amp;quot;)&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;עד עכשיו עבדנו על אובייקט ה-MailMessage שהוא התוכן שנשלח ולא דיברנו כמעט בכלל על SmtpClient שהוא השולח עצמו. בואו ננקה את הדוגמה שלנו מקודם ונעבוד עם מתודה אחת גדולה שמייצרת לנו את ה-MailMessage בכדי שנוכל להתמקד ב-SmtpClient.&lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/font&gt;&lt;/span&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; CreateVeryComplexMailMessage()&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;J@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Justin Angel&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.To.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Ayende@ayende.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Eini&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;oren.ellenbogen@hmail.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Oren Ellenbogen&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.CC.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;royo@oshrovo.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Roy Osherove&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Bcc.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mikiwatts@orb-software.com&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Miki Watts&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Priority = &lt;/font&gt;&lt;span style="color:teal;"&gt;MailPriority&lt;/span&gt;&lt;font color="#323232"&gt;.High;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.ReplyTo = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;do-not-reply@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Subject = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;span&gt;מה שלומך&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.SubjectEncoding = &lt;/font&gt;&lt;span style="color:teal;"&gt;Encoding&lt;/span&gt;&lt;font color="#323232"&gt;.Unicode;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Attachments.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Attachment&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\myFile.txt&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.Attachments.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Attachment&lt;/span&gt;&lt;font color="#323232"&gt;(GetAttachmentStream(), &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.BodyEncoding = &lt;/font&gt;&lt;span style="color:teal;"&gt;Encoding&lt;/span&gt;&lt;font color="#323232"&gt;.UTF8;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt; PlainContentType = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt; PlainView = &lt;/font&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt;.CreateAlternateViewFromString&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;span&gt;אהלן ג&amp;#39;סטין, מה המצב גבר גבר&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;?&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, PlainContentType);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;PlainView.TransferEncoding = &lt;/font&gt;&lt;span style="color:teal;"&gt;TransferEncoding&lt;/span&gt;&lt;font color="#323232"&gt;.Base64;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.AlternateViews.Add(PlainView);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt; HtmlContentType = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;ContentType&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt; HtmlView = &lt;/font&gt;&lt;span style="color:teal;"&gt;AlternateView&lt;/span&gt;&lt;font color="#323232"&gt;.CreateAlternateViewFromString&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&amp;lt;img src=cid:JustinPic&amp;gt;&amp;lt;b&amp;gt;Hi justin,&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt; +&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;how are you?&amp;lt;/b&amp;gt;&amp;lt;img src=cid:JustinBusinessCard&amp;gt;&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, HtmlContentType);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;LinkedResource&lt;/span&gt;&lt;font color="#323232"&gt; SomePic = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;LinkedResource&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\Justin-02-02-2006.gif&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;SomePic.ContentId = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;JustinPic&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;HtmlView.LinkedResources.Add(SomePic);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;LinkedResource&lt;/span&gt;&lt;font color="#323232"&gt; SomeOtherPic = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;LinkedResource&lt;/span&gt;&lt;font color="#323232"&gt;(GetBusinessCardStream());&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;SomeOtherPic.ContentId = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;JustinBusinessCard&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;HtmlView.LinkedResources.Add(SomeOtherPic);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;HtmlView.LinkedResources.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;LinkedResource&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\JustiPic.gif&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.AlternateViews.Add(HtmlView);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&lt;font color="#323232"&gt; myMessage;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;Stream&lt;/span&gt;&lt;font color="#323232"&gt; GetBusinessCardStream()&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;FileStream&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\Bizcard.jpg&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:teal;"&gt;FileMode&lt;/span&gt;&lt;font color="#323232"&gt;.Open);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&lt;font color="#323232"&gt; System.IO.&lt;/font&gt;&lt;span style="color:teal;"&gt;Stream&lt;/span&gt;&lt;font color="#323232"&gt; GetAttachmentStream()&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;FileStream&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\myFile.txt&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:teal;"&gt;FileMode&lt;/span&gt;&lt;font color="#323232"&gt;.Open);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;font face="Arial" size="4"&gt;בוא נביט על הקוד הרלוונטי שוב פעם ומקרוב&lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:en-us;mso-fareast-language:en-us;mso-bidi-language:he;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/font&gt;&lt;/span&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;אנחנו שולחים &lt;strong&gt;דרך הרשת המקומית&lt;/strong&gt; ל-IP שכתובתו 127.0.0.1 בפורט 25 דוא&amp;quot;ל. במקרה שלנו מדובר בשליחה לוקאלית, אבל ייתכן מאוד ונרצה לשלוח באמת דרך הרשת את הדוא&amp;quot;ל לשרת מרוחק (למשל לשרת Exchange). אז אנחנו נחפשים כאן לבעית אבטחה - המייילים שלנו יעברו חשופים לחלוטין דרך האל יודע איפה. מה נהוג לעשות במצב כזה? להגדיר איזהשהו פתרון של תקשורת מאובטחת. נלך על הכי פשוט וידוע - SSL. אל תטעו ותחשבו על SSL בין לקוח דפדן לשרת כמו שאנחנו רגילים מתחום ה-web, אלא כאן מדובר על תקשורת בין השרת שלנו לבין שרת דואר. בואו נראה דוגמה לאיך לפתוח בקשת מפתח SSL ציבורי משרת הדואר, קבלת המפתח הציבורי, קידוד ההודעה בעזרת ההודעה ב-128 ביט ושליחתה לשרת.&lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.EnableSsl = &lt;/font&gt;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;כל הטיפול ב-SSL התבצע בשורה אחת קטנה ופשוטה ולא היינו צריכים בכלל להתעסק עם זה. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;עכשיו הדוא&amp;quot;ל שלנו מעביר תקשורת ברשת באמצעות SSL. שאני שומע את זה אני ישר חושב &amp;quot;זמן-ריצה&amp;quot;. לכזה דבר ייקח המון זמן לרוץ. לפעמים לוקח לקוד הזה 20 שניות לרוץ בזמן שיש תעבורת רשת עמוסה והשרת דואר בצד השני גם עמוס. נגיד ואני לא רוצה שאחרי 10 שניות האפליקציה עוד תתעסק עם הדוא&amp;quot;ל הזה יותר. מנקודת המבט (הדמיונית) שלי נשלח או לא נשלח לא משנה אם התוכנה לא מגיבה למשתמש במשך יותר מ-10 שניות. &lt;/font&gt;&lt;/p&gt;&lt;font face="Arial" size="4"&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.EnableSsl = &lt;/font&gt;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Timeout = 10 * 1000; &lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;/font&gt;&lt;font face="Arial" size="4"&gt;בואו נעבור על מה באמת קורה. האפליקציה מגיעה לשורה של SmtpClient.Send, מתחילה לשלוח את הדוא&amp;quot;ל ומחכה. אם עוברות יותר מ-10 שניות והתהליך לא מסתיים תזרק SmtpException. אז פתרנו את הבעיה העקרונית - המשתמש לא ימתין יותר מ-10 שניות מעל אותה שורה. אבל הפתרון הזה משאיר טעם רע בפה. אני אעלה שאלה, למה בכלל לבצע את משלוח הדוא&amp;quot;ל בצורה סינכרונית? אם אין סיבה לחכות על SmtpClient.Send נשלח את הקראה למתודה בצורה א-סינכרונית (כלומר, לא נעצור עד שהשורה נתבצע אלא נבצע במקביל גם את מה שאחרי המתודה וגם את המתודה עצמה). &lt;/font&gt;&lt;/p&gt;&lt;font face="Arial" size="4"&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.EnableSsl = &lt;/font&gt;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.SendAsync(myMessage, myMessage);&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;עכשיו נתעכב לכמה אלפי שנייה בלבד על משלוח הדוא&amp;quot;ל בזמן שכל שאר הקוד שלנו ממשיך לרוץ כרגיל. שימו לב שהורדנו את SmtpClient.Timeout היות ואם אמרנו &amp;quot;אל תתעכב על השורה הזאת&amp;quot; אין טעם להוסיף &amp;quot;אל תתעכב על השורה הזאת יותר מ-10 שניות&amp;quot;. אם ברצוננו לבצע פעולה לאחר שהשליחה הסתיימה (למשל להדפיס הודעה למשתמש, לרשום ביומן הפעולות או לבדוק אם עלו שגיאות במהלך הביצוע) נוכל לבצע זאת בעזרת אירוע SmtpClient.SendCompleted. האירוע יקבל את המתודות שנרצה שירוצו לאחר ששליחת הדוא&amp;quot;ל הסתיימה.&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.EnableSsl = &lt;/font&gt;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;mySmtp.SendCompleted += &lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SendCompletedEventHandler&lt;/span&gt;&lt;font color="#323232"&gt;(mySmtp_SendCompleted);&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.SendAsync(myMessage, myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp_SendCompleted(&lt;/font&gt;&lt;span style="color:blue;"&gt;object&lt;/span&gt;&lt;font color="#323232"&gt; sender, System.ComponentModel.&lt;/font&gt;&lt;span style="color:teal;"&gt;AsyncCompletedEventArgs&lt;/span&gt;&lt;font color="#323232"&gt; e)&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;Console&lt;/span&gt;&lt;font color="#323232"&gt;.Write(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Send completed!&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;עד עכשיו יצאנו מנקודת הנחה כי אנו שולחים דרך הרשת את הדוא&amp;quot;ל שלנו. מסתבר שיש שלוש דרכים לשלוח דוא&amp;quot;ל דרך שרת ה-SMTP של ה-IIS: דרך הרשת, דרך שרת ה-SMTP המקומי עם ספריית ה-Pickup שלו ולכתוב את קובץ ה-eml לתוך ספרייה כלשהי (שבתקווה היא תיקיית Pickup של שרת SMTP כלשהו). &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;נראה כיצד להשתמש בספריית ה-Pickup ברירת-המחדל של שרת ה-SMTP של ה-IIS שלנו.&lt;/font&gt;&lt;/p&gt;&lt;font face="Arial" size="4"&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;mySmtp.DeliveryMethod = &lt;/strong&gt;&lt;/font&gt;&lt;span style="color:teal;"&gt;&lt;strong&gt;SmtpDeliveryMethod&lt;/strong&gt;&lt;/span&gt;&lt;font color="#323232"&gt;&lt;strong&gt;.PickupDirectoryFromIis&lt;/strong&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;השתמנו ב-mySmtp.DeliveryMethod ואמרנו כי השליחה דרך ה-SmtpClient הזה מתבצע לתוך שרת ה-SMTP המקומי ואכן באמת נוסף לנו קובץ חדש לתוך ספריית inetpub\mailroot\Pickup.&lt;/p&gt; &lt;p align="justify"&gt;יש גם מצבים שבהם שרת ה-SMTP שלנו לא מתממשק בצורה טובה עם שרת ה-SMTP של ה-IIS. כל שרת דואר שאני מכיר מתקין ספריית Pickup (או נותן אפשרות שתהיה ספרייה שאחריה הוא יעקוב לדוא&amp;quot;ל יוצא חדש).&amp;nbsp; נגדיר את ה-SmtpClient שלנו שיכתוב לתוך תיקייה כזו ונגיד לו איפה יושבת התיקייה.&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mySmtp.DeliveryMethod = &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpDeliveryMethod&lt;/span&gt;&lt;font color="#323232"&gt;.SpecifiedPickupDirectory;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.PickupDirectoryLocation = &lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\Exchange2003\Pickup&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;במקרה הזה כתבנו לתוך תיקיית ה-Pickup של שרת ה-Exchange&amp;nbsp; הלוקאלי. ניתן להשתמש באפשרות של כתיבת דוא&amp;quot;ל לספרייה מקומית גם בזמן פיתוח ותחזוקת אפליקציה שעובדת עם System.Net.Mail. בצורה זו נוכל לבחון את כל קבצי ה-eml שהקוד שלנו יצר. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;נחזור לדוגמה המקורית לעבודה עם משלוח באמצעות רשת. &lt;/font&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;font face="Courier New"&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/font&gt;&lt;/span&gt; &lt;p align="justify"&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Arial" size="4"&gt;נשנה קצת את הדוגמה כך שתיגש לשרת SMTP איפהשהו ברשת ולא למחשב המקומי. &lt;/font&gt;&lt;/p&gt;&lt;font face="Arial" size="4"&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;254.169.20.15&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;עכשיו אנחנו ניתקל בבעיה מסוג חדש לחלוטין - אם אנחנו עובדים דרך הרשת המקומית ייתכן וכי בהתאם למדיניות הארגון באיזהשהו שלב נדרש לספק שם משתמש וסיסמה של המשתמש שעובד עכשיו על הרשת. נוכל ליצור NetworkCredential שתייצג את ההרשאה שלנו לגשת לרשת. נספק שם משתמש וסיסמה (ובאופן אופציונלי גם Active Directory domain). &lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;254.169.20.15&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Credentials = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;NetworkCredential&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;LanUsername&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;LanPassword&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/font&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;u&gt;חלק ה&amp;#39;: קובץ קונפיגיורציה (או: &amp;quot;חוסכים טקסט שקשור ל-SmtpClient&amp;quot;)&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font face="Arial" size="4"&gt;נוסיף לפרוייקט שלנו קובץ קונפיגיורציה. אם נשחק קצת עם ה-intellisense נראה שנגיע למצב שיש לנו את הטקסט הבא בתוך App.config.&lt;/font&gt;&lt;/p&gt;&lt;font face="Arial" size="4"&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;xml&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:&amp;#39;Courier New&amp;#39;;"&gt;version&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;configuration&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;system.net&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;mailSettings&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;smtp&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;smtp&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;mailSettings&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;system.net&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;configuration&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;נעבור על כל דוגמה שהגענו אליה בסעיף הקודם ונראה כיצד ניתן להגדיר את המאפיינים של SmtpClient בתוך קובץ ה-App.config שלנו. &lt;/p&gt; &lt;p align="justify"&gt;בדוגמה שבה תיקיית היעד שלנו הייתה תיקיית ברירת המחדל של שרת ה-SMTP של ה-IIS הקוד שלנו נראה כך:&lt;/p&gt; &lt;p align="justify"&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;mySmtp.DeliveryMethod = &lt;/strong&gt;&lt;/font&gt;&lt;span style="color:teal;"&gt;&lt;strong&gt;SmtpDeliveryMethod&lt;/strong&gt;&lt;/span&gt;&lt;font color="#323232"&gt;&lt;strong&gt;.PickupDirectoryFromIis&lt;/strong&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;דבר ראשון, נוסיף את כתובת ה-MailMessage.From שלנו לתוך קובץ הקונפיגיורציה. &lt;/font&gt;&lt;/p&gt;&lt;font face="Arial" size="4"&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;xml&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:&amp;#39;Courier New&amp;#39;;"&gt;version&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;configuration&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;system.net&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;mailSettings&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;strong&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;smtp&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:&amp;#39;Courier New&amp;#39;;"&gt;from&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;mail@JustinAngel.net&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;smtp&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;mailSettings&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;system.net&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;configuration&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;וכעת נוכל להריץ את הקוד שלנו בלי לפרט את כתובת ה-MailMessage.From בתוך הקוד, אלא הוא ילקח כברירת מחדל מתוך קובץ הקונפיגיורציה. &lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.DeliveryMethod = &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpDeliveryMethod&lt;/span&gt;&lt;font color="#323232"&gt;.PickupDirectoryFromIis;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;כל שעלינו לעשות כאן הוא לכתוב בקובץ הקונפיגיורציה שצורת משלוח דוא&amp;quot;ל הוא לשרת ה-SMTP של ה-IIS. &lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;// our App.config&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;xml&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:&amp;#39;Courier New&amp;#39;;"&gt;version&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;configuration&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;system.net&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;mailSettings&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;smtp&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:&amp;#39;Courier New&amp;#39;;"&gt;from&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;mail@JustinAngel.net&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;deliveryMethod&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;PickupDirectoryFromIis&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;smtp&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;mailSettings&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;system.net&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;configuration&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;// our code&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;הגענו למצב האופטימלי בשבילנו, כל האינפורמציה על ה-SmtpClient נלקחת מקובץ הקונפיגיורציה שלנו. &lt;/p&gt; &lt;p align="justify"&gt;נביט על המצב האפשרי השני - כתיבת דוא&amp;quot;ל לתיקיית Pickup כלשהי ונראה כיצד ניתן לשנות את קובץ הקונפיגיורציה שיעשה זאת עבורנו. &lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.DeliveryMethod = &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpDeliveryMethod&lt;/span&gt;&lt;font color="#323232"&gt;.SpecifiedPickupDirectory;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.PickupDirectoryLocation = &lt;/font&gt;&lt;span style="color:maroon;"&gt;@&amp;quot;c:\Exchange2003\Pickup&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt; &lt;p align="justify"&gt;בקובץ הקונפיגיורציה נכתוב כי שיטת המשלוח היא לספרייה ספציפית ונכתוב את מיקום הספרייה. &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;// our App.config&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;xml&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:&amp;#39;Courier New&amp;#39;;"&gt;version&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;configuration&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;system.net&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;mailSettings&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;smtp&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:&amp;#39;Courier New&amp;#39;;"&gt;from&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;mail@JustinAngel.net&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;deliveryMethod&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;SpecifiedPickupDirectory&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;specifiedPickupDirectory&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:&amp;#39;Courier New&amp;#39;;"&gt;pickupDirectoryLocation&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;c:\Exchange2003\Pickup&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;smtp&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;mailSettings&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;system.net&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;configuration&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;// our code&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt; &lt;p align="justify"&gt;ושוב הגענו למצב האופטימלי מבחינתנו שכל האינפורמציה הרלוונטית ל-SmtpClient נמצאת בקובץ קונפיגיורציה חיצוני. &lt;/p&gt; &lt;p align="justify"&gt;נביט על המצב האפשרי האחרון - שליחת דוא&amp;quot;ל דרך הרשת. &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;myMessage.From = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;MailAddress&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;mail@JustinAngel.net&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Host = &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;254.169.20.15&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Port = 25;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Credentials = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;NetworkCredential&lt;/span&gt;&lt;font color="#323232"&gt;(&lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;LanUsername&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;, &lt;/font&gt;&lt;span style="color:maroon;"&gt;&amp;quot;LanPassword&amp;quot;&lt;/span&gt;&lt;font color="#323232"&gt;);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt; &lt;p align="justify"&gt;במצב הזה נצטרך לשנות את שיטת המשלוח, כתובת ה-IP של השרת המקבל, הפורט דרכו עוברות ההודעות, שם המשתמש ברשת והסיסמה ברשת. &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;// our App.config&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;xml&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:&amp;#39;Courier New&amp;#39;;"&gt;version&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;configuration&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;system.net&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;mailSettings&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;smtp&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:&amp;#39;Courier New&amp;#39;;"&gt;from&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;mail@JustinAngel.net&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;deliveryMethod&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;Network&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;network&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:&amp;#39;Courier New&amp;#39;;"&gt;host&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;246.169.20.15&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;port&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;25&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:&amp;#39;Courier New&amp;#39;;"&gt;userName&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;LanUsername&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;password&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt;LanPassword&lt;/span&gt;&lt;font color="#323232"&gt;&amp;quot;&lt;/font&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;smtp&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;mailSettings&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;system.net&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:&amp;#39;Courier New&amp;#39;;"&gt;configuration&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;// our code &lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;MailMessage&lt;/span&gt;&lt;font color="#323232"&gt; myMessage = CreateVeryComplexMailMessage();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;font color="#323232"&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt; mySmtp = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#323232"&gt; &lt;/font&gt;&lt;span style="color:teal;"&gt;SmtpClient&lt;/span&gt;&lt;font color="#323232"&gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="margin:0in 0in 0pt;" align="left"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;font color="#323232"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;mySmtp.Send(myMessage);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="justify"&gt;ופעם נוספת הגענו למצב שבו כל האינפורמציה של ה-SmtpClient נמצאת בקובץ הקונפיגיורציה של הישום. &lt;/p&gt; &lt;p align="justify"&gt;המצב הזה שבו כל הנתונים על שיטת משלוח הדוא&amp;quot;ל נמצאים בקובץ קונפיגיורציה מאפשר לנו לשנות את אופי המשלוח בזמן פיתוח, תחזוקה ואפילו בזמן ריצה. בצורה זו, אם השרת דוא&amp;quot;ל עובר IP סה&amp;quot;כ משנים קובץ קונפיגיורציה חיצוני ולא צריך לקמפל מחדש את האפליקציה. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt;&lt;font face="Arial" size="4"&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;strong&gt;&lt;u&gt;לסיכום&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;בואו נביט על הדרישות של מבחן ההסמכה ונראה שענינו על כולם. &lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;Send electronic mail to a Simple Mail Transfer Protocol (SMTP) server for delivery from a .NET Framework application. (Refer System.Net.Mail namespace) &lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;MailMessage class&lt;/u&gt; - הכרנו את מחלקת MailMessage. שינינו נושא, תוכן, קידוד ועדיפות.&lt;/font&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;MailAddress class and MailAddressCollection class&lt;/u&gt; - כחלק מ-MailMessage משתמשים הרבה בכתובות דוא&amp;quot;ל (מענים רגילים, מענים מכותבים ומענים נסתרים, , כתובת From וכתובת ReplyTo). מחלקת ה-MailAdress מאפשרת להוסיף שם תצוגה לכתובת הדוא&amp;quot;ל אליה אנו שולחים דוא&amp;quot;ל. &lt;/font&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;SmtpClient class&lt;/u&gt; - מחלקת ה-SmtpClient היא המחלקה שאחראית לשלוח MailMessage. ראינו את שלושת המצבים האפשריים לשליחת דוא&amp;quot;ל ואת הקונפיגיורציה האפשרית לכל מצב. &lt;/font&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;SmtpPermission class, and SmtpPermissionAttribute class&lt;/u&gt; - לא עסקנו בזאת רבות, אבל נסתפק ונגיד שזו ההרשאה לשלוח דוא&amp;quot;ל לאפליקציה. &lt;/font&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;Attachment class, AttachmentBase class, and AttachmentCollection class&lt;/u&gt; - ראינו כיצד להוסיף Attachment ל-MailMessage. בנוסף, צריך לזכור שגם LinkedResource, גם AlternateView וגם Attachment יורשים מאותה מחלקה - AttachmenBase היות והם באמת כאלו &amp;quot;נספחים להודעות דוא&amp;quot;ל&amp;quot;. &lt;/font&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;SmtpException class, SmtpFailedReceipientException class, and SmtpFailedReceipientsException class&lt;/u&gt; - אלו הן החריגות האפשריות במשלוח דוא&amp;quot;ל. SmtpException היא החריגה הכללית. SmtpFailedReceipientExcpetion יורשת ממנו ומייצגת ששליחה אחת נכשלה (SmtpFailedReceipientsException היא החריגה שמספר שליחות נכשלו). &lt;/font&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;SendCompletedEventHandler delegate&lt;/u&gt; - זוהי המחלקה שאחראית להוספת מתודה לאירוע ה-SendCompleted לשליחה אסינכרונית. &lt;/font&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;LinkedResource class and LinkedResourceCollection class&lt;/u&gt; - מחלקת LinkedResource מייצגת נספח שאמור להיות מוצג כחלק מהתצוגה של AlternateView.&lt;/font&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;u&gt;AlternateView class and AlternateViewCollection class&lt;/u&gt; - מחלקת AlternateView מאפשרת לנו ליצור תצוגות שונות לדוא&amp;quot;ל שלנו בהתאם לסוגי פירמוט שונים. &lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/font&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&lt;font face="Arial" size="4"&gt;&lt;/font&gt;&lt;font face="Courier New" color="#323232"&gt;&lt;/font&gt;&lt;font face="Courier New" color="#0000ff"&gt;&lt;/font&gt;&lt;font face="Arial" size="4"&gt;ברכות ושבת שלום,&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font face="Arial" size="4"&gt;ג&amp;#39;סטין-יוסף אנג&amp;#39;ל&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=142909" width="1" height="1"&gt;</description></item><item><title>ד"ר דוט נט - ביקורת על ספר מצויין חדש בעברית</title><link>http://blogs.microsoft.co.il/blogs/justinangel/archive/2008/09/20/quot.aspx</link><pubDate>Sat, 20 Sep 2008 20:48:01 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:142907</guid><dc:creator>Justin-Josef Angel [MVP]</dc:creator><slash:comments>0</slash:comments><description>&lt;div dir="rtl" align="right"&gt;&lt;font face="Arial" size="4"&gt; &lt;p align="justify"&gt;שלום לכולם,&lt;/p&gt; &lt;p align="justify"&gt;&amp;quot;פיתוח אפליקציות שרת-לקוח בשפת C# .Net מאת ד&amp;quot;ר דוט נט, ASP.Net &amp;amp; Xml Web Services&amp;quot; (מהדורה ראשונה, 2006) מאת יוסף בלאן הינו ספר חדש על דוט נט. היחוד האמיתי של הספר הזה הוא שהסופר ישראלי, הספר נכתב בישראל ופורסם במקור בעברית. בתור ספר שמקורו בתרבות הישראלית יש לו באמת גישה שפונה הרבה יותר לקהל הישראלי. המנטליות הישראלית אומרת ככה &amp;quot;אם אני משקיע במשהו את הזמן שלי, אני מצפה לקבל את התמורה המקסימלית. בנוסף, אני לומד הכי טוב מדוגמאות ולא מדיבורים אקדמיים&amp;quot;.&lt;/p&gt; &lt;p align="center"&gt;&amp;nbsp;&lt;a href="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/ee6488e2b246_12372/image_2.png"&gt;&lt;img height="421" alt="image" src="http://blogs.microsoft.co.il/blogs/justinangel/WindowsLiveWriter/ee6488e2b246_12372/image_thumb.png" width="360" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="justify"&gt;אז בשביל ספר שנכתב ע&amp;quot;י ד&amp;quot;ר דוט נט מדובר בספר פרקטי לחלוטין (ואגב, בשביל גילוי נאות יוסף בלאן כותב באתרו ובכריכה האחורית שהוא בעל תואר ראשון ולא דוקטורט). הספר כתוב בצורה שתתקשו למצוא שתי עמודים שאין בהם דוגמת קוד ומבחינתי - נהדר. לימודים טכניים באסמפטיה זה יפה, אבל אם מישהו מקדיש כמה שעות לספר ומצפה לצאת עם ידע מסויים וניסיון כלשהו מן הראוי שזה מה שהוא יקבל (וככה בדיוק המצב בספר זה). &lt;/p&gt; &lt;p align="justify"&gt;בתחילת הספר הסופר כתב שני פרקי מבוא שספק אם הם באמת נדרשים לספר פרקטי שכזה. הפרק הראשון עובד על ה&amp;quot;היסטוריה&amp;quot; של האינטרנט וכיצד התפתחו פרוטוקלים וכך הלאה. הפרק השני (10 עמודים בערך) מציג דוגמה ראשונה ב-Visual studio .net בצורה שמשחק של כמה דקות בפעם הראשונה יקנו בערך את אותה מיומנות. דווקא הפרק השני קובע את הטון לכל הספר - &amp;quot;תנו לי את הזמן שלכם ואני אתן לכם ניסיון פרקטי שאתם צריכים כדי להתחיל לעבוד בדוט נט מחר&amp;quot;.&amp;nbsp; &lt;/p&gt; &lt;p align="justify"&gt;מהפרק השני עד הפרק העשירי במשך 300 עמ&amp;#39; ישנם 30 &amp;quot;פעילויות&amp;quot; (משימות בסדר גודל קטן אך מכובד) ואין-ספור דוגמאות קוד וצילומי מסך למכביר שמלמדים את הקורא את הבסיס ל-ASP.Net. הנושאים שמכוסים הם בכלליות: בניית טפסי ASP.Net, וולידציה ב-Webforms, גישה למסדי נתונים באמצעות ADO.Net, אפשרויות DataBinding לפקדי צד-שרת, שימוש ב-Application, Session &amp;amp; Cache, שימוש בקבצי Config ו-global.asax ועבודה עם אירועים בדוט נט. כל זה בצורה של ישר ולעניין - הנה המשימה, הנה מה שאנחנו יודעים, הנה הקוד והנה מה הוא אומר ומה המשמעות שלו. בצורה שמקבלים תמורה הוגנת לכל שנייה שמקדישים לספר.&lt;/p&gt; &lt;p align="justify"&gt;מהפרק ה-11 ועד פרק 16 האחרון מתחילים לרדת מהגישה של &amp;quot;הנה קוד - תקרא, תבין, תשחזר&amp;quot; שלפי התפיסה שלי פועלת הכי טוב בהתחלה ועוברים לגישה יותר מקצוענית. הגישה בפרקים האלו היא &amp;quot;אתם כבר יודעים על מה מדובר ואתם כבר מכירים את הפריימוורק, אז בואו נתחיל לעבוד כמו מקצוענים&amp;quot;. בצורה כללית בפרקים אלו הספר עוסק בהצגת שני נושאים חדשים - Object oriented programming ו-Webservices ובאמת לקרקע ולהשלים את הידע של הקורא ב-ASP.Net. &lt;/p&gt; &lt;p align="justify"&gt;השוני האמיתי של הפרקים האלו הוא גם בנושאים היותר מתקדמים, בגישה היותר מקצוענית אבל גם בצורה שבה אנו מתרגלים קוד. זה כבר לא &amp;quot;פעילויות&amp;quot;, אלא - פרוייקטים. במהלך הפרקים האלו נפתח שלושה (!) פרוייקטים לכל דבר. נקבל משימה בסדר גודל סימפטי-קטן, נתכנן איך לגשת לפרוייקט, מה נעשה פחות או יותר (תוכנית כללית) ונתחיל לבצע ולהשלים ידע טכני במהלך כתיבת המערכת. כל זה כמיקרוקוסמוס של פרוייקט אמיתי.&lt;/p&gt; &lt;p align="justify"&gt;ככה יוצא שהספר לא מביא לך ידע טכני כמו MSDN מתומצת אלא כישורי עבודה והשלמת ידע טכני בדיוק כמו בעולם האמיתי. אישית אני מאמין שלימוד טכני טוב ברמת חדר הכיתה תורמת לעבודה יותר מקצועית ברמת הפרוייקט בעבודה, ולכן מאוד התלהבתי מכל הרעיון של ביצוע פרוייקטים כחלק מהספר. &lt;/p&gt; &lt;p align="justify"&gt;עכשיו נעבור לנקודות הבעיותיות של הספר. הבעיה הראשונה וזאתי שקופצת ישר זה הפיסוק בעברית. אני מניח שמדובר באיזה סוגיה של כתיבת ספרים טכנים בעברית אבל לפני כל פסיק ונקודה יש רווח. ככה שבמקום &amp;quot;שלום. עולם&amp;quot; יופיע &amp;quot;שלום . עולם&amp;quot;. לוקח קצת זמן להתרגל לזה. הנקודה החלשה השנייה היא דווקא בסוף הספר. אני מכיר את זה שכותבים מסמכים ארוכים וכבר לקראת הסוף אין כוח ורק רוצים להראות את הדוגמאות, אבל ממש בפרוייקט האחרון שהמתכנת אמור ללמוד את שיטת השכבות ו-OOP הספר קצת נופל בהסברים ואפילו טיפה בדוגמאות. מדובר כאן בצורת עבודה אמיתית ומן הראוי שהייתה מועברת, מוסברת ומודגמת יותר. הנקודה השלישית החלשה של הספר היא שהוא נכתב בדוט נט 1.1 ולא בדוט נט 2.0 למרות שפורסם בתחילת 2006.&lt;/p&gt; &lt;p align="justify"&gt;הקטע עם דוט נט 1.1 ולא דוט נט 2.0 לא מהווה כזאת בעיה מנקודת הראות שלי מכמה סיבות. הראשונה היא שההבדלים בין דוט נט 1.1 לדוט נט 2.0 ברמות שהספר עובד בהם כמעט ובלתי נראים (שימוש ב-DataGrid במקום GridView למשל). הסיבה השנייה שבשאר הספרים בעברית על דוט נט מרגישים את ההבדל בין דוט נט 1.1 לדוט נט 2.0 בצורה מאוד ברורה היות והם צוללים כל-כך עמוק לתוך ניונסים טכניים מיותרים שהופך אותם למיושנים תוך שנה-שנתיים. דווקא הספר הזה מתמודד מאוד יפה עם העובדה שנכתב בפריימורק 1.1 ולא ב2.0. אבל, זה חוסם לספר שווקים אפשריים. למשל דיברתי עם מדריכים בכירים בדוט נט על הספר וחלקם באמת אמרו שהם לא יכולים להשתמש בספר ללמד דוט נט 2.0 היות והספר מלמד במוצהר דוט נט 1.1 (ואין סיכוי בנקודה הזאת לשכתב תוכניות לימוד לדוט נט 1.1). &lt;/p&gt; &lt;p align="justify"&gt;לסיכום, &amp;quot;פיתוח אפליקציות שרת-לקוח בשפת C# .Net מאת ד&amp;quot;ר דוט נט, ASP.Net &amp;amp; Xml Web Services&amp;quot; (מהדורה ראשונה, 2006) מאת יוסף בלאן הוא ספר לימוד דוט נט למתחילים מהמעלה הטובה ביותר. לא רק שמדובר על ספר מצויין, אלא גם מדובר על ספר שבה במנטליות ישראלית של עשייה להעביר לנו חומר וזה מאוד חשוב אצלי. בסה&amp;quot;כ הספר מקבל אצלי את הדירוג &amp;quot;מצויין&amp;quot; ו-&amp;quot;מומלץ מאוד למתחילים&amp;quot; והוא בהחלט ובלי שום תחרות ספר הלימוד הכי טוב בעברית לדוט נט. מבחינתי, לכל מי שמרגיש שהוא צריך יישור קו מקצועי או לכל מי שנכנס לתחום מדובר בספר מושלם ואני ממליץ אליו בלי עוררין.&lt;/p&gt; &lt;p align="justify"&gt;באתר הספר &lt;a href="http://www.drdotnet.com/"&gt;http://www.drdotnet.com&lt;/a&gt; ניתן להוריד תוכן עניינים מלא, פרק לדוגמה, לקבל פרטים ליצירת קשר עם הסופר (פלאפון אישי!), פורום לשאלת שאלות על הספר וכיצד להזמין עותק של הספר.&lt;/p&gt; &lt;p align="justify"&gt;שלחתי דוא&amp;quot;ל לחנויות הספרים סטימצקי ומיתוס, והוצאת הספרים הוד-עמי לביקורת ספר זו. מעניין אם אחת מהם תרים את הכפפה. &lt;/p&gt; &lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;ברכות ושבת שלום,&lt;/p&gt; &lt;p align="justify"&gt;ג&amp;#39;סטין-יוסף אנג&amp;#39;ל&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="1"&gt;הערה: אני רוצה להדגיש שלא קיבלתי תשלום ו\או טובות הנאה כלשהן מכתיבת ביקורת ספר זו ומדובר ביוזמה אישית בלבד.&lt;/font&gt; &lt;/p&gt;&lt;/font&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=142907" width="1" height="1"&gt;</description></item></channel></rss>
