<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>Wilko Waitz - Merksätze</title>
    <link>http://blog.waitz.biz/</link>
    <description>Es gibt keine perfekten Taten. Nur perfekte Absichten.&lt;br&gt;(Sylvia Plath)&lt;br&gt;
Der Weg in die Hölle ist gepflastert mit guten Absichten.&lt;br&gt;(Ben Sisko in DS Nine)</description>
    <language>en-us</language>
    <copyright>Wilko Waitz</copyright>
    <lastBuildDate>Sat, 26 Jan 2008 20:08:56 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>info@wwaitz.de</managingEditor>
    <webMaster>info@wwaitz.de</webMaster>
    <item>
      <trackback:ping>http://blog.waitz.biz/Trackback.aspx?guid=2459a677-dea5-420b-a9f0-e557d2e1f5f0</trackback:ping>
      <pingback:server>http://blog.waitz.biz/pingback.aspx</pingback:server>
      <pingback:target>http://blog.waitz.biz/PermaLink,guid,2459a677-dea5-420b-a9f0-e557d2e1f5f0.aspx</pingback:target>
      <dc:creator>Wilko Waitz</dc:creator>
      <wfw:comment>http://blog.waitz.biz/CommentView,guid,2459a677-dea5-420b-a9f0-e557d2e1f5f0.aspx</wfw:comment>
      <wfw:commentRss>http://blog.waitz.biz/SyndicationService.asmx/GetEntryCommentsRss?guid=2459a677-dea5-420b-a9f0-e557d2e1f5f0</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <b>Neues von der Front!</b>
        <br />
        <br />
Endlich, ich habe es geschafft. Die Debian-Installation hat wunderbar funktioniert
und das aus meiner Sicht geniale Installationsverfahren hat sofort für viel Freude
und Wiedererkennungseffekt gesorgt.<br /><br />
Nachdem ich alle benötigten Pakete installiert hatte; erstmal die Wohlfühlsoftware
ala vim und dann die Dinge zum Verrichten der Arbeit, konnte das Konfigurieren losgehen.
Zuerst wurde Kerberos konfiguriert, damit die Authentifizierung mit dem DC klappen
kann. Das bedeutet Realm einrichten, Passwordserver bekanntgeben und hoffen das es
funktioniert. Welch wunder, es ging 
<br /><br />
Als nächstes kam dann die winbind- und Sambakonfiguration dran. Mit korrektem Kerberos
eigentlich kein Problem aber man glaubt nicht, welcher Unsinn so im Netz kursiert.
Zum Teil von der ganz üblen Sorte. Nach einigem hin und her habe ich es dann zum laufen
bekommen.<br /><br />
Ich konnte den "Rechner" in der Domain anmelden und wbinfo -u listete mir alle Domainnutzer
auf. Der Zugrifftest vom Windowsclient funktionierte natürlich nicht; Mist. Die Rechner
wird korrekt aufgelistet und ein Blick auf die Freigaben offenbart mir das gewünschte
Bild. Leider erfordert er beim Aufrufen der Freigabe eine Authentifizierung. Hallo?
Genau das sollte doch nicht passieren!<br /><br />
Wie es immer ist: Es beginnt die Suche nach der Nadel im Heuhaufen.<br /><ul><li>
Kerberos (Check) 
</li><li>
Winbind - Test mit wbinfo -u und wbinfo -g (Check) 
</li><li>
Samba - Alles unnötige rausgelöscht, Kommentare entfernt - sieht gut aus (Check)</li></ul>
Nix geändert, kann nicht gehen. Mist!<br /><br />
Also habe ich den Computer wieder aus der Domain rausgeschmissen und ihn erneut hinzugefügt.
Nix geht. Test mit kinit und klist, ich bekomme gültige Tickets. Warum geht es nicht?
Nochmal die Sambakonfiguration durchschauen und alle Einstellungen welche auf Rechtebeschränkung
abzielen auskommentieren. Ups, es geht! Soviel zu obiger Behauptung: Alles unnötige
rausgelöscht.<br /><br />
Das Problem war letztlich eine Einstellung in der smb.conf. 
<br /><br />
valid users = %S<br /><br />
Hmm... komisch, überall wird es so empfohlen/angegeben. Wie dem auch sei, jetzt funktioniert
es erstmal. Warum %S nicht klappt muss und werde ich noch herausfinden.<br /><br />
Wenigstens kann ich, wenn auch nur auf Umwegen, einen neuen Merksatz ableiten:<br /><br /><i>Merksatz 4.0<br />
Wenn der Wagen nicht läuft, solltest du erst nach den Zündkerzen sehen und nicht gleich
den Motor austauschen.</i><br /><img width="0" height="0" src="http://blog.waitz.biz/aggbug.ashx?id=2459a677-dea5-420b-a9f0-e557d2e1f5f0" /></body>
      <title>Network Storage Link for USB - Aus Spass an der Freude II</title>
      <guid isPermaLink="false">http://blog.waitz.biz/PermaLink,guid,2459a677-dea5-420b-a9f0-e557d2e1f5f0.aspx</guid>
      <link>http://blog.waitz.biz/2008/01/26/NetworkStorageLinkForUSBAusSpassAnDerFreudeII.aspx</link>
      <pubDate>Sat, 26 Jan 2008 20:08:56 GMT</pubDate>
      <description>&lt;b&gt;Neues von der Front!&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
