DCSIMG
June 2011 - Posts - שלמה גולדברג (הרב דוטנט) - net.rabbi@gmail.com

שלמה גולדברג (הרב דוטנט) - net.rabbi@gmail.com

מרצה בסלע ויועץ בעולם ה - net.

June 2011 - Posts

קבלת ה - Id החדש אחרי פעולת Insert בעבודה עם WCF Ria Services

 

במקרים שבהם אתם עובדים עם WCF Ria Services סביר להניח שאתם גם מפעילים פעולות Insert מול השירות על אובייקטים שיצרתם לוקלית.
 
לרוב נרצה לקבל את ה - Id שנוצר בבסיס הנתונים בחזרה מהפונקציה.
 
כדי לעשות זאת נכתוב קוד כזה:
 

Work item = new Work()

{

    // set all properties           

};

 

_context.Works.Add(item);

_context.SubmitChanges(so =>

    {

        // work.Id is now the id from server

    }, null);

The provided URI scheme 'file' is invalid; expected 'http'.

 

התחלתי לאחרונה לעבוד עם אפלקיציות silverlight (יחד עם כל הבאזז על html5, אני עדיין סובר שיש מקום ל - silverlght וזה לא יעלם כזה מהר מהנוף)
 
אחד הדברים הנהדרים זה WCF Ria Services - מה שעוזר בעבודה עם entity framework.
 
לפתע קבלתי את ההודעה הבאה:
 
The provided URI scheme 'file' is invalid; expected 'http'.
Parameter name: via
 
 
 לאחר חיפוש בגוגל מצאתי שבטעות הגדרתי את ה - startup project לאפליקציית ה - silverlight ולא לאתר ה - web שמארח אותו.

כתיבה למאפיינים של תמונה מקוד

 

