Vergangene Livecasts und Podcasts!

[21.10.2007] Datenzugriff mit SubSonic | Details | Download
[16.09.2007] ASP.NET Teil 3 - Enterprise Umgebungen | Details | Download
[02.09.2007] ASP.NET Teil 2 - Benutzerdefinierte Erweiterungen | Details | Download
[26.08.2007] Windows Live ID Development | Details | Download
[19.08.2007] ASP.NET Teil 1 - Basiswissen | Details | Download
Alle Livecasts (Insgesamt 9) | Alle Podcasts (Insgesamt 7)


 Tuesday, March 20, 2007

Leider muss ich den heutigen Livecast kursfristig absagen. Einige terminliche Verschiebungen auf der Cebit führen leider dazu das ich heute Abend erst um 22:00 Uhr zu Hause bin.

Natürlich wird der Livecast nachgeholt. Eine Ankündigung dazu folgt in den nächsten Tagen.

posted on Tuesday, March 20, 2007 11:31:13 AM (W. Europe Standard Time, UTC+01:00) by Kai Gloth  #    Comments [0] Trackback
 Thursday, March 15, 2007
Der Mitschnitt des Livecasts vom 13. März 2007 zum Thema Web Services ist ab sofort verfügbar.

Details zum Livecast.
Livecast History und Download.

Am 20. März 2007 um 20:00 Uhr findet der nächste Livecast zum Thema Globalisierung statt. Dieser Livecast ist ja leider aus technischen Gründen vor einigen Wochen ausgefallen, und wird nun nachgeholt.

posted on Thursday, March 15, 2007 9:43:30 PM (W. Europe Standard Time, UTC+01:00) by Norbert Eder  #    Comments [0] Trackback
 Tuesday, March 13, 2007
Der Skypecast beginnt um 20:00 Uhr, nicht wie irrtümlich angezeigt wird, erst um 21:00 Uhr. Es besteht hier auf Seiten von Skype ein Zeitzonen-Problem welches ich durch eine Umstellung der Uhrzeit beim Skypecast aufgrund von technischen Problemen auch nicht beheben kann. Wollen wir mal hoffen, dass der Livecast ohne weitere Probleme über die Bühne geht. Aber Hilfe ist in Sicht.

Auf jeden Fall ein herzliches Dankeschön an alle, die das Problem gemeldet haben.


posted on Tuesday, March 13, 2007 7:30:40 PM (W. Europe Standard Time, UTC+01:00) by Norbert Eder  #    Comments [0] Trackback
 Thursday, March 08, 2007
Der Mitschnitt des Livecasts zum Thema Quality Assurance ist verfügbar. Informationen und Links zum Livecast sind in den Details zu finden.

Livecast Quality Assurance Download

posted on Thursday, March 08, 2007 1:03:07 PM (W. Europe Standard Time, UTC+01:00) by Norbert Eder  #    Comments [0] Trackback
 Monday, March 05, 2007
Bekanntlich ist letzte Woche der Livecast zum Thema Globalisierung ausgefallen. Dieser wird am 20.3.2007 um 20:00 Uhr nachgeholt und ausführlich behandelt.

Der morgige Livecast zum Thema Quality Assurance findet wieder normal (und hoffentlich ohne weitere Zwischenfälle) statt.

posted on Monday, March 05, 2007 7:51:41 AM (W. Europe Standard Time, UTC+01:00) by Norbert Eder  #    Comments [0] Trackback
 Wednesday, February 28, 2007
Leider hat uns gestern ereilt, wovon wir hofften, es möge nie eintreffen. Bedingt durch ein Skypecast-Problem konnte der Livecast nicht durchgeführt werden. Dies stieß nicht nur uns übel auf, sondern auch den Höhrern, die sich bereits auf den Livecast gefreut haben.

Was wir nun tun:
Wir sehen hier dringenden Handlungsbedarf und suchen daher eifrigst nach einer alternativen Lösung. Wer immer eine Anregung oder Idee hat, möge sich bitte mit uns in Verbindung setzen.

Wir hoffen dies schnellstmöglicht verbessern zu können.

PS: Der ausgefallene Livecast wird natürlich nachgeholt. Eine genaue Information diesbezüglich wird noch veröffentlicht.