Endlich, ich habe es geschafft. Die Debian-Installation hat wunderbar funktioniert
und das aus meiner Sicht geniale Installationsverfahren hat sofort für viel Freude
und Wiedererkennungseffekt gesorgt.&lt;br&gt;
&lt;br&gt;
Nachdem ich alle benötigten Pakete installiert hatte; erstmal die Wohlfühlsoftware
ala vim und dann die Dinge zum Verrichten der Arbeit, konnte das Konfigurieren losgehen.
Zuerst wurde Kerberos konfiguriert, damit die Authentifizierung mit dem DC klappen
kann. Das bedeutet Realm einrichten, Passwordserver bekanntgeben und hoffen das es
funktioniert. Welch wunder, es ging 
&lt;br&gt;
&lt;br&gt;
Als nächstes kam dann die winbind- und Sambakonfiguration dran. Mit korrektem Kerberos
eigentlich kein Problem aber man glaubt nicht, welcher Unsinn so im Netz kursiert.
Zum Teil von der ganz üblen Sorte. Nach einigem hin und her habe ich es dann zum laufen
bekommen.&lt;br&gt;
&lt;br&gt;
Ich konnte den "Rechner" in der Domain anmelden und wbinfo -u listete mir alle Domainnutzer
auf. Der Zugrifftest vom Windowsclient funktionierte natürlich nicht; Mist. Die Rechner
wird korrekt aufgelistet und ein Blick auf die Freigaben offenbart mir das gewünschte
Bild. Leider erfordert er beim Aufrufen der Freigabe eine Authentifizierung. Hallo?
Genau das sollte doch nicht passieren!&lt;br&gt;
&lt;br&gt;
Wie es immer ist: Es beginnt die Suche nach der Nadel im Heuhaufen.&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Kerberos (Check) 
&lt;/li&gt;
&lt;li&gt;
Winbind - Test mit wbinfo -u und wbinfo -g (Check) 
&lt;/li&gt;
&lt;li&gt;
Samba - Alles unnötige rausgelöscht, Kommentare entfernt - sieht gut aus (Check)&lt;/li&gt;
&lt;/ul&gt;
Nix geändert, kann nicht gehen. Mist!&lt;br&gt;
&lt;br&gt;
Also habe ich den Computer wieder aus der Domain rausgeschmissen und ihn erneut hinzugefügt.
Nix geht. Test mit kinit und klist, ich bekomme gültige Tickets. Warum geht es nicht?
Nochmal die Sambakonfiguration durchschauen und alle Einstellungen welche auf Rechtebeschränkung
abzielen auskommentieren. Ups, es geht! Soviel zu obiger Behauptung: Alles unnötige
rausgelöscht.&lt;br&gt;
&lt;br&gt;
Das Problem war letztlich eine Einstellung in der smb.conf. 
&lt;br&gt;
&lt;br&gt;
valid users = %S&lt;br&gt;
&lt;br&gt;
Hmm... komisch, überall wird es so empfohlen/angegeben. Wie dem auch sei, jetzt funktioniert
es erstmal. Warum %S nicht klappt muss und werde ich noch herausfinden.&lt;br&gt;
&lt;br&gt;
Wenigstens kann ich, wenn auch nur auf Umwegen, einen neuen Merksatz ableiten:&lt;br&gt;
&lt;br&gt;
&lt;i&gt;Merksatz 4.0&lt;br&gt;
Wenn der Wagen nicht läuft, solltest du erst nach den Zündkerzen sehen und nicht gleich
den Motor austauschen.&lt;/i&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://blog.waitz.biz/aggbug.ashx?id=2459a677-dea5-420b-a9f0-e557d2e1f5f0" /&gt;</description>
      <comments>http://blog.waitz.biz/CommentView,guid,2459a677-dea5-420b-a9f0-e557d2e1f5f0.aspx</comments>
      <category>Betriebssystem;Merksätze</category>
    </item>
    <item>
      <trackback:ping>http://blog.waitz.biz/Trackback.aspx?guid=d9ccee2a-16ec-44e2-b1e8-d20f1167c171</trackback:ping>
      <pingback:server>http://blog.waitz.biz/pingback.aspx</pingback:server>
      <pingback:target>http://blog.waitz.biz/PermaLink,guid,d9ccee2a-16ec-44e2-b1e8-d20f1167c171.aspx</pingback:target>
      <dc:creator>Wilko Waitz</dc:creator>
      <wfw:comment>http://blog.waitz.biz/CommentView,guid,d9ccee2a-16ec-44e2-b1e8-d20f1167c171.aspx</wfw:comment>
      <wfw:commentRss>http://blog.waitz.biz/SyndicationService.asmx/GetEntryCommentsRss?guid=d9ccee2a-16ec-44e2-b1e8-d20f1167c171</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Versionsverwaltungen sind schon eine nette Sache. Insbesondere für mich, da ich zuweilen
