Jeder kennt sie, die altbewährte MessagBox…

image

Um nach Fehlermeldungen zu suchen, tippt man sich hier oft die Finger in der Suchmaschine seines Vertrauens wund, denn Entwickler sind manchmal sehr gesprächig ;)

Dabei ist es so einfach… STRG + C zum kopieren der gesamten Meldung, klappt mit jeder MessageBox!

Hier einige Beispiele von lustigen Meldungen:

image

Roman

image

Ah ja und was wird nun übermittelt?

image

schade…

Nun ja, es gibt eine Vielzahl an lustigen Meldungen… Sonst wäre das Leben eines Entwicklers auch langweilig ;)

 

Ich habe eine neue Seite für Videos angelegt und es sind bereits 2 Filme â 4 Minuten über die AddIns “Webradio” und “Samsung Photoframe Control” online.

Es werden mit Sicherheit weitere folgen.

Viel spaß beim gucken!

 

Ennnnnnnnddddddddliiiiiicccccccccccccchhhhhhhhhhh… heute wurde auf der World Partner Conference ein erster langersehnter Einblick auf die neue Version des SharePoint Server gegeben.

Microsoft gibt einen Überblick auf den neuen SharePoint 2010 und damit auf einige der neuen Funktionen. Ich finde das Layout sehr ansprechend (Ribbons, neue Aufteilung der Elemente) aber auch die neuen Funktionen können sich sehen lassen! Sehr schön für Entwickler ist die Integration des SharePoints in Visual Studio 2010 (Server Explorer für Zugriff auf Listen, viele Projekt Templates) aber auch das Developer Dashboard, welches dem Entwickler sehr nützliche Informationen wie z.B. der Ladezeit des einzelnen Webparts liefert.

Alles in allem, finde ich, ist es ein sehr gelungenes Paket!

Wer sich selbst davon überzeugen mag, der findet hier 3 Videos:

Overview Sneak Peek
Developer Sneak Peek
IT Professional Sneak Peak

 

SharePoint bringt eine Reihe von eigenen Controls mit, die auch in den Eigenentwicklungen genutzt werden können. Die folgenden Seiten bieten einige Beispiele für die Einbindung und Benutzung dieser Controls.

René Hézser stellt eine Klasse mit diversen Webcontrols zur Verfügung, wobei das benötigte Control anhand des SPFieldType ermittelt wird

René Hézser zeigt außerdem die Verwendung von TextField bzw. RichTextField, welche “webübergreifend” agieren

Karine Bosch zeigt die einfache Verwendung von SharePoint User Controls und SharePoint Server Controls, unter anderem “InputForm Controls”, “DateTime Control”, “PeopleEditor Control”, “SPGridView Control”, “Validator Controls”…

Reza Alirezaei zeigt die Benutzung einer Standard SharePoint Toolbar in Webparts

 

Gerade hatte ich das Problem, einen Benutzer aus dem AD auszulesen und im Sharepoint zu berechtigen. Das Problem hierbei war, das man aus dem sAMAccountName nur den Teil des Namens bekommt und nicht etwa die Domain dazu.

Es wird aber für web.EnsureUser() genau der komplette Loginname benötigt.

Des Rätsels Lösung:

public static string GetLoginName(string alias)
{
            NTAccount nt = new System.Security.Principal.NTAccount(alias);
            SecurityIdentifier sid = (SecurityIdentifier)nt.Translate(typeof(SecurityIdentifier));
            nt = (NTAccount)sid.Translate(typeof(NTAccount));
            return nt.Value;
}

gefunden bei Dan

Hat mir jedenfalls eine Menge gefrickel erspart! Danke Dan

 

Ich freue mich euch mitteilen zu können, dass die neue Version des WHS Webradio Add-Ins nun zur Verfügung steht.
Danke für die bisherigen 588 Downloads!!! :)

Alle genauen Details könnte ihr hier nachlesen

 

English:

I am pleased to announce you, that the new version of the WHS Webradio add-in now available.
Thank you for the past 588 downloads! :)

Read more details

 

Heute um 13h startete offiziell die Windows Home Server Idea Challenge 2009 (AIC09) bei der home-server-blog.de und WeGotServed.co.uk gemeinsam nach den besten Ideen für Erweiterungen (Add-ins) des Windows Home Servers suchen.