posted on Wednesday, February 28, 2007 8:32:03 AM (W. Europe Standard Time, UTC+01:00) by Norbert Eder  #    Comments [0] Trackback
 Tuesday, February 27, 2007

Aufgrund der technischen Probleme seitens Skype hat sich die Url verändert. Sie lautet jetzt:

https://skypecasts.skype.com/skypecasts/skypecast/detailed.html?id_talk=483996

posted on Tuesday, February 27, 2007 8:05:08 PM (W. Europe Standard Time, UTC+01:00) by Kai Gloth  #    Comments [2] Trackback
Unsere Banner stehen nun zur Verfügung. Wer uns also unterstützen möchte, wird gebeten, einen der Banner in die jeweilige Homepage zu integrieren und zu verlinken. Im Falle einer Verlinkung wäre eine kurze Benachrichtigung erbeten.

Ein Banner aus der Serie:


posted on Tuesday, February 27, 2007 11:20:00 AM (W. Europe Standard Time, UTC+01:00) by Norbert Eder  #    Comments [0] Trackback
Eine kleine Erinnerung: Heute um 20:00 Uhr findet wieder wie gewohnt unser Livecast statt. Diesmal zum Thema Globalisierung. Durch die Show führt heute Kai Gloth. Genaue Informationen sind auf der Informationsseite zum 6. Livecast zu finden.

Ab Freischaltung des Livecasts kann man unter https://skypecasts.skype.com/skypecasts/skypecast/detailed.html?id_talk=481335 dem Livecast beitreten.

posted on Tuesday, February 27, 2007 8:44:17 AM (W. Europe Standard Time, UTC+01:00) by Norbert Eder  #    Comments [0] Trackback
 Friday, February 23, 2007
.NET Casts durfte die nächste Änderung erfahren. Einige haben es vielleicht schon gesehen, da es auf einer Seite bereits angekündigt wurde:

Nach reiflicher Überlegung haben wir uns entschieden, die Podcasts aufzulassen. Diese werden als nicht mehr angeboten. Der bereits aufgenommene bleibt also ein Unikat. Der Hintergrund liegt darin, dass wir unsere wöchentlichen Livecasts mit Themen ausgestattet haben und ein Livecast wesentlich dynamischer ist, als ein Podcast. Durch von Zuhörern gestellten Fragen erhöht sich der Praxisbezug. Dadurch ergibt sich für den Zuhörer ein weit verbesserter Nutzen.

Zusätzlich ergibt sich ein weiterer Vorteil - vor allem für die aktiven Teilnehmer - den wir an dieser Stelle jedoch noch nicht verraten möchte. Laßt euch überraschen.

Sollte ein Hörer/Leser diese Entscheidung nicht nachvollziehen können und sich weiterhin Podcasts wünschen, bitte einfach an uns unter Angabe von entsprechenden Argumenten wünschen.

Euer .NET Casts Team

posted on Friday, February 23, 2007 7:44:54 PM (W. Europe Standard Time, UTC+01:00) by Norbert Eder  #    Comments [0] Trackback
 Wednesday, February 21, 2007

Oft müssen Objekte zwischen unterschiedlichen Anwendungen (auch über Netzwerke hinweg) ausgetauscht oder einfach nur lokal persistiert (gespeichert) werden (um beispielsweise den Zustand eines Objektes zu speichern). Das Problem besteht nun darin, Objekte nicht ohne Weiteres transferiert werden können. Sie müssen dafür in eine spezielle Form gebracht werden. Dieser Vorgang nennt sich Serialisierung. Mögliche Formen (die durch das .NET Framework zur Verfügung gestellt werden) sind
  • Binary
  • XML
  • Soap

1. Binäre Serialisierung


Die binäre Serialisierung ist die Standardserialisierung im .NET Framework. Die Klasse BinaryFormatter stellt die Methoden Serializer() und Deserialize() zum Serialisieren bzw. Deserialisieren zur Verfügung.


1.1 Verwendete Namespaces in diesem Beispiel


  • System.IO
  • System.Runtime.Serialization
  • System.Runtime.Serialization.Formatters.Binary

1.2 Beispiel Standardverhalten

using System;
using System.Collections.Generic;
using System.Text;