an drei unterschiedlichen Rechnern entwickle. Auf diese Art und Weise habe ich immer
und überall den aktuellen Entwicklungsstand. Dumm nur, wenn man vergisst am Ende des
Tages seine Arbeitsergebnisse einzuchecken. Dann ist obiger Ansatz blanke Theorie.
 So geschehen am Wochenende.
</p>
        <br />
        <p>
Jetzt sitze ich hier, mehr als 600 km vom aktuellen Entwicklungsstand entfernt und
könnte in die Tischkante beisen. Ich stehe vor der Wahl:
</p>
        <br />
        <ul>
          <br />
          <li>
meinen Angehörigen am Telefon zu erläutern, wie sie die Arbeitsergebnisse in die Versionsverwaltung
bekommen oder 
<br /></li>
          <li>
erläutern wie man in der Firewall den Port für eine Remotedesktopsitzung öffnet 
<br /></li>
          <li>
die Arbeit doppelt zu machen. 
</li>
        </ul>
        <br />
        <p>
Egal welche Alternative ich wähle, es kostet mich Zeit und Nerven. Ich werde in der
Zukunft wieder auf das Tupel; externe Festplatte <strong>und</strong> Versionsverwaltung
umsteigen. Es könnte nur sein, das ich die Festplatte desöfteren vergesse. Aber davon
hört ihr zu gegebener Zeit. Nun noch den Merksatz, damit er sich einprägt und ich
vor solchen Unannehmlichkeiten in Zukunft verschont bleibe.
</p>
        <br />
        <p>
          <em>Merksatz 3.0<br />