Bis Ende des Monats kann man nun seine Ideen und Vorschläge unter http://www.home-server-blog.de/AIC09 einreichen. Die Idee des Gewinners wird nicht nur tatsächlich umgesetzt, sondern es gibt auch tolle Preise zu gewinnen, die aber noch bekannt gegeben werden.

Du hast eine tolle Idee für ein solches Add-In? Dann ab auf die Seite, registrieren und deinen Vorschlag einreichen. Mehr als das es nicht umgesetzt wird, kann ja nicht passieren und du hast obendrein die Chance etwas zu gewinnen!

Hier findest du den Blogeintrag von home-server-blog.de
Hier findest du den Blogbeitrag von WeGotServed.co.uk

 

Da ich momentan Urlaub habe, konnte ich mich heute aus Lust und Laune mal wieder dem Thema Silverlight etwas nähern, wobei folgende Anwendung entstanden ist…

Zuerst war es wichtig, das mein Server den Datenrequest zustimmt und das wird mit einer Policy, in der crossdomain.xml erledigt. Diese Datei muss sich im Root befinden und folgenden Inhalt besitzen:

crossdomain.xml:

  1. <?xml version="1.0" ?>
  2. <cross-domain-policy>
  3. <allow-access-from secure="true" domain="*" />
  4. </cross-domain-policy>

Anschließend konnte mit der Entwicklung begonnen werden. Zuerst definierte ich eine XML Datei, die die Datenstruktur für die Anzeige enthalten sollte. Diese persons.xml enthält die Personen, die als Visitenkarte zur Anzeige gebracht werden sollen.

persons.xml

  1. <?xml version="1.0" ?>
  2. <Persons>
  3. <Person>
  4. <Name>Daniel</Name>
  5. <Street>Musterstr. 6</Street>
  6. <Zip>12699</Zip>
  7. <Location>Berlin, Germany</Location>
  8. <Picture>http://servername/pfadzumbild.jpg</Picture>
  9. </Person>
  10. <Person>
  11. <Name>Katrin</Name>
  12. <Street>Musterstr. 6</Street>
  13. <Zip>10059</Zip>
  14. <Location>Berlin, Germany</Location>
  15. <Picture>http://servername/pfad2zumbild.jpg</Picture>
  16. </Person>
  17. </Persons>

Danach ging es nur noch ums Daten holen, auseinander pflücken und dem Control zuzuweisen…

Page.xaml.cs

  1. public partial class Page : UserControl
  2. {
  3. public Page()
  4. {
  5. InitializeComponent();
  6. LoadXml();
  7. }
  8.  
  9. private void LoadXml()
  10. {
  11. Uri uri = new Uri("http://host/pfadzur/persons.xml");
  12. WebClient client = new WebClient();
  13. client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
  14. client.DownloadStringAsync(uri);
  15. }
  16.  
  17. void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
  18. {
  19. //Wenn Fehler dann stoppen
  20. if (e.Error != null)
  21. {
  22. Debugger.Break();
  23. return;
  24. }
  25.  
  26. //sonst weiter
  27. StringReader sr = new StringReader(e.Result);
  28. XmlReader xr = XmlReader.Create(sr);
  29. XDocument xdoc = XDocument.Load(xr, LoadOptions.None);
  30.  
  31. var query = from item in xdoc.Descendants(XName.Get("Person"))
  32. select new karte()
  33. {
  34. PersonImage = item.Element(XName.Get("Picture")).Value,
  35. PersonLocation = item.Element(XName.Get("Location")).Value,
  36. PersonName = item.Element(XName.Get("Name")).Value,
  37. PersonStreet = item.Element(XName.Get("Street")).Value,
  38. PersonZip = item.Element(XName.Get("Zip")).Value
  39. };
  40. List<karte> visitenkarten = new List<karte>();
  41.  
  42. foreach (karte v in query.ToList())
  43. {
  44. visitenkarten.Add(v);
  45. }
  46.  
  47. VisitenkartenList.ItemsSource = visitenkarten;
  48. }
  49. }