לקבצי תמונה יש במאפיינים שלהם טאב שנקרא Details ובו מידע אודות התמונה (למשל הערות וכו').
 
כדי לכתוב ולקורא משם נתונים מקוד ניתן להוריד את הספרייה הזו
 
אבל במידה וכל מה שאתם צריכים זה לכתוב למאפיין אחד תוכלו לכתוב את הקוד הבא.
 
 
אנחנו משתמשים במחלקת PropertyItem ומשתמשים בפונקציות GetPropertyItem, SetPropertyItem של Image.
 
 
 

Image img = Image.FromFile(imageFilePath);

PropertyItem item = img.GetPropertyItem(0X9C9C);

string value = Encoding.Unicode.GetString(item.Value);

 

item.Value = Encoding.Unicode.GetBytes(comment);

item.Len = item.Value.Length;

img.SetPropertyItem(item);

img.Save(imageFilePath2);

Posted: Jun 21 2011, 12:15 PM by Shlomo | with no comments
תגים:, ,

העלאת קובץ לשרת ישירות אחרי הבחירה שלו

 

בתפוז שאלו כיצד אפשר לגרום להעלאת הקובץ ישירות אחרי שבחרו אותו ללא צורך בלחיצה על לחצן שיעשה PostBack.
 
כמובן שאפשר להשתמש ב - FileUplaod של ajax contorl toolkit.
 
 
במידה ומשתמשים בפקד של asp.net ניתן לפתור את זה בצורה הבאה:
 
1. לשים לחצן שלא רואים אותו (ע"י style).
 
2. להרשם לפונקציה של onchange ב - FileUpload.
 
3. ללחוץ מ - js על הלחצן המוסתר.
 
 
הקוד יראה כך:
 

<asp:FileUpload runat="server" ID="fu" onchange="doCustomPostBack()"></asp:FileUpload>

<asp:Button ID="btn1" runat="server" OnClick="save_file" Style="display: none" />

 

    <script>

        function doCustomPostBack() {

            document.getElementById('btn1').click();

        }

    </script>

 

 

protected void save_file(object sender, EventArgs e)

{

    byte[] data = fu.FileBytes;

}

Back Up and Restore database (sql server with different versions)

 

בעבר כתבתי כיצד להעתיק ולשחזר בסיס נתונים ממחשב למחשב.
 
לפעמים הגרסאות של בסיס הנתונים בשני המחשבים שונים ובמקרה כזה נקבל הודעת שגיאה בזמן ניסיון לשחזר את בסיס הנתונים.
 
System.Data.SqlClient.SqlError: The database was backed up on a server running version 10.50.1600. That version is incompatible with this server, which is running version 10.00.1600. Either restore the database on a server that supports the backup, or use a backup that is compatible with this server. (Microsoft.SqlServer.Smo)
 
 
איתמר ריבר עזר לי והפנה אותי לאופצייה של יצירת סקריפט בעזרת wizrad שיוצר קובץ סקריפט שמייצר את בסיס הנתונים כולו, ואז אין בעיית גרסאות.
 
השלבים הם:
 
קליק ימין על בסיס הנתונים.
 
בחירה ב - tasks.
 
בחירה ב - generate script
 
ייפתח wizrad שבו תוכלו לקנפג מה יכנס לסקריפט והיכן הסקריפט יווצר, בסופו של תהליך תוכלו להריץ את הסקריפט גם על בסיס נתונים מגרסה שונה.

Attach web page to email

 

אתם מכירים את זה שלבוסים יש לפעמים דרישות מוזרות, קורה לכולם לא ?
 
קחו למשל את הדרישה הבאה.
לשלוח מייל כלשהו ולצרף למייל את תוכן הדף כפי שהוא עם כל הפרטים שהמשתמש כתב, כלומר - סוג של Print Screen.
 
אבל היות שבוסים הם בוסים, ואם אחרי שמתווכחים איתם על המוזרות שבדרישה שלהם עדיין הם מתעקשים אז צריך לבצע את הבקשות שלהם.
 
הדרך לעשות זאת היא לא מסובכת.
 
(בדוגמא כאן אני יוצא מתוך הנחה שאתם מכירים כיצד שולחים מיילים מקוד)
 
 
 
ראשית צריך לקבל את קוד ה - html הסופי, ואת זה ניתן לקבל במתודה render
 

StringBuilder sb = new StringBuilder();

StringWriter stringWriter = new StringWriter(sb);

HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);

base.Render(htmlTextWriter);

string htmlText = sb.ToString();

writer.Write(htmlText);

 
כעת צריך להמיר את הטקסט למערך של בתים (כך שיהיה ניתן לצרף אותו למייל)
 

byte[] htmlData = Encoding.Default.GetBytes(htmlText);

 
ועכשיו אפשר לצרף אותו
 

Attachment attachment = new Attachment(new MemoryStream(htmlData), "fileName.html");

// attach attachment to mail, send mail using smtpClient

 
Posted: Jun 09 2011, 09:35 PM by Shlomo | with 3 comment(s)
תגים:, , ,

The type or namespace name could not be found (are you missing a using directive or an assembly reference?) - Visual Studio 2010

 

כולם מכירים את השגיאה הידועה של "The type or namespace name 'ProjectName' could not be found (are you missing a using directive or an assembly reference?)"
 
אבל לפעמים אנחנו עוישם reference בין שני פרוייקטים שלנו והוא נותן משום מה את השגיאה הזאת.
 
במאפיינים של הפרוייקט ב - Visual studio 2010 יש אפשרות להגדיר את סוג ה - framework, עובר net 4.0 ניתן להגדיר net 4.0 או net 4.0 Client Profile,
 
במידה והפרויקט שלכם הוא מסוג Client Profile ייתכן שאין לו הרשאות להפעיל ולייצר מחלקות שונות, ל מה שאתם צריכים לעשות זה לשנות את סוג הפרוייקט ל - Net 4.0 והכול יבוא על מקומו בשלום.

הפעלת פונקציה ב - Silverlight מתוך קוד javascript

 

תודה לאיתמר ריבר על העזרה בפוסט זה.
 
 
כדי להפעיל פונקציה בקוד ה - silverlight מתוך ה - javascript נצטרך לעשות מספר פעולות פשוטות.
 
ראשית על המחלקה שמכילה פונקצייה שנרצה להפעיל מקוד JS נשים attribute בשם ScriptableType
 

[ScriptableType]

public class MyLogicClass

{

 

}

 
על כל פונקציה שנרצה להפעיל מ - JS נשים ScriptableMemeber
 

[ScriptableMember]

public bool IsTextOk(string str)

{

    return str == "str";

}

 
דבר אחד נוסף, ב - Application_Startup (בקובץ App.xaml.cs) נוסיף את הקוד הבא.
 

HtmlPage.RegisterScriptableObject("LogicClass", new MyLogicClass());

 
 
כעת בדף ה - html שמארח את ה -silverlight נכתוב את הקוד הבא:
 

function callSilverlight() {

    var obj = document.getElementById('silverObj');

    var res = obj.Content.LogicClass.IsTextOk("str");

    alert(res);

}

 
חשוב לשים לב שכברירת מחדל ה - object של ה - silverlight לא מקבל id, ואנחנו צריכים לתת לו id כדי שנוכל להפעיל את הפונקציות שלו.
 
 
במידה וה - silverlight מתארח בדומיין אחר, כלומר אובייקט ה - silverlight מגיע מדומיין אחד ודף ה - html שמארח אותו יושב בדומיין אחר, נצטרך להגדיר בקובץ manifest שמותר להפעיל פונקציות מצד הלקוח.
 
קובץ ה - manifest יושב תחת תיקיית Properties והוא נקרא AppManifest.xml.
 
 
 

<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        ExternalCallersFromCrossDomain="ScriptableOnly"

>

    <Deployment.Parts>

    </Deployment.Parts>

</Deployment>