Am Ende des Arbeitstages sind die Arbeitsergebnisse einzuchecken!</em>
        </p>
        <img width="0" height="0" src="http://blog.waitz.biz/aggbug.ashx?id=d9ccee2a-16ec-44e2-b1e8-d20f1167c171" />
      </body>
      <title>Versionsverwaltung und deren praktischer Einsatz</title>
      <guid isPermaLink="false">http://blog.waitz.biz/PermaLink,guid,d9ccee2a-16ec-44e2-b1e8-d20f1167c171.aspx</guid>
      <link>http://blog.waitz.biz/2007/11/05/VersionsverwaltungUndDerenPraktischerEinsatz.aspx</link>
      <pubDate>Mon, 05 Nov 2007 16:55:12 GMT</pubDate>
      <description>&lt;p&gt;
Versionsverwaltungen sind schon eine nette Sache. Insbesondere für mich, da ich zuweilen
an drei unterschiedlichen Rechnern entwickle. Auf diese Art und Weise habe ich immer
und überall den aktuellen Entwicklungsstand. Dumm nur, wenn man vergisst&amp;nbsp;am Ende&amp;nbsp;des
Tages seine Arbeitsergebnisse einzuchecken. Dann ist obiger Ansatz blanke Theorie.
&amp;nbsp;So geschehen am Wochenende.
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;
Jetzt sitze ich hier, mehr als 600 km vom aktuellen Entwicklungsstand entfernt und
könnte in die Tischkante beisen. Ich stehe&amp;nbsp;vor der Wahl:
&lt;/p&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;br /&gt;
&lt;li&gt;
meinen Angehörigen am Telefon zu erläutern, wie sie die Arbeitsergebnisse in die Versionsverwaltung
bekommen&amp;nbsp;oder 
&lt;br /&gt;
&lt;li&gt;
erläutern wie man in der Firewall den Port für eine Remotedesktopsitzung öffnet 
&lt;br /&gt;
&lt;li&gt;
die Arbeit doppelt zu machen. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;p&gt;
Egal welche Alternative ich wähle, es kostet mich Zeit und Nerven. Ich werde in der
Zukunft wieder auf das Tupel; externe Festplatte &lt;strong&gt;und&lt;/strong&gt; Versionsverwaltung
umsteigen. Es könnte nur sein, das ich die Festplatte desöfteren vergesse. Aber davon
hört ihr zu gegebener Zeit. Nun noch den Merksatz, damit er sich einprägt und ich
vor solchen Unannehmlichkeiten in Zukunft verschont bleibe.
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;em&gt;Merksatz 3.0&lt;br&gt;
Am Ende des Arbeitstages sind die Arbeitsergebnisse einzuchecken!&lt;/em&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.waitz.biz/aggbug.ashx?id=d9ccee2a-16ec-44e2-b1e8-d20f1167c171" /&gt;</description>
      <comments>http://blog.waitz.biz/CommentView,guid,d9ccee2a-16ec-44e2-b1e8-d20f1167c171.aspx</comments>
      <category>Merksätze;Softwareentwicklung;Täglicher Wahnsinn</category>
    </item>
    <item>
      <trackback:ping>http://blog.waitz.biz/Trackback.aspx?guid=f5b3e9a3-9bf7-4ff7-b69b-b5f8b3676992</trackback:ping>
      <pingback:server>http://blog.waitz.biz/pingback.aspx</pingback:server>
      <pingback:target>http://blog.waitz.biz/PermaLink,guid,f5b3e9a3-9bf7-4ff7-b69b-b5f8b3676992.aspx</pingback:target>
      <dc:creator>Wilko Waitz</dc:creator>
      <wfw:comment>http://blog.waitz.biz/CommentView,guid,f5b3e9a3-9bf7-4ff7-b69b-b5f8b3676992.aspx</wfw:comment>
      <wfw:commentRss>http://blog.waitz.biz/SyndicationService.asmx/GetEntryCommentsRss?guid=f5b3e9a3-9bf7-4ff7-b69b-b5f8b3676992</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h3>Warum dieser Beitrag