Visitenkarten.xaml.cs

  1. public partial class Visitenkarte : UserControl
  2. {
  3. public Visitenkarte()
  4. {
  5. // Required to initialize variables
  6. InitializeComponent();
  7. this.Loaded += new RoutedEventHandler(Visitenkarte_Loaded);
  8. }
  9.  
  10. void Visitenkarte_Loaded(object sender, RoutedEventArgs e)
  11. {
  12. karte k = this.DataContext as karte;
  13. if (k != null)
  14. {
  15. _Name.Text = k.PersonName;
  16. _Strasse.Text = k.PersonStreet;
  17. _PLZ.Text = k.PersonZip;
  18. _Ort.Text = k.PersonLocation;
  19. if (!string.IsNullOrEmpty(k.PersonImage))
  20. {
  21. Uri uri = new Uri(k.PersonImage, UriKind.Absolute);
  22. ImageSource imgSource = new BitmapImage(uri);
  23. _image.Source = imgSource;
  24. }
  25. }
  26. }
  27. }

karte.cs

  1. public class karte
  2. {
  3.  
  4. public string PersonName { get; set; }
  5. public string PersonStreet { get; set; }
  6. public string PersonZip { get; set; }
  7. public string PersonLocation { get; set; }
  8. public string PersonImage { get; set; }
  9. }

Das ganze ist dann schnell fertig gestellt und in eine Seite eingebunden. Bitte achtet nicht auf’s Layout, ich bin Entwickler :)

Das Projekt kann im Downloadbereich heruntergeladen werden.

Achja... das ist mein Zeigefinger um Missverständnisse vorzubeugen :)

 

Und wieder sind 2 neue Blogs mit dem hauptsächlichen Thema "Entwicklung" ganz frisch im WWW.
Beide Blogs stammen von meinen Kollegen, die sich hauptsächlich den Themen Sharepoint - allgemein, Webparts, Webservices, Workflows oder Infopath widmen und mit Sicherheit einige tolle Code Snippets und Tipps dort veröffentlichen werden.

Steffen hat bereits seinen Blog mit dem Beitrag -> Image per WebService ins InfoPath Formular gestartet.

Markus ist mit seinem "nächsten Blog" schon um ein paar Beiträge reicher!

Markus Blog
Steffens Blog

na dann Happy Blogging

 

Wir hatten in den letzten beiden Tagen eine Menge Stress auf Arbeit, da bei 2 Kunden mehrere Webparts, nach dem einspielen der neuesten Updates, mit dem Fehler “401 Unauthorized” nicht mehr funktionierten. Natürlich war es bei beiden Kunden super dringend den Fehler zu lokalisieren und vor allem zu beheben!

Mit mehreren Leuten wurden alle Updates einzeln unter die Lupe genommen, im Internet nach der Fehlermeldung recherchiert und die Quellcodes angesehen.
Da die Entwicklungen von 3 verschiedenen Entwicklern stammten, war hier ein Folgefehler ausgeschlossen. Allerdings hatten alle Webparts dasselbe Problem – sie konnten keine entfernten Dateien per Request abrufen. Unterschiede gab es bei den Zugriffen:

  • RunWithElevatedPrivileges()
  • eigenständigen Impersonator (Username und Passwort)
  • nachladen ohne Authentifizierung

Die Request waren ebenfalls unterschiedlich:

  • Zugriff auf Webservice
  • Aufruf einer aspx Seite
  • Stream eines Bildes

Alle meldeten die oben genannte Fehlermeldung… aber lange Rede kurzer Sinn…

Nach der Recherche kam heraus, das der Fehler nicht von einem der Sharepoint Kumulativ Updates kam, sondern von .NET Framework 3.5 SP1.

Dieses Update führt einen Loopback Check ein, welcher jedoch nicht auf StandAlone Servern auftritt bzw. wenn der Servername und nicht die Loadbalancer URL aus dem Coding benutzt wird.

Eine mögliche Lösung die bei uns geholfen hat war folgende:

  • Hinzufügen des DisableLoopbackCheck in der Registry mit anschließendem Reboot der Server

Der KnowledgeBase Artikel ist hier zu finden: Microsoft KB Artikel

 

Leider hat die Lösungsfindung ein Weilchen gedauert und ich kann hiermit einigen helfen das Problem schneller zu lösen.

© 2012 Daniel Buschke - Blog Suffusion theme by Sayontan Sinha