namespace SerializationDemo
{
[Serializable]
public class Person
{
#region Members

private string _firstname = null;
private string _lastname = null;

#endregion Members

#region Properties

public string Firstname
{
get { return this._firstname; }
set { this._firstname = value; }
}

public string Lastname
{
get { return this._lastname; }
set { this._lastname = value; }
}

#endregion Properties
}
}

Mit folgendem Code kann die Serialisierung nun vorgenommen werden:

FileStream fs = new FileStream("SerializedObjekt.Binary.bin", FileMode.Create);

BinaryFormatter bf = new BinaryFormatter();

Person person = new Person();
person.Firstname = "Norbert";
person.Lastname = "Eder";

bf.Serialize(fs, person);

fs.Close();


1.3 Beispiel IDeserializationCallback

Durch die Implementierung des Interfaces IDeserializationCallback ist es möglich, direkt nach der Deserialisierung Aktionen einzuleiten. Als Beispiel wäre die Berechnung eines Wertes denkbar, der aufgrund seiner Berechnung nicht serialisiert wurde, da dieser Wert nach der Serialisierung neu generiert werden kann. Dadurch kann zusätzlich der Serialisierungs-Output klein gehalten werden, was bei einer Netzwerkübertragung von Vorteil ist.

Für dieses Beispiel wird eine Klasse verwendet, die einen berechneten Wert enthält. Dieser wird durch das Attribute [NonSerialized()] nicht serialisiert. Zu beachten ist, dass dieses Attribut nur auf Feld-Ebene vergeben werden kann. Eigenschaften können damit nicht gekennzeichnet werden.

[Serializable]
public class CalculatedData : IDeserializationCallback
{
#region Members

private int _number1 = 0;
private int _number2 = 0;

[NonSerialized()] public int Total = 0;

#endregion Members

#region Properties

public int Number1
{
get { return this._number1; }
set { this._number1 = value; }
}

public int Number2
{
get { return this._number2; }
set { this._number2 = value; }
}

#endregion Properties

#region IDeserializationCallback Members

public void OnDeserialization(object sender)
{
this.Total = this._number1 + this._number2;
}

#endregion
}

Zu beachten ist die Implementierung des Interfaces IDeserializationCallback. Dadurch muss die Methode OnDeserialization implementiert werden. Diese wird unmittelbar nach der Deserialisierung aufgerufen und übernimmt in diesem Beispiel die Berechnung des öffentlichen Feldes Total.

MemoryStream ms = new MemoryStream();

BinaryFormatter bf = new BinaryFormatter();
CalculatedData cd = new CalculatedData();
cd.Number1 = 1;
cd.Number2 = 3;

bf.Serialize(ms, cd);

ms.Position = 0;
CalculatedData cd2 = (CalculatedData)bf.Deserialize(ms);
Console.WriteLine(String.Format("Total: {0}", cd2.Total));

Wird dieser Code ausgeführt, ist ersichtlich, dass der Wert Total erfolgreich berechnet wurde.


1.4 Beispiel einer benutzerdefinierten Serialisierung


Eine Serialisierung kann der Entwickler auch selbst in die Hand nehmen. Neben einer kompletten Eigenentwicklung besteht auch die Möglichkeit das Interface ISerializeable zu implementieren. Dadurch steht die Methode GetObjectData zur Verfügung, die als Parameter ein SerializationInfo-Objekt und ein StreamingContext-Objekt erhält.

Dem SerializationInfo-Objekt kann nun mittels der Methode AddValue ein Key-Value-Paar übergeben werden. Diese Informationen werden dann durch den verwendeten Formatter zur Serialisierung herangezogen.

Des weiteren muss ein Konstruktor mit den genannten Parametern erstellt werden. Dieser wird in weiterer Folge für die Deserialisierung verwendet. Ebenfalls zu achten ist, dass ein parameterloser Konstruktor zur Verfügung steht.

[Serializable]
public class CustomSerializationPerson : ISerializable
{
#region Members

private string _firstname = null;
private string _lastname = null;

#endregion

#region Properties

public string Firstname
{
get { return this._firstname; }
set { this._firstname = value; }
}

public string Lastname
{
get { return this._lastname; }
set { this._lastname = value; }
}

#endregion

#region ISerializable Members

public void GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue("Firstname", this._firstname);
info.AddValue("Lastname", this._lastname);
}

public CustomSerializationPerson()
{
}