</h3>
Exceptionhandling ist zum Teil eine Frage der Philosophie und der Einstellung. Einige
behandeln Ausnahmen überhaupt nicht und andere Verfahren nach der <i>catch all</i> Philosophie.
Beides ist suboptimal.<br /><br /><h3>Wie sieht vernünftige Ausnahmebehandlung aus
</h3>
Grundsätzlich verfahre ich immer nach folgendenden Merksätzen:<br /><br /><i>Merksatz 2.0<br />
Behandle nur Ausnahmen, welche du auch lösen kannst.<br /><br /></i>Dieses Verfahren gaukelt dem Benutzer einer Bibliothek nicht vor, dass sie sich
im Normbereich bewegt. Weiterhin kann er für seinen Anwendungsfall geeignete Lösungsstrategien
implementieren. Handelt es sich nicht um eine Bibliothek, sondern um das eigentliche
Programm, erleichtert es das Testen und das Ermitteln von Grenzbereichen, welches
dann wiederrum die Ableitung von geeigneten Lösungsstrategien ermöglicht. Sowohl für
die Bibliotheken als auch für die Anwendung.<br /><i><br />
Merksatz 2.1<br />
Ausnahmen sind bei der Entwicklung eines Produktes notwendig und willkommen. Sie verbessern
die Qualität des Produktes, wenn sie frühzeitig auftreten können/dürfen.</i><br /><br />
Macht eine Anwendung von Log-Mechanismen Gebrauch, so ist nichts dagegen einzuwenden,
wenn Codeblöcke existieren, welche der <i>catch all</i> Philosophie folgen, um die
Ausnahme zu protokollieren. Wichtig ist nur, dass der Fehler an übergeordnete Schichten
weitergeleitet wird. Hierzu ein Beispiel:<br /><br /><pre style="FONT-SIZE: 11px; FONT-FAMILY: Courier New"><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">try</span><br />
{<br />
...<br />
}<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">catch</span>(
... )<br />
{<br />
...<br />
}<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">catch</span>(
Exception ex )<br />
{<br />
log.Error(<span style="FONT-SIZE: 11px; COLOR: rgb(102,102,102); FONT-FAMILY: Courier New; BACKGROUND-COLOR: rgb(228,228,228)">"Unbehandelte
Ausnahme"</span>, ex );<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">throw</span>;<br />
}</span><br /></pre><br /><p>
Im konkreten Beispiel wurde log4net verwendet. Wichtig für das Thema ist jedoch, das
der rethrow-Mechanismus von .NET verwendet wird.
</p><br /><h3>Wann sollen eigene Ausnahmen erzeugt werden
</h3>
Eigene Ausnahmen sind sinnvoll, wenn diese ausserhalb eines Exception-Blocks geworfen
werden. Sie testen beispielsweise ob die Parameter eines Methodenaufrufs innerhalb
eines gültigen Wertebereiches liegen. Dann können und sollten Sie bibliotheks- und
programmspezifische Ausnahmen werfen. Gern darf hier von vorhandenen Exceptions abgeleitet
werden. Im konkreten Fall und unter .NET von einer ArgumentException.<br /><br />
Das Erzeugen einer eigenen Ausnahme innerhalb eines Exceptionblocks sollte wohl überlegt
sein. Es erzeugt auf seiten des Nutzers zusätzlichen Aufwand, auslesen der InnerException,
und macht somit den Grund der Ausnahme nicht vollends klar. Es ermutigt den Entwickler,
die Programmsteuerung auf Basis von Ausnahmen vorzunehmen.<br /><br />
Sollte man sich dennoch für eigene Exceptiontypen innerhalb eines Exceptionblocks
entscheiden, so muß unbedingt die eigentliche Exception, als InnerException, weitergeleitet
werden. Andernfalls kann eine Fehlersuche sehr aufwändig werden.<br /><br /><h3>Fazit
</h3>
Die Ausnahmebehandlung ist ein wichtiger Bestandteil der Softwareentwicklung. Es bietet
sich an, zu Beginn des Entwicklungsprozesses, nur wenige Ausnahmen zu behandeln. Im
Verlauf der  Entwicklung, durch Testen, werden die Gründe für Fehler klarer und
können effektiver behandelt werden. Das Verstecken von  Fehlverhalten nützt niemanden
etwas, sondern führt zu nicht nachvollziehbaren Programmverhalten. Im schlechtesten
Fall nach der Auslieferung eines Produktes.<br /><br /><p></p><img width="0" height="0" src="http://blog.waitz.biz/aggbug.ashx?id=f5b3e9a3-9bf7-4ff7-b69b-b5f8b3676992" /></body>
      <title>Ein paar Gedanken zur Ausnahmebehandlung</title>
      <guid isPermaLink="false">http://blog.waitz.biz/PermaLink,guid,f5b3e9a3-9bf7-4ff7-b69b-b5f8b3676992.aspx</guid>
      <link>http://blog.waitz.biz/2007/03/02/EinPaarGedankenZurAusnahmebehandlung.aspx</link>
      <pubDate>Fri, 02 Mar 2007 15:33:31 GMT</pubDate>
      <description>&lt;h3&gt;Warum dieser Beitrag
&lt;/h3&gt;
Exceptionhandling ist zum Teil eine Frage der Philosophie und der Einstellung. Einige
behandeln Ausnahmen überhaupt nicht und andere Verfahren nach der &lt;i&gt;catch all&lt;/i&gt; Philosophie.
Beides ist suboptimal.&lt;br&gt;
&lt;br /&gt;
&lt;h3&gt;Wie sieht vernünftige Ausnahmebehandlung aus
&lt;/h3&gt;
Grundsätzlich verfahre ich immer nach folgendenden Merksätzen:&lt;br&gt;
&lt;br&gt;
&lt;i&gt;Merksatz 2.0&lt;br&gt;
Behandle nur Ausnahmen, welche du auch lösen kannst.&lt;br&gt;
&lt;br&gt;
&lt;/i&gt;Dieses Verfahren gaukelt dem Benutzer einer Bibliothek nicht vor, dass sie sich
im Normbereich bewegt. Weiterhin kann er für seinen Anwendungsfall geeignete Lösungsstrategien
implementieren. Handelt es sich nicht um eine Bibliothek, sondern um das eigentliche
Programm, erleichtert es das Testen und das Ermitteln von Grenzbereichen, welches
dann wiederrum die Ableitung von geeigneten Lösungsstrategien ermöglicht. Sowohl für
die Bibliotheken als auch für die Anwendung.&lt;br&gt;
&lt;i&gt;
&lt;br&gt;
Merksatz 2.1&lt;br&gt;
Ausnahmen sind bei der Entwicklung eines Produktes notwendig und willkommen. Sie verbessern
die Qualität des Produktes, wenn sie frühzeitig auftreten können/dürfen.&lt;/i&gt;
&lt;br&gt;
&lt;br&gt;
Macht eine Anwendung von Log-Mechanismen Gebrauch, so ist nichts dagegen einzuwenden,
wenn Codeblöcke existieren, welche der &lt;i&gt;catch all&lt;/i&gt; Philosophie folgen, um die
Ausnahme zu protokollieren. Wichtig ist nur, dass der Fehler an übergeordnete Schichten
weitergeleitet wird. Hierzu ein Beispiel:&lt;br&gt;
&lt;br&gt;
&lt;pre style="FONT-SIZE: 11px; FONT-FAMILY: Courier New"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;try&lt;/span&gt;
&lt;br&gt;
{&lt;br&gt;
...&lt;br&gt;
}&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;catch&lt;/span&gt;(
... )&lt;br&gt;
{&lt;br&gt;
...&lt;br&gt;
}&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;catch&lt;/span&gt;(
Exception ex )&lt;br&gt;
{&lt;br&gt;
log.Error(&lt;span style="FONT-SIZE: 11px; COLOR: rgb(102,102,102); FONT-FAMILY: Courier New; BACKGROUND-COLOR: rgb(228,228,228)"&gt;"Unbehandelte
Ausnahme"&lt;/span&gt;, ex );&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;throw&lt;/span&gt;;&lt;br&gt;
}&lt;/span&gt;
&lt;br&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;p&gt;
Im konkreten Beispiel wurde log4net verwendet. Wichtig für das Thema ist jedoch, das
der rethrow-Mechanismus von .NET verwendet wird.
&lt;/p&gt;
&lt;br /&gt;
&lt;h3&gt;Wann sollen eigene Ausnahmen erzeugt werden
&lt;/h3&gt;
Eigene Ausnahmen sind sinnvoll, wenn diese ausserhalb eines Exception-Blocks geworfen
werden. Sie testen beispielsweise ob die Parameter eines Methodenaufrufs innerhalb
eines gültigen Wertebereiches liegen. Dann können und sollten Sie bibliotheks- und
programmspezifische Ausnahmen werfen. Gern darf hier von vorhandenen Exceptions abgeleitet
werden. Im konkreten Fall und unter .NET von einer ArgumentException.&lt;br&gt;
&lt;br&gt;
Das Erzeugen einer eigenen Ausnahme innerhalb eines Exceptionblocks sollte wohl überlegt
sein. Es erzeugt auf seiten des Nutzers zusätzlichen Aufwand, auslesen der InnerException,
und macht somit den Grund der Ausnahme nicht vollends klar. Es ermutigt den Entwickler,
die Programmsteuerung auf Basis von Ausnahmen vorzunehmen.&lt;br&gt;
&lt;br&gt;
Sollte man sich dennoch für eigene Exceptiontypen innerhalb eines Exceptionblocks
entscheiden, so muß unbedingt die eigentliche Exception, als InnerException, weitergeleitet
werden. Andernfalls kann eine Fehlersuche sehr aufwändig werden.&lt;br&gt;
&lt;br /&gt;
&lt;h3&gt;Fazit
&lt;/h3&gt;
Die Ausnahmebehandlung ist ein wichtiger Bestandteil der Softwareentwicklung. Es bietet
sich an, zu Beginn des Entwicklungsprozesses, nur wenige Ausnahmen zu behandeln. Im
Verlauf der&amp;nbsp; Entwicklung, durch Testen, werden die Gründe für Fehler klarer und
können effektiver behandelt werden. Das Verstecken von&amp;nbsp; Fehlverhalten nützt niemanden
etwas, sondern führt zu nicht nachvollziehbaren Programmverhalten. Im schlechtesten
Fall nach der Auslieferung eines Produktes.&lt;br&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.waitz.biz/aggbug.ashx?id=f5b3e9a3-9bf7-4ff7-b69b-b5f8b3676992" /&gt;</description>
      <comments>http://blog.waitz.biz/CommentView,guid,f5b3e9a3-9bf7-4ff7-b69b-b5f8b3676992.aspx</comments>
      <category>.NET;Merksätze;Softwareentwicklung</category>
    </item>
    <item>
      <trackback:ping>http://blog.waitz.biz/Trackback.aspx?guid=85edafe3-9025-4ecc-91f2-1c5f0a8c0c3d</trackback:ping>
      <pingback:server>http://blog.waitz.biz/pingback.aspx</pingback:server>
      <pingback:target>http://blog.waitz.biz/PermaLink,guid,85edafe3-9025-4ecc-91f2-1c5f0a8c0c3d.aspx</pingback:target>
      <dc:creator>Wilko Waitz</dc:creator>
      <wfw:comment>http://blog.waitz.biz/CommentView,guid,85edafe3-9025-4ecc-91f2-1c5f0a8c0c3d.aspx</wfw:comment>
      <wfw:commentRss>http://blog.waitz.biz/SyndicationService.asmx/GetEntryCommentsRss?guid=85edafe3-9025-4ecc-91f2-1c5f0a8c0c3d</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Wenn eine ConfigSection mittels 
</p>
        <br />
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">System.Configuration.ConfigurationManager.GetSection(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"section"</span>)</span>
        </p>
        <br />
        <p>
eingelesen wird, ruft .NET den für die Section angegebenen Handler auf. Der Handler,
welcher vom Typ <em>IConfigurationSectionHandler</em> ist, gibt lt. Schnittstelle
ein Objekt vom Typ <em>object</em> zurück. Soweit so gut. 
</p>
        <br />
        <p>
Wer nun denkt, das beim nochmaligen Aufruf von <em>ConfigurationManager.GetSection(...)</em> der
Handler wiederholt aufgerufen wird, liegt falsch. Der ConfigurationManager gibt das
selbe Objekt wie beim ersten Aufruf zurück. Man sollte vermeiden, irgendwelche Verlaufsdaten
in diesem Konfigurationsobjekt abzulegen. Es kann sonst passieren das Daten ungewollt,
über Sessions hinweg, gemeinsam genutzt werden.
</p>
        <br />
        <p>
          <em>Merksatz 1.0:<br />
Die Section dient der Konfiguration von Geschäftsklassen und ist nicht selbst die
Geschäftsklasse. </em>
          <img alt=":-)" src="smilies/happy.gif" />
        </p>
        <img width="0" height="0" src="http://blog.waitz.biz/aggbug.ashx?id=85edafe3-9025-4ecc-91f2-1c5f0a8c0c3d" />
      </body>
      <title>Einlesen eines Konfigurationsbereiches</title>
      <guid isPermaLink="false">http://blog.waitz.biz/PermaLink,guid,85edafe3-9025-4ecc-91f2-1c5f0a8c0c3d.aspx</guid>
      <link>http://blog.waitz.biz/2007/01/08/EinlesenEinesKonfigurationsbereiches.aspx</link>
      <pubDate>Mon, 08 Jan 2007 08:51:05 GMT</pubDate>
      <description>&lt;p&gt;
Wenn eine ConfigSection mittels 
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;System.Configuration.ConfigurationManager.GetSection(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"section"&lt;/span&gt;)&lt;/span&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;
eingelesen wird, ruft .NET den für die Section angegebenen Handler auf. Der Handler,
welcher vom Typ&amp;nbsp;&lt;em&gt;IConfigurationSectionHandler&lt;/em&gt; ist, gibt lt. Schnittstelle
ein Objekt vom Typ &lt;em&gt;object&lt;/em&gt; zurück. Soweit so gut. 
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;
Wer nun denkt, das beim nochmaligen Aufruf von &lt;em&gt;ConfigurationManager.GetSection(...)&lt;/em&gt; der
Handler wiederholt aufgerufen wird, liegt falsch. Der ConfigurationManager gibt das
selbe Objekt wie beim ersten Aufruf zurück. Man sollte vermeiden, irgendwelche Verlaufsdaten
in diesem Konfigurationsobjekt abzulegen. Es kann sonst passieren das Daten ungewollt,
über Sessions hinweg, gemeinsam genutzt&amp;nbsp;werden.
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;em&gt;Merksatz 1.0:&lt;br&gt;
Die Section dient der Konfiguration von Geschäftsklassen und ist nicht selbst&amp;nbsp;die
Geschäftsklasse. &lt;/em&gt;&lt;img alt=":-)" src="smilies/happy.gif"&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.waitz.biz/aggbug.ashx?id=85edafe3-9025-4ecc-91f2-1c5f0a8c0c3d" /&gt;</description>
      <comments>http://blog.waitz.biz/CommentView,guid,85edafe3-9025-4ecc-91f2-1c5f0a8c0c3d.aspx</comments>
      <category>.NET;Merksätze</category>
    </item>
  </channel>
</rss>