במקרים שבהם אתם עובדים עם 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);
התחלתי לאחרונה לעבוד עם אפלקיציות 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 ובו מידע אודות התמונה (למשל הערות וכו').
כדי לכתוב ולקורא משם נתונים מקוד ניתן להוריד את
הספרייה הזו
אבל במידה וכל מה שאתם צריכים זה לכתוב למאפיין אחד תוכלו לכתוב את הקוד הבא.
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);
בתפוז שאלו כיצד אפשר לגרום להעלאת הקובץ ישירות אחרי שבחרו אותו ללא צורך בלחיצה על לחצן שיעשה 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;
}
בעבר כתבתי כיצד להעתיק ולשחזר בסיס נתונים ממחשב למחשב.
לפעמים הגרסאות של בסיס הנתונים בשני המחשבים שונים ובמקרה כזה נקבל הודעת שגיאה בזמן ניסיון לשחזר את בסיס הנתונים.
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 שבו תוכלו לקנפג מה יכנס לסקריפט והיכן הסקריפט יווצר, בסופו של תהליך תוכלו להריץ את הסקריפט גם על בסיס נתונים מגרסה שונה.
אתם מכירים את זה שלבוסים יש לפעמים דרישות מוזרות, קורה לכולם לא ?
קחו למשל את הדרישה הבאה.
לשלוח מייל כלשהו ולצרף למייל את תוכן הדף כפי שהוא עם כל הפרטים שהמשתמש כתב, כלומר - סוג של 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
כולם מכירים את השגיאה הידועה של "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 נצטרך לעשות מספר פעולות פשוטות.
ראשית על המחלקה שמכילה פונקצייה שנרצה להפעיל מקוד 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>