<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   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/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Daniel's Blog - .Net/C#</title>
    <link>http://s9y.daniel-rosendorf.de/</link>
    <description>Conquering .NET one character at a time ...</description>
    <dc:language>de</dc:language>
    <generator>Serendipity 1.5.5 - http://www.s9y.org/</generator>
    <pubDate>Mon, 17 Aug 2009 14:09:50 GMT</pubDate>

    <image>
        <url>http://s9y.daniel-rosendorf.de/templates/bulletproof/img/s9y_banner_small.png</url>
        <title>RSS: Daniel's Blog - .Net/C# - Conquering .NET one character at a time ...</title>
        <link>http://s9y.daniel-rosendorf.de/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>.NET Entity Framework und das Nachladen von Relationen</title>
    <link>http://s9y.daniel-rosendorf.de/archives/28-.NET-Entity-Framework-und-das-Nachladen-von-Relationen.html</link>
            <category>Development</category>
            <category>.Net/C#</category>
            <category>Windows</category>
    
    <comments>http://s9y.daniel-rosendorf.de/archives/28-.NET-Entity-Framework-und-das-Nachladen-von-Relationen.html#comments</comments>
    <wfw:comment>http://s9y.daniel-rosendorf.de/wfwcomment.php?cid=28</wfw:comment>

    <slash:comments>35</slash:comments>
    <wfw:commentRss>http://s9y.daniel-rosendorf.de/rss.php?version=2.0&amp;type=comments&amp;cid=28</wfw:commentRss>
    

    <author>nospam@example.com (Daniel Rosendorf)</author>
    <content:encoded>
    &lt;p&gt;Im Moment bin ich etwas mit dem EF zu Gange, allerdings tue ich mir etwas schwer (ist das erste Mal &lt;img src=&quot;http://s9y.daniel-rosendorf.de/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; ). Eine “Eigenart” von EF ist, dass alle Referenzen explizit geladen werden müssen.&lt;/p&gt; &lt;br /&gt;
&lt;p&gt;Ein Beispiel: Ein Customer hat mehrere Orders, genau eine CustomerAddress und jede Order hat eine DeliveryAddress.&lt;/p&gt; &lt;br /&gt;
&lt;p&gt;Das hier geht ohne Probleme:&lt;/p&gt; &lt;br /&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;var customers = from customer in entities.Customers&lt;br /&gt;
            select customer;&lt;br /&gt;
&lt;br /&gt;
foreach (Customer customer in customers) {&lt;br /&gt;
    Console.WriteLine(customer.CustomerNumber);&lt;br /&gt;
}&lt;/pre&gt; &lt;br /&gt;
&lt;p&gt;Das hier wirft allerdings eine NullReferenceException (bei :N Relationen würde hier eine leere, typisierte EntityCollection stehen):&lt;/p&gt; &lt;br /&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;var customers = from customer in entities.Customers&lt;br /&gt;
            select customer;&lt;br /&gt;
&lt;br /&gt;
foreach (Customer customer in customers) {&lt;br /&gt;
    Console.WriteLine(customer.CustomerAddress.Street);&lt;br /&gt;
}&lt;/pre&gt; &lt;br /&gt;
&lt;p&gt;Um die Exception (bzw. die leere Collection) zu vermeiden, muss die Suche auf die Customer Objekte so aussehen:&lt;/p&gt; &lt;br /&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;var customers = from customer in entities.Customers.Include(&quot;CustomerAddress&quot;)&lt;br /&gt;
            select customer;&lt;/pre&gt; &lt;br /&gt;
&lt;p&gt;Dadurch wird das CustomerAddress-Objekt automatisch mit geladen. So weit so gut ..&lt;/p&gt; &lt;br /&gt;
&lt;p&gt;Was passiert jetzt, wenn wir für alle Orders eines Customers z.B. die Straße der DeliveryAddress ausgeben wollen? &lt;/p&gt; &lt;br /&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;foreach (Customer customer in customers) {&lt;br /&gt;
    foreach (Order order in customer.Orders) {&lt;br /&gt;
        Console.WriteLine(order.DeliveryAddress.Street);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/pre&gt; &lt;br /&gt;
&lt;p&gt;Es passiert … gar nichts. Die Orders sind nämlich gar nicht geladen, deswegen wird die Schleife auch gar nicht betreten. Abhilfe schafft da die Load Methode der Orders Eigenschaft. Einmal Aufrufen und die Orders sind von der DB nachgeladen.&amp;#160; Alternativ lässt sich auch der Include erweitern: &lt;/p&gt; &lt;br /&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;var customers = from customer in entities.Customers.Include(&quot;CustomerAddress&quot;).Include(&quot;Orders&quot;)&lt;br /&gt;
            select customer;&lt;/pre&gt; &lt;br /&gt;
&lt;p&gt;&lt;strong&gt;ACHTUNG:&lt;/strong&gt; Diese Methode funktioniert nur für Properties am “Haupt”objekt der jeweiligen Abfrage (hier Customer).&lt;/p&gt; &lt;br /&gt;
&lt;p&gt;Dann sind wir im oberen Beispiel allerdings wieder bei der NullReferenceException. Bei :1 Relationen ist das Spiel etwas anders: Hier wird eine zusätzliche &amp;lt;Eigenschaft&amp;gt;Reference Eigenschaft in der entsprechenden Entity generiert (im vorliegenden Beispiel hat ein Objekt der Klasse Order neben der DeliveryAddress Eigenschaft auch noch eine DeliveryAddressReference Eigenschaft), bei der ihr dann wiederum die Load Methode nutzen könnt, um die Referenz auch tatsächlich zu laden.&lt;/p&gt; &lt;br /&gt;
&lt;p&gt;Insgesamt für mich etwas unintuitiv (doofes Wort &lt;img src=&quot;http://s9y.daniel-rosendorf.de/templates/default/img/emoticons/tongue.png&quot; alt=&quot;:-P&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;), aber wenn man weiß, worauf man achten muss, geht es. Auf jeden Fall vermeidet das EF dadurch erst mal unnötige DB-Abfragen.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 17 Aug 2009 15:41:18 +0200</pubDate>
    <guid isPermaLink="false">http://s9y.daniel-rosendorf.de/archives/28-guid.html</guid>
    <category>c#</category>
<category>development</category>
<category>.net</category>

</item>
<item>
    <title>100 Meter hürden mit .net MVC und Entity Framework auf IIS 6/SQL SERVER 2000</title>
    <link>http://s9y.daniel-rosendorf.de/archives/26-100-Meter-huerden-mit-.net-MVC-und-Entity-Framework-auf-IIS-6SQL-SERVER-2000.html</link>
            <category>Development</category>
            <category>.Net/C#</category>
            <category>Software</category>
            <category>Windows</category>
    
    <comments>http://s9y.daniel-rosendorf.de/archives/26-100-Meter-huerden-mit-.net-MVC-und-Entity-Framework-auf-IIS-6SQL-SERVER-2000.html#comments</comments>
    <wfw:comment>http://s9y.daniel-rosendorf.de/wfwcomment.php?cid=26</wfw:comment>

    <slash:comments>64</slash:comments>
    <wfw:commentRss>http://s9y.daniel-rosendorf.de/rss.php?version=2.0&amp;type=comments&amp;cid=26</wfw:commentRss>
    

    <author>nospam@example.com (Daniel Rosendorf)</author>
    <content:encoded>
    &lt;p&gt;Gestern war wieder einer dieser Tage, an denen kurz vor Feierabend etwas aufschlägt, dass dann ums Verrecken nicht funktionieren will. Im Falle des gestrigen Tages war es ein auf dem &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.asp.net/mvc/&#039;);&quot;  href=&quot;http://www.asp.net/mvc/&quot; target=&quot;_blank&quot;&gt;ASP.NET MVC Framework&lt;/a&gt; basierendes Web.&lt;/p&gt;  &lt;p&gt;Unser Kunde wollte sich das Web anschauen, allerdings war dieses bisher nicht auf einem Server installiert, sondern nur auf der Kiste des betroffenen Entwicklers (allerdings war der Quellcode natürlich in SVN, also keine Panik &lt;img src=&quot;http://s9y.daniel-rosendorf.de/templates/default/img/emoticons/tongue.png&quot; alt=&quot;:-P&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; ).&lt;/p&gt;  &lt;p&gt;Kurz zum Vergleich die Setups:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Setup des Entwicklers:&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;SQL Server 2005 Express&lt;/p&gt;    &lt;p&gt;Ins VS integrierter Webserver&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Setup des Stage Servers:&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;MS SQL Server 2000&lt;/p&gt;    &lt;p&gt;IIS 6&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Das Ganze ging zu wie beim Hürdenlauf:&lt;/p&gt;  &lt;h4&gt;1. Hürde: SQL Datenbank Version&lt;/h4&gt;  &lt;p&gt;Problem: Datenbank war nur lokal und im SQL Server 2005 Format vorhanden. &lt;/p&gt;  &lt;p&gt;Lösung: Die Datenbank auf dem Stage Server angelegt und per SQL Server Management Studio alles vom lokalen Server auf den Stage-Server rüber kopiert (hat übrigens erschreckend reibungslos funktioniert).&lt;/p&gt;  &lt;h4&gt;2. Hürde: Datenbank-Verbindung&lt;/h4&gt;  &lt;p&gt;Problem: In der &lt;em&gt;web.config&lt;/em&gt; ist natürlich nur der Verbindungsstring für die lokale DB des Entwicklers vorhanden.&lt;/p&gt;  &lt;p&gt;Lösung: Den entsprechenden String anpassen und gleich (um zukünftige Deployments zu erleichtern) das entsprechende Tag in der &lt;em&gt;web.config&lt;/em&gt; per &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/msdn.microsoft.com/de-de/library/ms228167.aspx&#039;);&quot;  href=&quot;http://msdn.microsoft.com/de-de/library/ms228167.aspx&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;configSource&lt;/em&gt;&lt;/a&gt; Attribut in eine eigene Datei auslagern. Hier muss ggf. nach dem Veröffentlichen drauf geachtet werden, dass auch die korrekte Datei im gleichen Verzeichnis liegt wie die &lt;em&gt;web.config&lt;/em&gt;, sonst fliegt eine Exception.&lt;/p&gt;  &lt;h4&gt;3. Hürde: 404 beim Aufrufen der Default.aspx nach dem Veröffentlichen des Webs&lt;/h4&gt;  &lt;p&gt;Problem: MVC Framework nicht auf dem Server installiert&lt;/p&gt;  &lt;p&gt;Lösung: Lokale Kopie des Frameworks beim Veröffentlichen mitgeliefert (bei den &lt;em&gt;References&lt;/em&gt; im entsprechenden Projekt die Eigenschaft &lt;em&gt;“Copy Local” von &lt;em&gt;System.Web.Mvc&lt;/em&gt; und ggf.&lt;em&gt;MvcSiteMap.Core&lt;/em&gt;&lt;/em&gt; auf &lt;strong&gt;true&lt;/strong&gt; setzen) (&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/haacked.com/archive/2008/11/03/bin-deploy-aspnetmvc.aspx&#039;);&quot;  href=&quot;http://haacked.com/archive/2008/11/03/bin-deploy-aspnetmvc.aspx&quot; target=&quot;_blank&quot;&gt;Quelle&lt;/a&gt;).&lt;/p&gt;  &lt;h4&gt;4. Hürde: Aufruf der Default.aspx funktioniert, aber es erscheint ein 404 nach der Umleitung auf die default Route (z.b. Home/Start)&lt;/h4&gt;  &lt;p&gt;Problem: Für die Routen wird die &lt;em&gt;aspnet_isapi.dl&lt;/em&gt; nicht aufgerufen, da keine &lt;em&gt;.aspx&lt;/em&gt; Erweiterung in der URL vorhanden ist.&lt;/p&gt;  &lt;p&gt;Lösung: Mögliche Lösungen findet ihr in &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/&#039;);&quot;  href=&quot;http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/&quot; target=&quot;_blank&quot;&gt;diesem Beitrag&lt;/a&gt; in &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/blog.codeville.net/&#039;);&quot;  href=&quot;http://blog.codeville.net/&quot; target=&quot;_blank&quot;&gt;Steve Sanderson&#039;s Blog&lt;/a&gt;. Wir haben uns in unserem Fall für Methode 1 entschieden, da es nur zu Demonstrationszwecken eingerichtet wurde.&lt;/p&gt;  &lt;h4&gt;5. Hürde: SqlException beim Ausführen eines Queries über das EF&lt;/h4&gt;  &lt;p&gt;Problem: .NET generiert beim Erstellen DB-spezifischen Code. Entwickelt wurde das Web auf SQL Server 2005 (wenn auch nur Express), veröffentlich wurde es auf einen Server mit SQL Server 2000 installiert, daher die SqlException.&lt;/p&gt;  &lt;p&gt;Lösung: Öffnet eure &lt;em&gt;.edmx&lt;/em&gt; Datei in einem XML Editor (über &lt;em&gt;Rechsklick –&amp;gt; “Open with …”&lt;/em&gt;&amp;#160; im Solution Explorer gehts auch im Visual Studio), sucht nach dem &amp;lt;Schema&amp;gt; Tag. Dieses sollte ein Attribut &lt;em&gt;ProviderManifestToken&lt;/em&gt; haben, welches im Falle des Providers &lt;em&gt;System.Data.SqlClient &lt;/em&gt;die Version des MS Sql Servers angibt. Diesen Wert ändert ihr auf &lt;strong&gt;2000&lt;/strong&gt;, veröffentlicht das Web erneut und es sollte funktionieren (&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/stackoverflow.com/questions/1031161/rownumber-is-not-a-recognized-function-name-incorrect-syntax-near-the-keyword&#039;);&quot;  href=&quot;http://stackoverflow.com/questions/1031161/rownumber-is-not-a-recognized-function-name-incorrect-syntax-near-the-keyword&quot; target=&quot;_blank&quot;&gt;Quelle&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;Und damit haben wir (nach knapp 3 Stunden Verspätung) das Ziel erreicht … und ziemlich viel gelernt &lt;img src=&quot;http://s9y.daniel-rosendorf.de/templates/default/img/emoticons/tongue.png&quot; alt=&quot;:-P&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 28 Jul 2009 12:25:00 +0200</pubDate>
    <guid isPermaLink="false">http://s9y.daniel-rosendorf.de/archives/26-guid.html</guid>
    <category>ASP.NET</category>
<category>Development</category>
<category>IIS</category>
<category>MVC</category>
<category>.NET</category>

</item>
<item>
    <title>Nochmal zu Events … (UPDATE 03.08.2009)</title>
    <link>http://s9y.daniel-rosendorf.de/archives/24-Nochmal-zu-Events-UPDATE-03.08.2009.html</link>
            <category>Development</category>
            <category>.Net/C#</category>
    
    <comments>http://s9y.daniel-rosendorf.de/archives/24-Nochmal-zu-Events-UPDATE-03.08.2009.html#comments</comments>
    <wfw:comment>http://s9y.daniel-rosendorf.de/wfwcomment.php?cid=24</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://s9y.daniel-rosendorf.de/rss.php?version=2.0&amp;type=comments&amp;cid=24</wfw:commentRss>
    

    <author>nospam@example.com (Daniel Rosendorf)</author>
    <content:encoded>
    &lt;p&gt;Gerade eben ist mir der folgende Code über den Weg gelaufen: &lt;/p&gt; &lt;br /&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;public Event ButtonClickClicked;&lt;br /&gt;
&lt;br /&gt;
private void RaiseButtonClicked() {&lt;br /&gt;
    ButtonClickClicked.Invoke(this, new EventArgs());&lt;br /&gt;
}&lt;/pre&gt; &lt;br /&gt;
&lt;p&gt;&lt;del&gt;Wenn ich sowas auch nur sehe. Ich bin absolut kein Genie, was Events etc. angeht, aber die simple Tatsache, dass das Event von außerhalb des Controls aufgerufen werden kann, in dem es implementiert ist, bereitet mir schon ziemlich heftige Kopfschmerzen.&lt;/del&gt;&lt;/p&gt; &lt;br /&gt;
&lt;p&gt;&lt;del&gt;Korrekt wäre das ganze so: &lt;/del&gt;&lt;/p&gt; &lt;br /&gt;
&lt;p&gt;&lt;strong&gt;UPDATE 03.08.2009: &lt;/strong&gt;Ich bin wirklich kein Genie, was Events angeht &lt;img src=&quot;http://s9y.daniel-rosendorf.de/templates/default/img/emoticons/tongue.png&quot; alt=&quot;:-P&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; Wie ich gerade durch Tests herausgefunden habe, lässt der Compiler es nicht zu, dass Events von außerhalb der Klasse/des Objekts aufgerufen werden, in der sie deklariert werden. Drauf gekommen bin ich über ein Tutorial zu Events. Nichts desto trotz finde ich den nachfolgenden Code sauberer, allerdings ist die Property für das Event dann optional.&lt;br /&gt;&lt;/p&gt; &lt;br /&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;private Event buttonClicked;&lt;br /&gt;
&lt;br /&gt;
public Event ButtonClicked {&lt;br /&gt;
    add {&lt;br /&gt;
        buttonClicked += value;&lt;br /&gt;
    }&lt;br /&gt;
    remove {&lt;br /&gt;
        buttonClick -= value;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
protected virtual void OnButtonClicked() {&lt;br /&gt;
    if (buttonClicked != null)&lt;br /&gt;
        buttonClicked(this, new EventArgs());&lt;br /&gt;
}&lt;/pre&gt; &lt;br /&gt;
&lt;p&gt;Somit &lt;del&gt;ist gewährleistet, dass das Event tatsächlich nur intern gefeuert wird und gleichzeitig&lt;/del&gt; können abgeleitete Klassen das Feuern des Events ggf. verhindern bzw. selbst intern auf das Event reagieren etc.&lt;br /&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 06 Jul 2009 12:07:47 +0200</pubDate>
    <guid isPermaLink="false">http://s9y.daniel-rosendorf.de/archives/24-guid.html</guid>
    
</item>
<item>
    <title>Kein .NET Framework verfügbar nach Installation vom IIS</title>
    <link>http://s9y.daniel-rosendorf.de/archives/23-Kein-.NET-Framework-verfuegbar-nach-Installation-vom-IIS.html</link>
            <category>Development</category>
            <category>.Net/C#</category>
            <category>Software</category>
            <category>Windows</category>
    
    <comments>http://s9y.daniel-rosendorf.de/archives/23-Kein-.NET-Framework-verfuegbar-nach-Installation-vom-IIS.html#comments</comments>
    <wfw:comment>http://s9y.daniel-rosendorf.de/wfwcomment.php?cid=23</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://s9y.daniel-rosendorf.de/rss.php?version=2.0&amp;type=comments&amp;cid=23</wfw:commentRss>
    

    <author>nospam@example.com (Daniel Rosendorf)</author>
    <content:encoded>
    &lt;p&gt;Vor (mittlerweile) einigen Wochen hab ich hier im Büro auf unserer Stage-Maschine CC.NET installiert und in diesem Zuge natürlich auch das Web-Dashboard getestet. Allerdings hat mich beim Aufruf des Dashboards immer nur ein 404 begrüßt, obwohl das virtuelle Verzeichnis korrekt eingerichtet war (zumindest dachte ich das). &lt;/p&gt;  &lt;p&gt;Ursache das Problems: ASP.NET bzw. das .NET Framework war im IIS nicht verfügbar. Nachdem ich Google befragt habe, fand ich folgende Lösung:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;.NET Framework SDK Command Prompt auf der betroffenen Maschine öffnen &lt;/li&gt;    &lt;li&gt;aspnet_regiis –i ausführen &lt;/li&gt;    &lt;li&gt;Im IIS-Manager unter “Webdiensterweiterungen” ASP.NET zulassen &lt;/li&gt;    &lt;li&gt;Im betroffenen virtuellen Verzeichnis unter “Eigenschaften” im Tab “ASP.NET” die gewünschte Version auswählen &lt;/li&gt;    &lt;li&gt;Im bevorzugten Browser das betroffene Verzeichnis aufrufen und (hoffentlich) glücklich werden &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Diese Problem tritt wenn ich mich Recht erinnere nur dann auf, wenn das .NET Framework &lt;strong&gt;vor &lt;/strong&gt;dem IIS installiert wird. Falls die Installation anders herum erfolgt, wird ASP.NET bei der Installation des .NET Frameworks automatisch im IIS registriert.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 08 Jun 2009 10:59:50 +0200</pubDate>
    <guid isPermaLink="false">http://s9y.daniel-rosendorf.de/archives/23-guid.html</guid>
    
</item>
<item>
    <title>DOS UND DONTS - 2 - Nicht serialisierbare Exceptions</title>
    <link>http://s9y.daniel-rosendorf.de/archives/19-DOS-UND-DONTS-2-Nicht-serialisierbare-Exceptions.html</link>
            <category>.Net/C#</category>
    
    <comments>http://s9y.daniel-rosendorf.de/archives/19-DOS-UND-DONTS-2-Nicht-serialisierbare-Exceptions.html#comments</comments>
    <wfw:comment>http://s9y.daniel-rosendorf.de/wfwcomment.php?cid=19</wfw:comment>

    <slash:comments>737</slash:comments>
    <wfw:commentRss>http://s9y.daniel-rosendorf.de/rss.php?version=2.0&amp;type=comments&amp;cid=19</wfw:commentRss>
    

    <author>nospam@example.com (Daniel Rosendorf)</author>
    <content:encoded>
    Vor ein paar Wochen hatte ich das merkwürdige Verhalten, dass ein Prozess sich beim Testen einfach verabschiedete ohne dass das Exception-Handling (implementiert mit Hilfe von Remoting und ausgeführt in einem eigenen Prozess) mir eine Exception zurück gab. Obwohl das Handling getestet war und einwandfrei funktionierte.&lt;br /&gt;
&lt;br /&gt;
Nachdem ich mir die Mühe gemacht hatte, den problematischen Prozess zu debuggen, fand ich heraus,  dass irgendein Held eine Custom Exception warf, die nicht serialisierbar war. Dabei sagt selbst Microsoft: &lt;blockquote&gt;Do make exceptions serializable. An exception must be serializable to work correctly across application domain and remoting boundaries.&lt;/blockquote&gt; (siehe &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/msdn.microsoft.com/en-us/library/ms229064(VS.80).aspx&#039;);&quot;  href=&quot;http://msdn.microsoft.com/en-us/library/ms229064(VS.80).aspx&quot; title=&quot;Designing Custom Exceptions on MSDN&quot;&gt;MSDN&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
Also, bitte merken:&lt;br /&gt;
&lt;strong&gt;DON&#039;T&lt;/strong&gt;: Custom Exceptions nicht serialisierbar implementieren&lt;br /&gt;
sondern:&lt;br /&gt;
&lt;strong&gt;DO&lt;/strong&gt;: ... könnt ihr auch ja wohl denken &lt;img src=&quot;http://s9y.daniel-rosendorf.de/templates/default/img/emoticons/tongue.png&quot; alt=&quot;:-P&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; 
    </content:encoded>

    <pubDate>Thu, 07 Aug 2008 15:33:39 +0200</pubDate>
    <guid isPermaLink="false">http://s9y.daniel-rosendorf.de/archives/19-guid.html</guid>
    <category>c#</category>
<category>development</category>
<category>dos and don'ts</category>
<category>exception handling</category>
<category>.net</category>

</item>
<item>
    <title>DOS UND DONTS - 1 - Events, die einen Handler benötigen</title>
    <link>http://s9y.daniel-rosendorf.de/archives/18-DOS-UND-DONTS-1-Events,-die-einen-Handler-benoetigen.html</link>
            <category>.Net/C#</category>
    
    <comments>http://s9y.daniel-rosendorf.de/archives/18-DOS-UND-DONTS-1-Events,-die-einen-Handler-benoetigen.html#comments</comments>
    <wfw:comment>http://s9y.daniel-rosendorf.de/wfwcomment.php?cid=18</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://s9y.daniel-rosendorf.de/rss.php?version=2.0&amp;type=comments&amp;cid=18</wfw:commentRss>
    

    <author>nospam@example.com (Daniel Rosendorf)</author>
    <content:encoded>
    &lt;p&gt;Vor nicht allzuvielen Minuten, ist mir eine NullReferenceException um die Ohren geflogen und meine erste Reaktion war WTF??!?. Da hatte doch tatsächlich jemand an einem Objekt ein Event implementiert, das ungefähr so ausgesehen haben muss (&lt;strong&gt;DON&#039;T&lt;/strong&gt;): &lt;/p&gt;  &lt;pre class=&quot;brush: csharp;&quot;&gt;private void OnEvent() {&lt;br /&gt;
    Event(this, new EventArgs());&lt;br /&gt;
}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt; Was daran falsch ist? Events sind von vorneherein im .NET Framework nie Mandatory (wäre ja auch übel, oder? &lt;img src=&quot;http://s9y.daniel-rosendorf.de/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; ), warum dann hier? Schließlich sollte es jeder Anwendung selbst überlassen sein, ob sie auf gewisse Events reagiert oder nicht und dieses Verhalten stellt sich wie gesagt gegen das komplette Framework. Naja ... &lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Die korrekte Implementierung wäre (&lt;strong&gt;DO&lt;/strong&gt;):&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;private void OnEvent() {&lt;br /&gt;
    if (Event != null)&lt;br /&gt;
        Event(this, new EventArgs());&lt;br /&gt;
}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt; Eigentlich geht es noch &amp;quot;korrekter&amp;quot;, aber dazu bei Gelegenheit vielleicht mal mehr ...&lt;/p&gt; 
    </content:encoded>

    <pubDate>Fri, 18 Jul 2008 09:18:00 +0200</pubDate>
    <guid isPermaLink="false">http://s9y.daniel-rosendorf.de/archives/18-guid.html</guid>
    <category>c#</category>
<category>development</category>
<category>dos and don'ts</category>
<category>events</category>
<category>.net</category>

</item>
<item>
    <title>WorkTimer Release 0.1</title>
    <link>http://s9y.daniel-rosendorf.de/archives/12-WorkTimer-Release-0.1.html</link>
            <category>.Net/C#</category>
    
    <comments>http://s9y.daniel-rosendorf.de/archives/12-WorkTimer-Release-0.1.html#comments</comments>
    <wfw:comment>http://s9y.daniel-rosendorf.de/wfwcomment.php?cid=12</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://s9y.daniel-rosendorf.de/rss.php?version=2.0&amp;type=comments&amp;cid=12</wfw:commentRss>
    

    <author>nospam@example.com (Daniel Rosendorf)</author>
    <content:encoded>
    &lt;br /&gt;
&lt;p&gt;Heute schreibe ich persönliche Geschichte: Der erste Release meiner eigenen &amp;quot;Software&amp;quot; &lt;img src=&quot;http://s9y.daniel-rosendorf.de/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;. Eher ein Tool und nur ein sehr kleines, aber jeder fängt mal klein an, oder?&lt;/p&gt;&lt;p /&gt;&lt;h4&gt;WorkTimer&lt;br /&gt; &lt;/h4&gt;&lt;p&gt;ist ein kleines Tool, das dem Nutzer erlaubt, bis zu 5 Timer anzulegen, um Zeit zu stoppen die man für verschiedene Aufgaben braucht. Dabei kann immer nur eine Aufgabe aktiv sein (wir sind nunmal nicht nultitaskingfähig &lt;img src=&quot;http://s9y.daniel-rosendorf.de/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;.&lt;/p&gt;&lt;p /&gt;&lt;p&gt;Nähere Infos findet ihr unter &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/trac.daniel-rosendorf.de&#039;);&quot;  title=&quot;http://trac.daniel-rosendorf.de&quot; href=&quot;http://trac.daniel-rosendorf.de&quot;&gt;http://trac.daniel-rosendorf.de&lt;/a&gt;, zum Download gehts &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/trac.daniel-rosendorf.de/trac/downloads&#039;);&quot;  title=&quot;http://trac.daniel-rosendorf.de/trac/downloads&quot; href=&quot;http://trac.daniel-rosendorf.de/trac/downloads&quot;&gt;hier&lt;/a&gt; und falls ihr zu dem Tool was zu sagen habt, könnt ihr das im entsprechenden &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/trac.daniel-rosendorf.de/trac/discussion&#039;);&quot;  title=&quot;http://trac.daniel-rosendorf.de/trac/discussion&quot; href=&quot;http://trac.daniel-rosendorf.de/trac/discussion&quot;&gt;Forum &lt;/a&gt;oder in den Kommentaren tun.&lt;/p&gt;&lt;p&gt;Achja, noch etwas: Trac ist zwar in diesem Fall auf Englisch, die Diskussionen dürfen aber natürlich auch in Deutsch geführt werden.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 21 Nov 2007 16:49:02 +0100</pubDate>
    <guid isPermaLink="false">http://s9y.daniel-rosendorf.de/archives/12-guid.html</guid>
    
</item>

</channel>
</rss>