public CustomSerializationPerson(SerializationInfo info,
StreamingContext context)
{
this._firstname = info.GetString("Firstname");
this._lastname = info.GetString("Lastname");
}

#endregion
}

Diese Beispielklasse verfügt über alle notwendigen Methoden und Konstruktoren und kann daher zur Serialisierung verwendet werden:

MemoryStream ms = new MemoryStream();

BinaryFormatter bf = new BinaryFormatter();
CustomSerializationPerson csp = new CustomSerializationPerson();
csp.Firstname = "Norbert";
csp.Lastname = "Eder";

bf.Serialize(ms, csp);

ms.Position = 0;
CustomSerializationPerson cd2 = (CustomSerializationPerson)bf.Deserialize(ms);
Console.WriteLine(String.Format("Firstname: {0}, Lastname: {1}", csp.Firstname, csp.Lastname));


1.5 Serialisierungsereignisse


In der Standardserialisierung können insgesamt vier Ereignisse verwendet warden, um auf die Serialisierung bzw. auf die Deserialisierung zu reagieren.



Die Besonderheit dieser Ereignisse ist nun die, dass diese als Attribute gesetzt werden. Damit werden Methoden gekennzeichnet, die jeweils aufgerufen werden sollen. Zu beachten ist, dass diese Methoden als Rückgabetyp void besitzen müssen. Zusätzlich sind diese Ereignisse nur für die Standard-Serialisierung-Verfahren verfügbar.

Eine Erweiterung der Person-Klasse sieht wie folgt aus:

[Serializable]
public class Person
{
#region Members

private string _firstname = null;
private string _lastname = null;

#endregion Members

#region Properties

public string Firstname
{
get { return this._firstname; }
set { this._firstname = value; }
}

public string Lastname
{
get { return this._lastname; }
set { this._lastname = value; }
}

#endregion Properties

#region Private Methods

[OnDeserialized()]
private void OnDeserializedHandler(StreamingContext context)
{
if (this._firstname == null)
this._firstname = "[Not Given]";
if (this._lastname == null)
this._lastname = "[Not Given]";
}

#endregion
}

In diesem fall wird nach dem Deserialisierungsvorgang die Methode OnDeserializedHandler aufgerufen. In diesem werden die Member, wenn nicht gesetzt, auf [Not Given] gestellt. Wird nun bei der Serialisierung einer dieser Member nicht befüllt, kann das Ergebnis nach der Deserialisierung bewundert werden.


2. XML-Serialisierung

Die XML-Serialisierung zählt nicht zu den .NET Standardserialisierungs-Verfahren und ist daher auch in einem anderen Namespace zu finden:
  • System.Xml.Serialization

2.1 Beispiel

Die Verwendung dieses Serialisierungsverfahren funktioniert ähnlich zum BinaryFormatter. Gleich sind die angebotenen Methoden Serialize und Deserialize. Unter der Verwendung der bereits erwähnten Klasse Person sieht eine Serialisierung nun folgendermaßen aus:

System.IO.StringWriter sw = new StringWriter();
XmlSerializer xmlSer = new XmlSerializer(typeof(Person));

Person person = new Person();
person.Firstname = "Norbert";
person.Lastname = "Eder";

xmlSer.Serialize(sw, person);

StringBuilder sb = sw.GetStringBuilder();

Console.WriteLine(sb.ToString());

Die Ausgabe:

<?xml version="1.0" encoding="utf-16"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Firstname>Norbert</Firstname>
<Lastname>Eder</Lastname>
</Person>


2.2 XML-Serialisierungs-Attribute

Mit Hilfe von Attributen kann die XML Serialisierung gesteuert werden. Nachfolgend eine Übersicht der zur Verfügung stehenden Attribute.





3. Sonstiges

3.1.    Was passiert bei der Deserialisierung

Bei der Deserialisierung werden die zu deserialisierenden Daten streng sequentiell abgearbeitet und das ursprüngliche Objekt hergestellt. Dieser Vorgang kann mitunter sehr komplex werden. Dies ist dann der Fall, wenn das serialisierte Objekt Referenzen auf andere Objekte hält, welche ebenfalls serialisiert wurden. Dafür verwendet das .NET Framework einen ObjektManager. Dieser hält fest, was bereits deserialisiert wurde und welche Bereiche noch ausstehen. Hierbei wird zwischen zwei Arten von Verweisen unterschieden:
  • Rückwärtsverweis
  • Vorwärtsverweis

Ein Rückwärtsverweis kommt zustande, wenn ein referenziertes Objekt bereits deserialisiert wurde. Dieses ist mit einem Fixup versehen und wird daher nicht nochmals deserialisiert. Bei einem Vorwärtsverweis wurde das referenzierte Objekt noch nicht deserialisiert. Ist dieser Verweis deserialisiert, wird er als abgeschlossen markiert.


posted on Wednesday, February 21, 2007 10:15:51 AM (W. Europe Standard Time, UTC+01:00) by Norbert Eder  #    Comments [0] Trackback
 Tuesday, February 20, 2007

Der Mitschnitt des 5. Livecasts steht ab sofort zur Verfügung. Als Thema wurde die .NET Serialisierung recht ausführlich behandelt. Der Download ist dieses Mal etwas höher als die letzten Mitschnitte, da bewusst versucht wurde, die Qualität zu verbessern (sofern dies über Skypecasts möglich ist).

Heruntergeladen werden kann der Livecast unter DotNetCasts - Live!.

In Kürze werden wir ebenfalls einen Artikel zu diesem Thema bereitstellen, der das Besprochene zusammenfasst und anhand kleiner Beispiele die Verwendung zeigt.

 

 

posted on Tuesday, February 20, 2007 11:00:24 PM (W. Europe Standard Time, UTC+01:00) by Norbert Eder  #    Comments [0] Trackback
Heute um 20:00 Uhr findet der nächste Livecast statt. Diesmal dreht sich alles um das Thema .NET Serialisierung. Zusätzlich können natürlich auch wieder andere .NET betreffende Fragen gestellt werden. Eine vereinfachte Teilnahme ist ab der Freischaltung in der Box Nächste Livecasts unter dem Punkt Teilnehmen möglich.

Welche Punkte der .NET Serialisierung werden behandelt?

  • Allgemeine Grundlagen
  • Serialisierung / Deserialisierung (auch Internas)
  • Binary / XML
  • Benutzerdefinierte Serialisierung
  • und mehr
Wir freuen uns auch dieses Mal wieder auf eine rege Diskussion.

posted on Tuesday, February 20, 2007 3:53:27 PM (W. Europe Standard Time, UTC+01:00) by Norbert Eder  #    Comments [0] Trackback
 Monday, February 19, 2007
Aber natürlich!

In diesem Sinne dürfen wir voller Freude und Elan bekannt geben, dass sich unser Team verstärkt hat. Und nein, hier gesellt sich kein Nobody zu uns. Ein Vollblut-MVP für ASP.NET schimpft sich zukünftig .NET Casts-Mitglied. Lange Rede kurzer Sinn:



Peter Bucher
Microsoft MVP - Visual Developer ASP / ASP.NET
http://www.aspnetzone.de/blogs/peterbucher/default.aspx

Mit seinem Wissen und seinem Elan wird er uns tatkräftig unterstützen und weitere Verbesserungen bringen. Wir freuen uns sehr, dass Peter bei .NET Casts eingestiegen ist und uns, sowie unseren Lesern, Hörern und baldigen Sehern zur Seite steht.

Herzlich willkommen!

posted on Monday, February 19, 2007 8:30:05 PM (W. Europe Standard Time, UTC+01:00) by Norbert Eder  #    Comments [0] Trackback
Wer sich unseren ersten Podcast angehört hat, weiß, dass wir anstatt langer Links sogenannte Codes verwenden. Diese Codes können auf der Seite des Podcasts nachgeschlagen werden und liefern dann den entsprechenden Link auf die Ziel-Webseite.

Um dies ein wenig zu vereinfachen, gibt es ab sofort den .NET Casts Codes Resolver, der diese Aufgabe vereinfacht. Es handelt sich dabei um eine kleine Windows-Anwendung, die alle Informationen zu unseren Podcasts aktuell hält und auch sämtliche Codes bereitstellt. Für das Update sorgt dieses Tool von selbst. Genauere Informationen gibt es auf der Seite des .NET Casts Codes Resolver.

posted on Monday, February 19, 2007 12:33:44 PM (W. Europe Standard Time, UTC+01:00) by Norbert Eder  #    Comments [0] Trackback