<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Code-Inside Blog</title>
	
	<link>http://code-inside.de/blog</link>
	<description>.NET &amp; C# Blogging...</description>
	<lastBuildDate>Mon, 06 Sep 2010 21:47:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Code-insideBlog" /><feedburner:info uri="code-insideblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>HowTo: Zeitgesteuerte &amp; wiederkehrende Funktionen in .NET &amp; ASP.NET</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/eoEOuXOh9iw/</link>
		<comments>http://code-inside.de/blog/2010/09/06/howto-zeitgesteuerte-wiederkehrende-funktionen-in-net-asp-net/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 21:47:16 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Timer]]></category>
		<category><![CDATA[Timers]]></category>
		<category><![CDATA[Zeit]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/09/06/howto-zeitgesteuerte-wiederkehrende-funktionen-in-net-asp-net/</guid>
		<description><![CDATA[
Wir hatten in einem Projekt die Anforderung, dass alle X-Minuten oder Sekunden ein bestimmte SQL Abfrage ausgeführt wird und je nach Ergebnis die Daten verarbeitet werden. Dies kann man etwas “dirty” mit einer while(true) Schleife und Thread.Sleep bauen, oder man nutzt einen Timer.
 
Beispiel Szenario
Als kleines Beispiel wollen wir eine Konsolenanwendung bauen, die aller 10 [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "HowTo: Zeitgesteuerte &#38; wiederkehrende Funktionen in .NET &#38; ASP.NET", url: "http://code-inside.de/blog/2010/09/06/howto-zeitgesteuerte-wiederkehrende-funktionen-in-net-asp-net/" });</script>]]></description>
			<content:encoded><![CDATA[<p><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image1038.png" width="134" height="134" /></p>
<p>Wir hatten in einem Projekt die Anforderung, dass alle X-Minuten oder Sekunden ein bestimmte SQL Abfrage ausgeführt wird und je nach Ergebnis die Daten verarbeitet werden. Dies kann man etwas “dirty” mit einer while(true) Schleife und Thread.Sleep bauen, oder man nutzt einen Timer.</p>
<p> <span id="more-2825"></span>
<p><strong>Beispiel Szenario</strong></p>
<p>Als kleines Beispiel wollen wir eine Konsolenanwendung bauen, die aller 10 Sekunden auf der Kommandozeile was ausgibt.</p>
<p><strong>“Dirty” Variante</strong></p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:aff75203-b58c-48bd-b4d3-217615c6b02a" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">
            while (true)
            {
                Thread.Sleep(1000);
                Console.WriteLine("Bla!");
            }
</pre>
</div>
<p>Diese Variante geht, ist aber nicht besonders edel. Und besonders wenn man zwei oder drei Sachen nach einer bestimmten Zeit machen will, kommt man wahrscheinlich nicht weit.</p>
<p><strong>Timer im .NET Framework</strong></p>
<p>Genau für solche Zwecke gibt es im .NET Framework mehrere Timer Klassen. Ein etwas älterer <a href="http://msdn.microsoft.com/en-us/magazine/cc164015.aspx">MSDN Artikel</a> beschreibt 3 Vertreter:</p>
<ul>
<li><a href="http://msdn.microsoft.com/de-de/library/system.windows.forms.timer(VS.80).aspx">System.Windows.Forms.Timer</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx">System.Timers.Timer</a></li>
<li><a href="http://msdn.microsoft.com/de-de/library/system.threading.timer(VS.80).aspx">System.Threading.Timer</a></li>
</ul>
<p>Am Ende des Artikels findet sich ein guter Vergleich:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1039.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb222.png" width="523" height="209" /></a> </p>
<p>Der “System.Windows.Forms.Timer” kommt für mich eigentlich nur in Windows.Forms Anwendungen in Frage.</p>
<p><strong>Interessant ist der Unterschied zwischen “System.Timers.Timer” und “System.Threading.Timer”.</strong></p>
<p>Der Timer im “Threading” Namespace ist ohne weiteres zutun nicht thread safe. System.Timers.Timer baut intern auf den System.Threading.Timer auf. Für einfache Sachen ist der System.Timers.Timer sehr einfach. Hier der Link zu einer kleinen <a href="http://stackoverflow.com/questions/1416803/system-timers-timer-vs-system-threading-timer">Stackoverflow-Diskussion</a>.</p>
<p><strong>Variante mit System.Timers.Timer</strong></p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:67d14628-1490-4bd2-8a93-e2c134a8aa90" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Timers;

namespace Timers.ConsoleApp
{

    class Program
    {

        static void Main(string[] args)
        {
            Timer timer = new Timer();
            timer.Interval = 1000;
            timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
            timer.Enabled = true;

            Console.ReadLine();
        }

        static void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            Console.WriteLine("Elapsed!");
        }
    }
}
</pre>
</div>
<p>Je nach Interval wird das entsprechende Event aufgerufen. Es wird ein Thread aus dem Threadpool genommen.</p>
<p><strong>Noch eine andere Herangehensweise: AutoResetEvent</strong></p>
<p>Mir bis vor kurzem ein total unbekannte Klasse: <a href="http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent.aspx">AutoResetEvent</a></p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c56fc62e-794c-42bb-80dd-0f0446f11a6e" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">            AutoResetEvent _isStopping = new AutoResetEvent(false);
            TimeSpan waitInterval = TimeSpan.FromMilliseconds(1000);

            for (; !_isStopping.WaitOne(waitInterval); )
            {
                Console.WriteLine("Bla!");
            }
</pre>
</div>
</p>
<p>Im Grunde sieht es so aus wie die while(true) Geschichte. Funktioniert wahrscheinlich auch ähnlich <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Weitere Varianten werden in dieser <a href="http://stackoverflow.com/questions/2822441/system-timers-timer-threading-timer-vs-thread-with-whileloop-thread-sleep-for-p">Stackoverflow-Diskussion</a> vorgestellt.</p>
<p><strong>Timer in ASP.NET Applikationen</strong></p>
<p>In meinem Beispiel gehe ich von einer Konsolenapplikation aus, aber könnte man sowas auch in einer ASP.NET Applikation machen? Jein.</p>
<p>Stackoverflow selbst soll wohl über einen <a href="http://www.codeproject.com/KB/aspnet/ASPNETService.aspx">kleinen Trick</a> so einen “Background-Job” implementiert haben: <a href="http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/">Easy Background Tasks in ASP.NET</a></p>
<p><strong>Der Trick </strong>besteht darin ein Item für eine bestimmte Dauer in den Cache zu legen. Läuft die Zeit ab, wird ein Event geworfen. In diesem Event wird die zeitgesteuerte Aktion ausgelöst und man hinterlegt wieder ein neues Item im Cache – und so weiter… </p>
<p>Das Problem: Im Normalfall fährt sich irgendwann der IIS Prozess runter und dann kann man da keine Aktionen mehr damit machen.</p>
<p><strong>Viele Variante, was macht man nun?</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1040.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb223.png" width="128" height="146" /></a> </p>
<p>Am einfachsten kommt mir der <a href="http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx">System.Timers.Timer</a> vor. In ASP.NET Applikationen würde ich Abstand von zeitgesteuerten Sachen nehmen, da man nicht genau kalkulieren kann, wann der AppPool sich runterfährt. Besser einen Windows Service nehmen und dort über den Timer gehen – außer es geht nicht anders und man bastelt mit den anderen Varianten <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Wahrscheinlich…</strong></p>
<p>… gibt es noch weit mehr Varianten. Wie macht ihr irgendwelche zeitgesteuerten Jobs? Gut wäre natürlich eine skalierbare Lösung. Man kann das natürlich auch <a href="http://code-inside.de/blog/2010/04/21/howto-scheduled-tasks-mit-schtasks-lokal-remote-per-kommandozeile-administrieren/">per Scheduled Task</a> und einem Konsolenprogramm lösen, aber elegant ist das ja auch nicht <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Wo meine Gedanken gerade Richtung Multithreading abschweifen: Richtig kompliziert wird es ja in Desktop-Apps bei multithreaded Geschichten wieder in den UI Thread zu schreiben – das ist aber ein anderes Thema <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Also, wie macht ihr das? <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong><a href="http://code-inside.de/files/democode/timers/timers.zip">[ Download Democode ]</a></strong></p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=HowTo%3A+Zeitgesteuerte+%26amp%3B+wiederkehrende+Funktionen+in+.NET+%26amp%3B+ASP.NET&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F09%2F06%2Fhowto-zeitgesteuerte-wiederkehrende-funktionen-in-net-asp-net%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/eoEOuXOh9iw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/09/06/howto-zeitgesteuerte-wiederkehrende-funktionen-in-net-asp-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/09/06/howto-zeitgesteuerte-wiederkehrende-funktionen-in-net-asp-net/</feedburner:origLink></item>
		<item>
		<title>Fix: VS2008 WebApp auf IIS 7.5 “Unable to start debugging” Http 500.19</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/JJseksIhAJ0/</link>
		<comments>http://code-inside.de/blog/2010/09/06/fix-vs2008-webapp-auf-iis-7-5-unable-to-start-debugging-http-500-19/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 20:39:04 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Fix]]></category>
		<category><![CDATA[IIS 7.5]]></category>
		<category><![CDATA[VS2008]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/09/06/fix-vs2008-webapp-auf-iis-7-5-unable-to-start-debugging-http-500-19/</guid>
		<description><![CDATA[Der Post reiht sich in die “Blöder Fehler? Hier eine Lösung” Kategorie ein. Leider kann ich den Fehler auf meinem Laptop nicht nachstellen, daher beschreib ich trotzdem was bei einem Kollegen geholfen hat und was überhaupt das Problem war.
 

Szenario:
Wir haben eine größere ASP.NET MVC Anwendung, welche mit .NET Framework 3.5 läuft. Lokal nutzen wir [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Fix: VS2008 WebApp auf IIS 7.5 &#8220;Unable to start debugging&#8221; Http 500.19", url: "http://code-inside.de/blog/2010/09/06/fix-vs2008-webapp-auf-iis-7-5-unable-to-start-debugging-http-500-19/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image1037.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb221.png" width="108" height="104" /></a>Der Post reiht sich in die “Blöder Fehler? Hier eine Lösung” Kategorie ein. Leider kann ich den Fehler auf meinem Laptop nicht nachstellen, daher beschreib ich trotzdem was bei einem Kollegen geholfen hat und was überhaupt das Problem war.</p>
<p> <span id="more-2816"></span>
</p>
<p><strong>Szenario:</strong></p>
<p>Wir haben eine größere ASP.NET MVC Anwendung, welche mit .NET Framework 3.5 läuft<a href="http://code-inside.de/blog/2009/03/19/howto-iis7-als-development-server-im-visual-studio-2008-einrichten/">. Lokal nutzen wir den IIS als Webserver</a>. Wir entwickeln noch mit VS2008. Nun hat der Kollege .NET 4.0 installiert und etwas damit rumexperimentiert.</p>
<p><strong>Problem:</strong></p>
<p>Jetzt wollte er wieder an der ASP.NET MVC Anwendung weiter entwickeln. Allerdings bekam er diese Meldung: <em>HTTP 500.19 “Unable to start debugging on the web server.”</em></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1035.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb219.png" width="608" height="568" /></a> </p>
<p><strong>Das Problem war:</strong></p>
<p>Durch die .NET 4.0 Installation hat er auch bei der “Default Web Site” im IIS den .NET 4.0 Application Pool ausgewählt und auch die Webanwendung lief im IIS unter diesem Application Pool. </p>
<p><strong>Lösung:</strong></p>
<p>Einfach von der Anwendung den App Pool wieder auf den Default App Pool wechseln. Dies geht unter “Rechtsklick” auf die Anwendung (oder Web Site) –&gt; … verwalten –&gt; Erweiterte Einstellungen”</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1036.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb220.png" width="244" height="167" /></a> </p>
<p> Jetzt klappt es auch wieder mit dem Debugging.</p>
<p><strong>Bei mir nicht reproduzierbar :/</strong></p>
<p>Auf meinem Notebook hier habe ich nur VS2010 und dort konnte ich das Problem nicht nachstellen. Mit VS2008 ist es mir aber gelungen. Warum das so war? Keine Ahnung. Wer das Problem hat, kann es ja mal versuchen <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=Fix%3A+VS2008+WebApp+auf+IIS+7.5+%26ldquo%3BUnable+to+start+debugging%26rdquo%3B+Http+500.19&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F09%2F06%2Ffix-vs2008-webapp-auf-iis-7-5-unable-to-start-debugging-http-500-19%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/JJseksIhAJ0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/09/06/fix-vs2008-webapp-auf-iis-7-5-unable-to-start-debugging-http-500-19/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/09/06/fix-vs2008-webapp-auf-iis-7-5-unable-to-start-debugging-http-500-19/</feedburner:origLink></item>
		<item>
		<title>Unterschied von HttpModule &amp; HttpHandler?</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/hh6Jgar3QUs/</link>
		<comments>http://code-inside.de/blog/2010/08/09/unterschied-von-httpmodule-httphandler/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 21:47:03 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[HttpHandler]]></category>
		<category><![CDATA[HttpModule]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/08/09/unterschied-von-httpmodule-httphandler/</guid>
		<description><![CDATA[Manche Sachen sind so trivial, dass man gar nicht mehr nachschaut. Da wird mal von einem “HttpModule” geredet (grundsätzlich sind “Module” ja so oder so immer ein gutes Schlagwort   ) oder von einem “HttpHandler”. Damit ich mir endlich mal merken kann, was genau die Unterscheidung zwischen den beiden ist, schreibe ich jetzt den [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Unterschied von HttpModule &#38; HttpHandler?", url: "http://code-inside.de/blog/2010/08/09/unterschied-von-httpmodule-httphandler/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image1032.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb216.png" width="170" height="130" /></a>Manche Sachen sind so trivial, dass man gar nicht mehr nachschaut. Da wird mal von einem “HttpModule” geredet (grundsätzlich sind “Module” ja so oder so immer ein gutes Schlagwort <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) oder von einem “HttpHandler”. Damit ich mir endlich mal merken kann, was genau die Unterscheidung zwischen den beiden ist, schreibe ich jetzt den Blogpost <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p> <span id="more-2809"></span>
<p><strong>Ein “HttpHandler”:</strong></p>
<p><a href="http://www.aspnetzone.de/blogs/peterbucher/">Peter Bucher</a> hat eine sehr nette Erklärung dazu geschrieben: </p>
<p>“<em>Ein Handler kann sich als Teil des Prozesses vorgestellt werden, der bei einem Request abgearbeitet wird.      <br />Wenn ein Request eintrifft, wird anhand von Mappings entschieden, welcher Handler den Request abarbeitet. </em></p>
<p><em>In ASP.NET gibt es schon mehrere bestehende Handler, der bekannteste von ihnen ist der Page Handler der auf alle Dateianforderungen mit der Endung *.aspx reagiert.      <br />Webservices *.asmx gehen auch durch einen spezifischen Handler. Sowie bspw. WebResource.axd.       <br />Die Klasse &quot;Page&quot;, die bzw. deren Ableitungen für jede ASPX Seite benutzt wird, stellt den oben genannten Handler dar.</em>”</p>
<p>In <a href="http://www.aspnetzone.de/blogs/peterbucher/archive/2007/11/20/daten-mit-asp-net-zum-client-schicken-oder-wieso-eigentlich-httphandler.aspx">dem Post</a> hat er noch allerlei Hintergrundinformation und auch ein Beispiel. Natürlich gibt es auch einen <a href="http://msdn.microsoft.com/de-de/library/ms227675(VS.80).aspx">MSDN Artikel</a> dazu.</p>
<p><u>Fazit:</u> Ein Handler reagiert am Ende des Requests auf irgendwas. </p>
<p>Wenn man einen eigenen HttpHandler erstellen möchte, dann muss man die Schnittstelle <a href="http://msdn.microsoft.com/de-de/library/7ezc17x8.aspx">IHttpHandler</a> implementieren und man muss den Handler z.B. in der web.config registrieren nach dem Motto: “Du reagierst jetzt auf alle seitenname.helloWorld GET Aufrufe.” Ich verweise nochmal <a href="http://www.aspnetzone.de/blogs/peterbucher/archive/2007/11/20/daten-mit-asp-net-zum-client-schicken-oder-wieso-eigentlich-httphandler.aspx">auf den Post von Peter</a>, weil er dort alles sehr gut erklärt hat <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Was bedeutet die “<a href="http://msdn.microsoft.com/de-de/library/system.web.ihttphandler.isreusable.aspx">IsReuseable</a>” Property im <a href="http://msdn.microsoft.com/de-de/library/7ezc17x8.aspx">IHttpHandler</a> Interface?</p>
<p>Wenn man dort “true” zurück gibt, cacht die Applikation den HttpHandler. So könnte man z.B. im Konstruktor des HttpHandler einmal Daten laden und pro Request würde immer der gleiche Zustand benutzt werden. Das kann natürlich auch negative Aspekte haben. Der <a href="http://stackoverflow.com/questions/539302/significance-of-bool-isreusable-in-http-handler-interface">Stackoverflow Thread</a> hat mir zu dem Thema sehr geholfen.</p>
<p><strong>Ein “HttpModule”:</strong></p>
<p>HttpModule darf man sich wie Filter vorstellen. So gibt es z.B. ein Authentifzierungs-Modul usw. Diese reichen den Request durch oder manipulieren ihn. Ein HttpModule kann z.B. <a href="http://code-inside.de/blog/2009/10/14/howto-ein-httpmodule-zum-redirecten-nutzen/">ein Redirect durchführen</a>. </p>
<p>Um ein eigenes HttpModule zu bauen, muss man die Schnittstelle <a href="http://msdn.microsoft.com/de-de/library/system.web.ihttpmodule.aspx">IHttpModule</a> implementieren und das HttpModule auch registrieren. Am Ende geht der Request, wenn er von einem HttpModule nicht “abgelenkt” oder “beendet” wird, durch die verschiedenen Module und kommt irgendwann zu seinem HttpHandler.</p>
<p><strong>Kleines Schaubild:</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1033.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb217.png" width="186" height="398" /></a> </p>
<p>So in etwa sollte der Ablauf sein. Natürlich könnte auch ein HttpModule bereits die Response zurück schicken und so den Verlauf des Requests beeinflussen.</p>
<p>Das Post beschreibt keine Raketenwissenschaft, aber manchmal ist es ganz nützlich zu wissen, wo die Unterschiede liegen <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=Unterschied+von+HttpModule+%26amp%3B+HttpHandler%3F&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F08%2F09%2Funterschied-von-httpmodule-httphandler%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/hh6Jgar3QUs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/08/09/unterschied-von-httpmodule-httphandler/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/08/09/unterschied-von-httpmodule-httphandler/</feedburner:origLink></item>
		<item>
		<title>Europäische Data Center von Microsoft &amp; Co. vs. US-Patriot Act</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/hOcRmnsp8B4/</link>
		<comments>http://code-inside.de/blog/2010/08/05/europische-data-center-von-microsoft-co-vs-us-patriot-act/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 18:21:33 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Datenschutz]]></category>
		<category><![CDATA[SaaS]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/08/05/europische-data-center-von-microsoft-co-vs-us-patriot-act/</guid>
		<description><![CDATA[ 
Seit beginn des “Cloud Computing” Hypes war Datenschutz schon immer ein Thema. Die großen Anbieter wie Microsoft, Google oder Amazon haben riesige Rechenzentren weltweit. Microsoft hat z.B. ein Data Center in Irland. Besonders wenn es um die Datenschutz Frage ging, kam häufig die Antwort, man betreibe Rechenzentren in Europa und halte sich an die [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Europ&#228;ische Data Center von Microsoft &#38; Co. vs. US-Patriot Act", url: "http://code-inside.de/blog/2010/08/05/europische-data-center-von-microsoft-co-vs-us-patriot-act/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image1029.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb213.png" width="149" height="185" /></a> </p>
<p>Seit beginn des “Cloud Computing” Hypes war Datenschutz schon immer ein Thema. Die großen Anbieter wie Microsoft, Google oder Amazon haben riesige Rechenzentren weltweit. Microsoft hat z.B. ein Data Center in Irland. Besonders wenn es um die Datenschutz Frage ging, kam häufig die Antwort, man betreibe Rechenzentren in Europa und halte sich an die gegeben Gesetze. Allerdings bedeutet dies nicht gleich, dass US Behörden auf die Daten keinen Zugriff haben. </p>
<p> <span id="more-2804"></span>
<p>Ein Kollege machte mich heute auf den <a href="http://de.wikipedia.org/wiki/USA_PATRIOT_Act">Patriot Act</a> aufmerksam. Dieser beinhaltet auch eine Passage, dass jegliche Daten, welche von einem US Unternehmen gespeichert/verwaltet werden an US Behörden auf Befehl auszuhändigen sind.</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1030.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb214.png" width="244" height="164" /></a> Der Patriot Act greift <strong>auf jedes US</strong> Unternehmen. <strong><u>Wo</u></strong> die Daten des US Unternehmens liegen, ob nun in der USA oder in Europa, <strong><u>ist egal</u></strong>.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>Der <a href="http://www.eff.org/deeplinks/2009/04/cybersecurity-act">Cybersecurity Act</a> von 2009 räumt der US Regierung auch jegliches Recht ein ohne einen richterlichen Beschluss die Daten zu verlangen:</p>
<p><em>The Secretary of Commerce— shall have access to all relevant data concerning (critical infrastructure) networks without regard to any provision of law, regulation, rule, or policy restricting such access…</em></p>
<p>Weitere Informationen (und meine Quelle <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) findet ihr <a href="http://www.aidanfinn.com/?p=10380"><strong>hier</strong></a><strong>.</strong></p>
<p><strong>“Naja… ist das nicht etwas übertrieben/dramatisiert?”</strong></p>
<p>Je nachdem was man für eine Anwendung plant, kann das natürlich auch egal sein, weil man die Daten als unkritisch einstuft. Allerdings werden meiner Wahrnehmung nicht viele deutsche / europäische Unternehmen sich der US Willkür aussetzen wollen. Deutsches Autobauer KnowHow wäre evtl. in einer Wirtschaftskrise für die US Autoindustrie sicherlich interessant gewesen <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  </p>
<p>Mir persönlich war nicht klar, dass selbst wenn ich explizit verlange das die Daten in Deutschland gehostet werden, ein US Beamter trotzdem diese Daten ohne mein Wissen haben kann.</p>
<p>Das ganze trifft natürlich jegliche Cloud &amp; SaaS Anbieter. Auf Microsoft bezogen wäre das gesamte <a href="http://www.microsoft.com/windowsazure/">Azure Portfolio</a> sowie <a href="http://www.microsoft.com/online/business-productivity.aspx">BPOS</a> betroffen.</p>
<p><strong>Alternativen</strong></p>
<p>Entweder man hostet es selber oder man sucht sich eine lokale / nationale Hostingfirma seines Vertrauens.   <br />Oder man sieht seine Daten als unkritisch an und speichert einfach in die Wolke.     <br />Natürlich könnte man auch die “Applikation” selbst in der Wolke laufen lassen, aber die Daten irgendwo in ein eigenes Rechenzentrum speichern. So könnte man evtl. den Skalierungseffekt von der Cloud nutzen, aber selber die Datenhoheit waren. Man könnte natürlich die Sache weiterspinnen und sagen, dass wenn jemand Zugriff auf die Applikationslogik hat, kann er auch irgendwie die Daten aus der Datenbank raus lesen.</p>
<p><strong>*Hier BITTE IHRE VERSCHWÖRUNGSTHEORIE EINFÜGEN* <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </strong></p>
<p><strong>Private Clouds</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1031.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb215.png" width="151" height="137" /></a>Ein Ausweg bieten die so genannten “Private Clouds”. Bei Azure konkret: <a href="http://blogs.msdn.com/b/windowsazure/archive/2010/07/12/just-announced-at-wpc-the-windows-azure-platform-appliance.aspx">Windows Azure Platform Appliance</a></p>
<p>Große Unternehmen könnten damit Azure in ihren Rechenzentren hosten. </p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=Europ%26auml%3Bische+Data+Center+von+Microsoft+%26amp%3B+Co.+vs.+US-Patriot+Act&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F08%2F05%2Feuropische-data-center-von-microsoft-co-vs-us-patriot-act%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/hOcRmnsp8B4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/08/05/europische-data-center-von-microsoft-co-vs-us-patriot-act/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/08/05/europische-data-center-von-microsoft-co-vs-us-patriot-act/</feedburner:origLink></item>
		<item>
		<title>ASP.NET MVC Samples</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/9Z1EecPVpTo/</link>
		<comments>http://code-inside.de/blog/2010/08/05/asp-net-mvc-samples/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 23:40:08 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowToCode]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Samples]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/08/05/asp-net-mvc-samples/</guid>
		<description><![CDATA[Bei vielen Problemen des Programmieralltags fragt man sich “Das Problem muss doch schon irgendjemand mal gelöst haben.” Leider findet man meist nicht all zu viele Beispiele, welche einen etwas komplexeren Anwendungsfall beschreiben. Ich versuch mal in dem Blogpost ein paar ASP.NET MVC Samples kurz zu benennen  .
 
Die Liste ist natürlich nicht vollständig – [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "ASP.NET MVC Samples", url: "http://code-inside.de/blog/2010/08/05/asp-net-mvc-samples/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image1022.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb206.png" width="197" height="153" /></a>Bei vielen Problemen des Programmieralltags fragt man sich “Das Problem muss doch schon irgendjemand mal gelöst haben.” Leider findet man meist nicht all zu viele Beispiele, welche einen etwas komplexeren Anwendungsfall beschreiben. Ich versuch mal in dem Blogpost ein paar ASP.NET MVC Samples kurz zu benennen <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p> <span id="more-2796"></span>
<p>Die Liste ist natürlich nicht vollständig – es gibt da draußen bestimmt noch haufenweise tolle andere ASP.NET MVC Samples. Dies soll nur als kleine Orientierungshilfe dienen.</p>
<p><strong>Nerddinner</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1023.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb207.png" width="244" height="174" /></a> </p>
</p>
<p>Die Nerddinner Anwendung wurde als “DemoProjekt” von Microsoftis erstellt und daher findet man auch recht viel Material im Internet: Hier z.B. das <a href="http://code-inside.de/blog/2009/03/11/kostenloses-aspnet-mvc-tutorial-kapitel-sample-application-nerddinner/">eBook</a> dazu.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>Generell ist die Nerddinner Anwendung nicht allzu komlex, allerdings gibt es ein paar Sachen die nett sind:</p>
<ul>
<li>Recht einfach gestrickte Unit-Tests. Für Anfänger vielleicht ein guter Einstieg.</li>
<li>OpenID Support</li>
<li>Bing Maps </li>
<li>OData Support</li>
<li>gekapseltes Entity Framework samt Repository Pattern</li>
</ul>
<p>Als Enterprise Solution würde ich es allerdings nicht ansehen, aber man kann einen Blick drauf werfen um einen guten Einstieg in ASP.NET MVC (und ein paar anderen Spielerein) zu bekommen.</p>
<p>Hier gehts zum <strong><a href="http://nerddinner.codeplex.com">Nerddinner Source</a></strong>.</p>
<p><strong>Sharp Architecture</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1024.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb208.png" width="158" height="82" /></a> </p>
<p>Eigentlich ist <a href="http://www.sharparchitecture.net/">“Sharp Architecture”</a> kein “Sample”, sondern ein “Architektur-Guide”. Es beinhaltet u.a. auch VS Templates. Um mal einen Blick auf eine fertige Anwendung zu werden gibt es ein Northwind Sample. Diese “Sample” umfasst nicht nur ASP.NET MVC, sondern auch diverse andere Technologien, wie WCF und NHibernate. Wobei der NHibernate Part sehr groß ist <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Diese Applikation würde ich schon eher “Enterprise ready” bezeichnen. Ein Blick sollte man wohl mal auf diese Komponenten werfen:</p>
<ul>
<li>IoC mit Castle Windsor</li>
<li>Der Einsatz von NHibernate</li>
<li>UnitTests mit NUnit</li>
<li>Die Aufsplittung der MVC App in ein “View” Projekt und ein “Controller” Projekt.</li>
<li>Bestimmt gibt es da noch viele andere clevere Sachen – allerdings bin ich auch erst heute darauf gestoßen <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
</ul>
<p>Hier gehts zu den <a href="http://github.com/codai/Sharp-Architecture/downloads"><strong>Downloads</strong></a>.</p>
<p><strong>Code Camp Server</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1025.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb209.png" width="191" height="85" /></a> </p>
<p>Der <a href="http://codecampserver.codeplex.com/">Code Camp Server</a> zählt auch schon zu den etwas größeren Applikationen. Auch hier ist NHibernate ein Thema, auch AutoMapper und CastleWindsor spielen eine Rolle.</p>
<p>Interessant fande ich die Idee mit dem “Command Pattern” um nicht endlos viele Manager/Service Klassen zu haben. Es gibt wohl auch Powershell-Scripts die (magische) Sachen tun – in einer ruhigen Minute sollte man sich das mal ansehen <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Anfänger werden allerdings vermutlich bei diesem Projekt erst mal erschlagen <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Hier gehts zur <a href="http://codecampserver.codeplex.com/"><strong>Codeplex Seite</strong></a>.</p>
<p><strong>Shrinkr</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1026.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb210.png" width="244" height="125" /></a> </p>
<p>Shrinkr ist ein schicker URL Verkürzungsdienst. Im Hintergrund gibt es aber doch recht interessante technische Konzepte und APIs.</p>
<p>&#160;</p>
<p>Hier ein paar Punkte die mir aufgefallen sind:</p>
<ul>
<li>OpenID Unterstützung</li>
<li>UnitTests </li>
<li>Sowohl Entity Framework als auch NHibernate werden unterstützt</li>
<li>Es gibt mehrere ViewEngines (Spark &amp; die normale Engine)</li>
</ul>
<p>Der Anwendungsfall ist recht einfach und verständlich, daher könnte dies auch für MVC Anfänger interessant sein. Auch wenn man erst mal gar nicht weiß, wo man überhaupt anfangen soll <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Auf der <a href="http://shrinkr.codeplex.com/">Codeplex Seite</a> sind alle wesentlichen Features auch übersichtlich aufgeschrieben.</p>
<p><strong>MVC Time Planner</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1027.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb211.png" width="244" height="147" /></a> </p>
<p>Die MVC Time Planner App ist hier vielleicht noch die “kleinste” App. Für Anfänger ist diese Anwendung, neben dem Nerddinner, noch am besten zu empfehlen. Auch hier kommt NHibernate zum Einsatz und im Frontend gibt es ein paar jQuery Sachen.</p>
<p><a href="http://mvctimeplanner.codeplex.com/">Codeplex Seite.</a></p>
<p><strong>Orchard</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1028.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb212.png" width="192" height="109" /></a> </p>
<p>Orchard ist ein von Microsoft gebautes CMS, welches in der Liga eines Wordpress angesiedelt sein soll: Leichte Anpassbar, Plugins und auch für den Enduser benutzbar. Das Frontend basiert auf ASP.NET MVC, allerdings ist das Pluginsystem meiner Meinung nach recht interessant. Orchard ist für sich äußerst interessant und als Sample für den fortgeschritten Entwickler als “Architekturidee” IMHO bestens geeignet. </p>
<p><a href="http://www.orchardproject.net/">Zur Orchard Projektseite</a>.</p>
<p><strong>Kennt ihr noch gute Samples?</strong></p>
<p><em>(Mit “Samples” meine ich ein Stück Software, welches man so auch in irgendeiner Form ausführen kann. Dies brauchen nicht zwangläufig nur ASP.NET MVC Beispiele sein – auch Architekturbeispiele oder ein Projekt mit “guten” Unittests <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</em></p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=ASP.NET+MVC+Samples&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F08%2F05%2Fasp-net-mvc-samples%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/9Z1EecPVpTo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/08/05/asp-net-mvc-samples/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/08/05/asp-net-mvc-samples/</feedburner:origLink></item>
		<item>
		<title>Free eBook: Programming Windows Phone 7</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/4uGX3L7CQ6w/</link>
		<comments>http://code-inside.de/blog/2010/08/04/free-ebook-programming-windows-phone-7/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 08:33:27 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Buchempfehlung]]></category>
		<category><![CDATA[eBook]]></category>
		<category><![CDATA[Windows Phone 7]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/08/04/free-ebook-programming-windows-phone-7/</guid>
		<description><![CDATA[ 
Für die Freunde der Windows Phone 7 Programmierung bestimmt sehr interessant: Charles Petzolds Buch, welches momentan noch “In Arbeit” ist, wird es kostenlos zur PDC geben. Bereits heute kann man einen Blick auf einen Teil des Buches werfen. Für den Einstieg sicherlich praktisch. Zum eBook (PDF) &#38; Sample Code.
<script type="text/javascript">SHARETHIS.addEntry({ title: "Free eBook: Programming Windows Phone 7", url: "http://code-inside.de/blog/2010/08/04/free-ebook-programming-windows-phone-7/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image1021.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb205.png" width="184" height="223" /></a> </p>
<p>Für die Freunde der Windows Phone 7 Programmierung bestimmt sehr interessant: Charles Petzolds Buch, welches momentan noch “In Arbeit” ist, <a href="http://blogs.msdn.com/b/microsoft_press/archive/2010/08/02/free-ebook-petzold-s-programming-windows-phone-7-special-excerpt-2.aspx">wird es kostenlos zur PDC geben</a>. Bereits heute kann man einen Blick auf einen Teil des Buches werfen. Für den Einstieg sicherlich praktisch. <strong>Zum <a href="http://download.microsoft.com/download/0/D/9/0D919C81-6E31-436C-8FB0-A75BBEBB6AEA/ProgrammingWindowsPhone7(SpecialExcerpt2).pdf">eBook (PDF)</a> &amp; <a href="http://download.microsoft.com/download/0/D/9/0D919C81-6E31-436C-8FB0-A75BBEBB6AEA/ProgrammingWindowsPhone7Code(SpecialExcerpt2).zip">Sample Code</a>.</strong></p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=Free+eBook%3A+Programming+Windows+Phone+7&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F08%2F04%2Ffree-ebook-programming-windows-phone-7%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/4uGX3L7CQ6w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/08/04/free-ebook-programming-windows-phone-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/08/04/free-ebook-programming-windows-phone-7/</feedburner:origLink></item>
		<item>
		<title>Ist eine 3 Schichten Architektur mit eigener DAL immer empfehlenswert?</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/B4LHJRUJCkE/</link>
		<comments>http://code-inside.de/blog/2010/08/03/ist-eine-3-schichten-architektur-mit-eigner-dal-immer-empfehlenswert/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 22:06:25 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowToCode]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/08/03/ist-eine-3-schichten-architektur-mit-eigner-dal-immer-empfehlenswert/</guid>
		<description><![CDATA[ 
Wenn es darum geht eine “normale” Webapplikation zu bauen, dann kommt man meist auf eine 3 Schichten Architektur heraus. Der meistgelesenste Blogeintrag dreht sich um diese Architektur, allerdings kommen bei mir immer mal wieder Zweifel auf, ob man nicht zuviel Aufwand in der DAL betreibt – immerhin gibt es tolle OR Mapper. Doch auch [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Ist eine 3 Schichten Architektur mit eigener DAL immer empfehlenswert?", url: "http://code-inside.de/blog/2010/08/03/ist-eine-3-schichten-architektur-mit-eigner-dal-immer-empfehlenswert/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image1018.png"><img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb202.png" width="189" height="174" /></a> </p>
<p>Wenn es darum geht eine “normale” Webapplikation zu bauen, dann kommt man meist auf eine 3 Schichten Architektur heraus. Der <a href="http://code-inside.de/blog/2008/07/09/howto-3-tier-3-schichten-architektur/">meistgelesenste Blogeintrag dreht sich um diese Architektur</a>, allerdings kommen bei mir immer mal wieder Zweifel auf, ob man nicht zuviel Aufwand in der DAL betreibt – immerhin gibt es tolle OR Mapper. Doch auch damit bin ich bereits auf die Nase gefallen und hab mich von dem Gebrauch dieser <a href="http://code-inside.de/blog/2009/03/13/howtocode-macht-ein-eigenes-model-ohne-linq2sqladonet-ef-magic/">Linq2Sql oder Entity Framework generierten Model-Klassen distanziert</a>. <a href="http://ayende.com/Blog/archive/2010/07/30/the-false-myth-of-encapsulating-data-access-in-the-dal.aspx">Ayende Rahien</a> hat aber mal wieder meine Zweifel geweckt…</p>
<p> <span id="more-2777"></span>
<p><strong>3-Schichten Architektur</strong></p>
<p>Ayende selbst ist bekennender Fan von NHibernate (immerhin hat er es mitentwickelt) und mag auch das Repository Pattern wohl auch nicht mehr so.</p>
<p>Allerdings sind die Grundgedanken vollkommen nachvollziehbar. Die Grafiken stammen aus einem von Ayendes Posts. Der normale Aufbau wäre bei einer 3-Schichten Architektur so:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1019.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb203.png" width="496" height="214" /></a> </p>
<p>Der Ablauf sobald ein User z.B. auf einen bestimmten Eintrag auf einer Website klickt wäre so:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1020.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb204.png" width="557" height="193" /></a> </p>
<p>Ihn stört es, dass man durch Repositories noch eine weitere Abstraktionsebene aufbaut. In den meisten meiner Projekte hatten wir es auch so umgesetzt und in dem “Data&quot; Layer noch einen ORM, wie z.B. Linq2Sql oder das Entity Framework benutzt.</p>
<p><strong>Zu viel Abstraktion? </strong></p>
<p>Die Frage die ich mir stelle: Lohnt sich der Aufwand (und <a href="http://ayende.com/Blog/archive/2008/11/21/stealing-from-your-client.aspx">die Kosten für den Kunden</a>) den Data-Layer zu kapseln, wenn man ohnehin ein OR Mapper benutzt? </p>
<p>Kann man denn realistisch und mit vertretbaren Aufwänden überhaupt eine gescheites IUserRepository bauen? <a href="http://ayende.com/Blog/archive/2010/07/30/the-false-myth-of-encapsulating-data-access-in-the-dal.aspx">Ayende hat ein paar Punkte aufgezählt</a>, warum die Kapselung eines Data Access Layers unnötig auch nicht wirklich umsetzbar ist. <a href="http://ayende.com/Blog/archive/2010/08/02/abstracting-the-persistence-medium-isnrsquot-going-to-let-you-switch.aspx">In einem weiteren Post</a> geht er genau ein und zeigt anhand des Membership Providers (den ich persönlich für grausam erachte), dass es vergebene Mühe ist.</p>
<p><strong>Durch die Kapselung wird es leichter mit Unit-Tests die Businesslogik zu testen!</strong></p>
<p>Durch ein Projekt wo wir in der Businesslogik direkt Linq2Sql und das Entity Framework eingesetzt haben, war es äußerst mühsam bis unmöglich Unit-Tests zu schreiben. Daher war es für die Testbarkeit der Businessschicht enorm wichtig, dass man die DAL auch mocken kann. Allerdings sind die beiden OR/M ja nicht die einzigen .NET OR/M…</p>
<p><strong>NHibernate</strong></p>
<p>Ayende ging auch in einem Post auf das <a href="http://ayende.com/Blog/archive/2009/04/18/mocking-nhibernate.aspx">Mocking von NHibernate</a> ein und wie man auch <a href="http://ayende.com/Blog/archive/2009/04/28/nhibernate-unit-testing.aspx">Unit-Tests</a> abbilden kann. </p>
<p><strong>Die große Frage (und warum ich diesen Post schreibe)</strong></p>
<p>Mach ich mir das Leben selber kompliziert indem ich versuche die DAL zu kapseln? Nehm ich vielleicht einfach nur die falschen OR/Mapper? Ist NHibernate so toll und kann mir jemand ein tolles Beispielprojekt samt Unit-Tests zeigen? <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ist eine 3-Schichten Architektur am Ende immer erstrebenswert? <em>(Achtung: Ich geh hier von einem 0815 Webprojekt aus und zählen den OR/Mapper nicht als direkte Schicht, sondern ich würde direkt in der Business-Schicht NHibernate arbeiten. Dass es im Embedded Bereich andere Spielregel gibt ist mir klar <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</em></p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=Ist+eine+3+Schichten+Architektur+mit+eigener+DAL+immer+empfehlenswert%3F&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F08%2F03%2Fist-eine-3-schichten-architektur-mit-eigner-dal-immer-empfehlenswert%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/B4LHJRUJCkE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/08/03/ist-eine-3-schichten-architektur-mit-eigner-dal-immer-empfehlenswert/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/08/03/ist-eine-3-schichten-architektur-mit-eigner-dal-immer-empfehlenswert/</feedburner:origLink></item>
		<item>
		<title>HowTo: Einführung in die MetaWebLogAPI</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/HjXdAIfqWtM/</link>
		<comments>http://code-inside.de/blog/2010/08/02/howto-einfhrung-in-die-metaweblogapi/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 22:41:25 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[MetaWeblog]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/08/02/howto-einfhrung-in-die-metaweblogapi/</guid>
		<description><![CDATA[Dieser Blogpost basiert auf Scott Hanselmans “WeeklySourceCode”, wo diese Woche das Thema MetaWebLogAPI dran kam. In dem Blogpost berichtet er, dass MS auch intern zum Verwalten ihrer Seiten den Windows Live Writer nutzen. Das Tool ist absolut praktisch und ist “MetaWebLogAPI” kompatibel. Durch diese API ist es z.B. möglich mit Standard Tools (Word oder den [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "HowTo: Einf&#252;hrung in die MetaWebLogAPI", url: "http://code-inside.de/blog/2010/08/02/howto-einfhrung-in-die-metaweblogapi/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image1015.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb199.png" width="132" height="130" /></a>Dieser Blogpost basiert auf <a href="http://www.hanselman.com/blog/TheWeeklySourceCode55NotABlogALocalXMLRPCMetaWebLogEndpointThatLiesToWindowsLiveWriter.aspx">Scott Hanselmans “WeeklySourceCode”</a>, wo diese Woche das Thema MetaWebLogAPI dran kam. In dem Blogpost berichtet er, dass MS auch intern zum Verwalten ihrer Seiten den Windows Live Writer nutzen. Das Tool ist absolut praktisch und ist “<a href="http://www.xmlrpc.com/metaWeblogApi">MetaWebLogAPI</a>” kompatibel. Durch diese API ist es z.B. möglich mit Standard Tools (Word oder den Windows Live Writer) “CMS” Content zu erzeugen. </p>
</p>
<p> <span id="more-2770"></span>
<p><strong>Was nützt mir das?</strong></p>
<p>Der normale Endanwender mag ein einfachen WYSIWYG Editor haben. Es gibt einige nette Editoren, wie z.B. <a href="http://tinymce.moxiecode.com/">tinyMCE</a>. Das größte Problem was ich bislang mit solchen Web-basierten Lösungen habe ist, dass der Umgang mit Bildern meistens Arg abenteuerlich gestaltet ist. Der normale User mag es, einfach die Bilder per Copy and Paste ins Word zu verschieben und dort noch ein paar Effekte anzustellen. Wenn man nun selber Webseitenbetreiber ist und seinen Kunden ein “einfaches” Frontend zur Verfügung stellen möchte, der kann die MetaWebLog API implementieren.</p>
<p><strong>Standard Tools</strong></p>
<p>Der große Vorteil ergibt sich durch die netten Clients. Auf der einen Seite gibt es z.B. den Windows Live Writer:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1016.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb200.png" width="244" height="212" /></a> </p>
<p>Aber auch Word ab der Version 2007:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1017.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb201.png" width="360" height="241" /></a> </p>
<p>In diesen Tools kann man einfach aus der Zwischenablage Bilder etc. einfügen und entsprechend editieren. Erst beim “Veröffentlichen” werden die Daten zum Server übertragen. </p>
<p><strong>Technischer Hintergrund: XmlRPC</strong></p>
<p>Die MetaWebLog API basiert nicht auf SOAP, sondern auf <a href="http://en.wikipedia.org/wiki/XML-RPC">XML Remote Process Call (RPC)</a>. Im Grunde wird dort auch nur XML übertragen. Ein Beispiel von Wikipedia:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:5ed26b03-4106-4330-afe6-721a70136cbc" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">&lt;?xml version="1.0"?&gt;
&lt;methodCall&gt;
  &lt;methodName&gt;examples.getStateName&lt;/methodName&gt;
  &lt;params&gt;
    &lt;param&gt;
        &lt;value&gt;&lt;i4&gt;40&lt;/i4&gt;&lt;/value&gt;
    &lt;/param&gt;
  &lt;/params&gt;
&lt;/methodCall&gt;</pre>
</div>
<p>Dafür gibt es auch einen <a href="http://xml-rpc.net/">.NET Wrapper</a>.</p>
<p>Die MetaWebLog API hat ein festes Set an Methoden. Dafür wurde bereits im Jahre 2008 von <a href="http://nayyeri.net/">Keyvan Nayyeri</a> eine Schnittstelle für <a href="http://nayyeri.net/implement-metaweblog-api-in-asp-net">ASP.NET</a>.</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:2a86c7ce-20ba-4243-a566-a83a4dd0c7c5" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">namespace NotABlog
{
    public interface IMetaWeblog
    {
        #region MetaWeblog API

        [XmlRpcMethod("metaWeblog.newPost")]
        string AddPost(string blogid, string username, string password, Post post, bool publish);

        [XmlRpcMethod("metaWeblog.editPost")]
        bool UpdatePost(string postid, string username, string password, Post post, bool publish);

        [XmlRpcMethod("metaWeblog.getPost")]
        Post GetPost(string postid, string username, string password);

        [XmlRpcMethod("metaWeblog.getCategories")]
        CategoryInfo[] GetCategories(string blogid, string username, string password);

        [XmlRpcMethod("metaWeblog.getRecentPosts")]
        Post[] GetRecentPosts(string blogid, string username, string password, int numberOfPosts);

        [XmlRpcMethod("metaWeblog.newMediaObject")]
        MediaObjectInfo NewMediaObject(string blogid, string username, string password, MediaObject mediaObject);

        #endregion

        #region Blogger API

        [XmlRpcMethod("blogger.deletePost")]
        [return: XmlRpcReturnValue(Description = "Returns true.")]
        bool DeletePost(string key, string postid, string username, string password, bool publish);

        [XmlRpcMethod("blogger.getUsersBlogs")]
        BlogInfo[] GetUsersBlogs(string key, string username, string password);

        [XmlRpcMethod("blogger.getUserInfo")]
        UserInfo GetUserInfo(string key, string username, string password);

        #endregion
    }
}</pre>
</div>
</p>
<p>Diese Schnittstelle hat ScottHa in seinem Demoprojekt implementiert, so z.B. :</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d0a5bddf-d26c-45fe-bfb0-0c2c1a5d0e26" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">string IMetaWeblog.AddPost(string blogid, string username, string password,
    Post post, bool publish)
{
    if (ValidateUser(username, password))
    {
        string id = string.Empty;
        string postFileName;
        if (String.IsNullOrEmpty(post.title))
            postFileName = Guid.NewGuid() + ".html";
        else
            postFileName = post.title + ".html";

        File.WriteAllText(Path.Combine(LocalPublishPath, postFileName), post.description);

        return postFileName;
    }
    throw new XmlRpcFaultException(0, "User is not valid!");
}</pre>
</div>
<p>Da ich mich fragte, was mit Bildern geschieht: Diese kommen in der Methode “NewMediaObject” an und können dort als byte Array verarbeitet werden.</p>
<p><strong>Demoprojekt gibts bei ScottHa</strong></p>
<p>Wie bereits gesagt, basiert dieser Post auf dem <a href="http://www.hanselman.com/blog/TheWeeklySourceCode55NotABlogALocalXMLRPCMetaWebLogEndpointThatLiesToWindowsLiveWriter.aspx">Post von Scott</a>. Er hat auch sein Demoprojekt veröffentlicht und Daten die ich vom Windows Live Writer oder Word abschicke kommen auch bei den entsprechenden Methoden an.</p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=HowTo%3A+Einf%26uuml%3Bhrung+in+die+MetaWebLogAPI&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F08%2F02%2Fhowto-einfhrung-in-die-metaweblogapi%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/HjXdAIfqWtM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/08/02/howto-einfhrung-in-die-metaweblogapi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/08/02/howto-einfhrung-in-die-metaweblogapi/</feedburner:origLink></item>
		<item>
		<title>“.cshtml” HTML Syntax Highlighting in MVC 3 Preview 1</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/Z0ohIlj8f8o/</link>
		<comments>http://code-inside.de/blog/2010/07/27/cshtml-syntax-highlighting-in-mvc-3-preview-1/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 20:42:19 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Preview]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/07/27/cshtml-syntax-highlighting-in-mvc-3-preview-1/</guid>
		<description><![CDATA[
Die 1. Preview vom ASP.NET MVC Framework ist draußen und ScottGu &#38; Phil Haack haben bereits darüber gebloggt. Eine große Neuheit ist der Razor Syntax. Da das Tooling in diese Preview noch nicht soweit ist, fehlt standardmäßig jegliche Syntaxhighlighting in den “cshtml”. Mit einem kleinen Trick bekommt man wenigstens HTML Syntax Highlighting in den Views.
 [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "&#8220;.cshtml&#8221; HTML Syntax Highlighting in MVC 3 Preview 1", url: "http://code-inside.de/blog/2010/07/27/cshtml-syntax-highlighting-in-mvc-3-preview-1/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image1011.png"><img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb195.png" width="227" height="97" /></a>
<p>Die <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cb42f741-8fb1-4f43-a5fa-812096f8d1e8&amp;displaylang=en">1. Preview vom ASP.NET MVC Framework ist draußen</a> und <a href="http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx">ScottGu</a> &amp; <a href="http://haacked.com/archive/2010/07/27/aspnetmvc3-preview1-released.aspx">Phil Haack</a> haben bereits darüber gebloggt. Eine große Neuheit ist der <a href="http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx">Razor Syntax</a>. Da das Tooling in diese Preview noch nicht soweit ist, fehlt standardmäßig jegliche Syntaxhighlighting in den “cshtml”. Mit einem kleinen Trick bekommt man wenigstens HTML Syntax Highlighting in den Views.</p>
<p> <span id="more-2762"></span>
<p><strong>So sieht es nach der Installation aus:</strong>&#160;</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1012.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb196.png" width="591" height="364" /></a> </p>
<p>Etwas trist. Das wird sich aber bis zum Release von MVC 3 natürlich noch verbessern. Hoff ich jedenfalls <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Trick zum HTML Syntax Highlighting</strong></p>
<p>Rechtsklick auf eine “.cshtml” dann “Open with…”/”Öffnen mit…” auswählen und dort den HTML Editor auswählen. Wichtig wäre noch das man auf die Auswahl als “Default” markiert, damit man diese Prozedur nicht ständig wiederholen muss.</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1013.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb197.png" width="452" height="297" /></a> </p>
<p><strong>Danach hat man immerhin einfaches HTML Syntax Highlighting:</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1014.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb198.png" width="519" height="272" /></a> </p>
<p>Diese einfachen, aber effektiven Tipp hab ich von <a title="http://blog.tatham.oddie.com.au/" href="http://blog.tatham.oddie.com.au/">Tatham Oddie</a>. Super Idee, solange das MVC Tooling noch nicht fertig ist.</p>
<p>Ein Blick auf die <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cb42f741-8fb1-4f43-a5fa-812096f8d1e8&amp;displaylang=en">Preview</a> lohnt.</p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=%26ldquo%3B.cshtml%26rdquo%3B+HTML+Syntax+Highlighting+in+MVC+3+Preview+1&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F07%2F27%2Fcshtml-syntax-highlighting-in-mvc-3-preview-1%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/Z0ohIlj8f8o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/07/27/cshtml-syntax-highlighting-in-mvc-3-preview-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/07/27/cshtml-syntax-highlighting-in-mvc-3-preview-1/</feedburner:origLink></item>
		<item>
		<title>Visual Studio 2010 Extensions: Productivity Power Tools &amp; Power Commands</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/Kv5t1ZSka74/</link>
		<comments>http://code-inside.de/blog/2010/07/23/visual-studio-2010-extensions-productivity-power-tools-power-commands/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 22:20:54 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/07/23/visual-studio-2010-extensions-productivity-power-tools-power-commands/</guid>
		<description><![CDATA[ Wer mal einen Blick in den Extension Manager unter VS 2010 geworfen hat, der wird feststellen, dass es da sehr viele Addins gibt. Zwei Addins gefallen mir am besten. Die Productivity Power Tools &#38; die Power Commands.
 
Der Extension Manager
Wer noch nie den Extension Manager erblickt hat, sollte unter “Tools” –&#62; “Extension Manager” ihn [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Visual Studio 2010 Extensions: Productivity Power Tools &#38; Power Commands", url: "http://code-inside.de/blog/2010/07/23/visual-studio-2010-extensions-productivity-power-tools-power-commands/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image1009.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb193.png" width="189" height="78" /></a> Wer mal einen Blick in den Extension Manager unter VS 2010 geworfen hat, der wird feststellen, dass es da sehr viele Addins gibt. Zwei Addins gefallen mir am besten. Die <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef">Productivity Power Tools</a> &amp; die <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/e5f41ad9-4edc-4912-bca3-91147db95b99">Power Commands</a>.</p>
<p> <span id="more-2753"></span>
<p><strong>Der Extension Manager</strong></p>
<p>Wer noch nie den Extension Manager erblickt hat, sollte unter “Tools” –&gt; “Extension Manager” ihn mal aufmachen. Dort gibt es drei große Bereiche:</p>
<ul>
<li>Plugins welche ihr schon installiert habt. </li>
<li>Die Online Gallery (quasi der AppStore)</li>
<li>Und Updates für bereits installierte Plugins</li>
</ul>
<p>Die meisten Plugins sind kostenlos, allerdings sind dort auch die professionellen Toolhersteller mit vertreten und man bekommt eine Testversion oder sonst was zum Download. So sieht er jedenfalls aus:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1010.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb194.png" width="530" height="304" /></a> </p>
<p>Die ersten beiden finde ich persönlich echt nützlich. Wer einen TFS hat wird sich auch über die TFS Power Tools freuen. Den Rest hab ich allerdings noch nicht wirklich ausprobiert <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Productivity Power Tools</strong></p>
<p>ScottGu hatte über die erste Version <a href="http://weblogs.asp.net/scottgu/archive/2010/06/09/visual-studio-2010-productivity-power-tool-extensions.aspx">einen größeren Blogpost geschrieben</a>. Seitdem ist aber auch ein neues Update rausgekommen. <a href="http://blogs.msdn.com/b/visualstudio/archive/2010/07/20/solution-navigator-blog-post.aspx">Dieses Update bringt z.B. den “Solution Navigator” mit</a> – ein deutlich verbesserter Solution Explorer mit Suche und mehr Details. Fetzt.</p>
<p>Download entweder <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef">von hier</a> oder per Extension Manager.</p>
<p><strong>Power Commands</strong></p>
<p>Die Power Commands erweitern das Kontext menü um ein paar Punkte. Einige davon sind recht praktisch.</p>
<p>Download entweder <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/e5f41ad9-4edc-4912-bca3-91147db95b99">von hier</a> oder per Extension Manager.</p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=Visual+Studio+2010+Extensions%3A+Productivity+Power+Tools+%26amp%3B+Power+Commands&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F07%2F23%2Fvisual-studio-2010-extensions-productivity-power-tools-power-commands%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/Kv5t1ZSka74" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/07/23/visual-studio-2010-extensions-productivity-power-tools-power-commands/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/07/23/visual-studio-2010-extensions-productivity-power-tools-power-commands/</feedburner:origLink></item>
		<item>
		<title>HowTo: Sehr alte Posts mit dem Windows Live Writer bearbeiten</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/9R-7GmRNyfo/</link>
		<comments>http://code-inside.de/blog/2010/07/18/howto-sehr-alte-posts-mit-dem-windows-live-writer-bearbeiten/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 13:56:36 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Windows Live Writer]]></category>
		<category><![CDATA[Writer]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/07/18/howto-sehr-alte-posts-mit-dem-windows-live-writer-bearbeiten/</guid>
		<description><![CDATA[Ich blogge eigentlich immer mit dem Windows Live Writer. Für mich ein absolut praktisches und tolles Tool, nur leider lassen sich ältere Posts nur sehr schwer bearbeiten, da man keine direkte URL angeben kann. Auf diesem Blog hab ich ein nettes “Plugin” gefunden, mit dem man auch ältere Posts bequem editieren kann.
 

Ältere Posts editieren [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "HowTo: Sehr alte Posts mit dem Windows Live Writer bearbeiten", url: "http://code-inside.de/blog/2010/07/18/howto-sehr-alte-posts-mit-dem-windows-live-writer-bearbeiten/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image1008.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb192.png" width="130" height="135" /></a>Ich blogge eigentlich immer mit dem <a href="http://explore.live.com/windows-live-writer">Windows Live Writer</a>. Für mich ein absolut praktisches und tolles Tool, nur leider lassen sich ältere Posts nur sehr schwer bearbeiten, da man keine direkte URL angeben kann. <a href="http://codeclimber.net.nz/archive/2010/07/10/How-to-edit-very-old-posts-with-Windows-Live-Writer.aspx">Auf diesem Blog</a> hab ich ein nettes “<a href="http://aovestdipaperino.com/downloads/WLWDownloader.msi">Plugin</a>” gefunden, mit dem man auch ältere Posts bequem editieren kann.</p>
<p> <span id="more-2748"></span>
</p>
<p><strong>Ältere Posts editieren – ein Krampf</strong></p>
<p>Entweder man nimmt den eingebauten WYSIWYG Editor von Wordpress/BloggingPlatformXYZ oder man lädt sich alle Artikel über “Datei –&gt; Öffnen –&gt; Blog”. Nachdem das Tool ewig die Liste erstellt hat, darf man dann noch ewig den richtigen Post suchen. Da ist User Experience groß geschrieben wurden <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Das “Plugin” was Abhilfe schaff.</strong></p>
<p>Zum Glück hat sich ein <a href="http://aovestdipaperino.com/posts/windows-live-writer-post-download-plugin.aspx">Microsofti</a> entschieden ein kleines Plugin zu schreiben. Allerdings ist es kein gewöhnliches Windows Live Plugin, sondern eigentlich nur ein URL Handler. Über die Eingabe einer speziellen URL in den Internet Explorer öffnet sich der Windows Live Writer und lädt den entsprechenden Post runter.</p>
<p><strong>Download &amp; Install</strong></p>
<p>Das Plugin kann man <strong><a href="http://aovestdipaperino.com/downloads/WLWDownloader.msi">hier</a></strong> runterladen &amp; installieren. </p>
<p><strong>Ältere Posts editieren</strong></p>
<p>Um einen älteren Post zu editieren gebt einfach eine URL nach folgenden Schema in den Internet Explorer ein (vielleicht geht auch Firefox, im Chrome ging es jedenfalls bei mir nicht) :</p>
<p><a title="wlw://example.com/?postid=yourPostId" href="wlw://example.com/?postid=yourPostId"><strong>wlw://example.com/?postid=yourPostId</strong></a></p>
<p>Die Post-Id findet man z.B. auch im Admin Bereich von Wordpress in der URL, wenn man einen Post editiert.</p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=HowTo%3A+Sehr+alte+Posts+mit+dem+Windows+Live+Writer+bearbeiten&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F07%2F18%2Fhowto-sehr-alte-posts-mit-dem-windows-live-writer-bearbeiten%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/9R-7GmRNyfo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/07/18/howto-sehr-alte-posts-mit-dem-windows-live-writer-bearbeiten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/07/18/howto-sehr-alte-posts-mit-dem-windows-live-writer-bearbeiten/</feedburner:origLink></item>
		<item>
		<title>HowTo: Senden von Emails testen mit Smtp4Dev</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/4wciqmuHOSc/</link>
		<comments>http://code-inside.de/blog/2010/07/18/howto-senden-von-emails-testen-mit-smtp4dev/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 13:07:14 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[SMTP]]></category>
		<category><![CDATA[Smtp4Dev]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/07/18/howto-senden-von-emails-testen-mit-smtp4dev/</guid>
		<description><![CDATA[ 
Vor einer ganzen Weile habe ich bereits darüber gebloggt, wie man das Email-Senden ohne einen richtigen SMTP Server auf seinem Entwickler PC testen kann. Über diverse Blogposts, z.B. dem hier von Alex, bin ich auf Smtp4Dev gestoßen. Fazit: Funktioniert gut &#38; ungemein praktisch.
 
Smtp4Dev
Smtp4Dev ist ein kleines Tool, welches in der System Tray läuft [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "HowTo: Senden von Emails testen mit Smtp4Dev", url: "http://code-inside.de/blog/2010/07/18/howto-senden-von-emails-testen-mit-smtp4dev/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image1003.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb187.png" width="193" height="142" /></a> </p>
<p>Vor einer ganzen Weile habe ich bereits <a href="http://code-inside.de/blog/2009/03/16/howto-senden-von-emails-testen-ohne-mailserver/">darüber gebloggt</a>, wie man das Email-Senden ohne einen richtigen SMTP Server auf seinem Entwickler PC testen kann. Über diverse Blogposts, z.B. dem <a href="http://blog.alexonasp.net/post/2010/07/14/smtp4dev-e28093-Dummy-Mailserver-fur-Entwickler.aspx">hier von Alex</a>, bin ich auf <a href="http://smtp4dev.codeplex.com/">Smtp4Dev</a> gestoßen. Fazit: Funktioniert gut &amp; ungemein praktisch.</p>
<p> <span id="more-2742"></span>
<p><strong>Smtp4Dev</strong></p>
<p>Smtp4Dev ist ein kleines Tool, welches in der System Tray läuft und auf Port 25 lauscht. Wenn eine Mail eingeht, kommt auch ein kleine Info-Box:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1004.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb188.png" width="220" height="114" /></a> </p>
<p>Es gibt auch eine Übersicht mit allen eingegangen Mails:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1005.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb189.png" width="383" height="280" /></a> </p>
<p>Über “View” wird das Standard-Email Programm gestartet. Über “Inspect” kann man Details der Mail anschauen:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1006.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb190.png" width="489" height="228" /></a> </p>
<p><strong>Was müsst ihr tun, damit es funktioniert?</strong></p>
<ul>
<li><a href="http://smtp4dev.codeplex.com/">Smtp4Dev</a> downloaden &amp; installieren</li>
<li>Sichergehen dass das Tool auch auf Port 25 lauscht:<a href="http://code-inside.de/blog/wp-content/uploads/image1007.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb191.png" width="390" height="289" /></a> </li>
<li>In der web.config die Smtp Settings auf Network &amp; Localhost setzen:</li>
</ul>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3b9511a3-ef1c-449c-9f89-58daafbd63cc" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">	&lt;system.net&gt;
    &lt;mailSettings&gt;
      &lt;smtp deliveryMethod="Network"&gt;
        &lt;network host="localhost"/&gt;
      &lt;/smtp&gt;
    &lt;/mailSettings&gt;
	&lt;/system.net&gt;</pre>
</div>
<p>Mein Beispielcode stammt noch <a href="http://code-inside.de/blog/2009/03/16/howto-senden-von-emails-testen-ohne-mailserver/">aus dem alten Blogpost</a>, nur mit der Änderung in der web.config (&amp; das ich es mit VS2010 bearbeitet habe)</p>
<p><strong><a href="http://code-inside.de/files/democode/testingemailswithsmtp4dev/testingemailswithsmtp4dev.zip">[ Download Democode ]</a></strong></p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=HowTo%3A+Senden+von+Emails+testen+mit+Smtp4Dev&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F07%2F18%2Fhowto-senden-von-emails-testen-mit-smtp4dev%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/4wciqmuHOSc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/07/18/howto-senden-von-emails-testen-mit-smtp4dev/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/07/18/howto-senden-von-emails-testen-mit-smtp4dev/</feedburner:origLink></item>
		<item>
		<title>HowTo: Upgrade von ASP.NET MVC 1.0 auf 2.0 &amp; .NET 4.0</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/0QZweEFmDP0/</link>
		<comments>http://code-inside.de/blog/2010/07/12/howto-upgrade-von-asp-net-mvc-1-0-auf-2-0-net-4-0/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 22:19:43 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/07/12/howto-upgrade-von-asp-net-mvc-1-0-auf-2-0-net-4-0/</guid>
		<description><![CDATA[Wir hatten vor kurzem eine Umstellung einer ASP.NET MVC 1.0 Anwendung, welche unter .NET 3.5 lief, auf ASP.NET MVC 2 mit .NET 4.0 vollzogen. Hier ein paar kleine Anmerkungen dazu.
&#160;
 
Sobald mit mit VS2010 eine Solution öffnet, welche mit VS2008 erstellt wurde und unter .NET 3.5 oder älter läuft, kommt sofort der Konvertierungswizard und fragt [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "HowTo: Upgrade von ASP.NET MVC 1.0 auf 2.0 &#38; .NET 4.0", url: "http://code-inside.de/blog/2010/07/12/howto-upgrade-von-asp-net-mvc-1-0-auf-2-0-net-4-0/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image1001.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb185.png" width="108" height="106" /></a>Wir hatten vor kurzem eine Umstellung einer ASP.NET MVC 1.0 Anwendung, welche unter .NET 3.5 lief, auf ASP.NET MVC 2 mit .NET 4.0 vollzogen. Hier ein paar kleine Anmerkungen dazu.</p>
<p>&#160;</p>
<p> <span id="more-2731"></span>
<p>Sobald mit mit VS2010 eine Solution öffnet, welche mit VS2008 erstellt wurde und unter .NET 3.5 oder älter läuft, kommt sofort der Konvertierungswizard und fragt ob man auch die .NET Framework Version 4.0 haben möchte.</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1002.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb186.png" width="485" height="381" /></a> </p>
<p>Nach der Konvertierung wurden auch automatisch die MVC 2 dlls hinzugefügt. Für <strong>VS 2008</strong> gibt es auch einen <a href="http://weblogs.asp.net/leftslipper/archive/2009/10/19/migrating-asp-net-mvc-1-0-applications-to-asp-net-mvc-2.aspx">Konverter</a>, weil man diverse Änderungen in den web.configs machen muss.</p>
<p><strong>MvcHtmlString</strong></p>
<p>Die Helper im MVC 2 geben nun ein <a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.mvchtmlstring.aspx">MvcHtmlString</a> anstatt eines einfachen Strings zurück. Das kann z.B. <a href="http://stackoverflow.com/questions/2382942/mvchtmlstring-mvc-2-conversion-error">beim ActionLink Helper zu Problemen</a> führen, da der MvcHtmlString nicht die Methoden eines normalen Strings enthält (z.B. Substring)</p>
<p><strong>ValueProvider</strong></p>
<p>Der Zugriff auf die ValueProvider ist jetzt anders geregelt. War vorher der Zugriff so:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:51731c35-d551-4f30-9978-e35d3989fddc" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">ViewContext.Controller.ValueProvider["Bla"].AttemptedValue</pre>
</div>
<p>So ist er nun so:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:72f98e37-505e-4eb4-aa96-a3088c1cfd20" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">ViewContext.Controller.ValueProvider.GetValue("Bla").AttemptedValue</pre>
</div>
<p>&#160;</p>
</p>
<p><strong>Render View To String</strong></p>
<p>In einem <a href="http://code-inside.de/blog/2010/01/29/howto-excel-export-mit-asp-net-mvc-und-render-view-to-string/">HowTo</a> ging es darum, wie man das Ergebnis eines Views als String zurückbekommt um dies z.B. für Email-Templates zu verwenden.</p>
<p>In diesem <a href="http://stackoverflow.com/questions/483091/render-a-view-as-a-string">Stackoverflow Thread</a> gibts auch eine MVC 2 kompatible Lösung.</p>
<p><strong>RedirectToAction&lt;&gt;</strong></p>
<p>Auch im neuen MVC 2 Framework gibt es kein streng typisiertes RedirectToAction. Dies befindet sich wieder in den <a href="http://aspnet.codeplex.com/wikipage?title=MVC&amp;referringTitle=Home">Futures</a>. </p>
<p><strong>Für das Deployment</strong></p>
<p>Wichtig ist natürlich auch, dass im <a href="http://code-inside.de/blog/2010/04/29/howto-net-4-0-asp-net-mvc-on-iis-7-5-pagehandlerfactory-integrated-has-a-bad-module-managedpipelinehandler/">IIS alles richtig konfiguriert ist</a>.</p>
<p><strong>Mehr Schwierigkeiten sind uns jedenfalls nicht aufgetreten – happy upgrading <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=HowTo%3A+Upgrade+von+ASP.NET+MVC+1.0+auf+2.0+%26amp%3B+.NET+4.0&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F07%2F12%2Fhowto-upgrade-von-asp-net-mvc-1-0-auf-2-0-net-4-0%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/0QZweEFmDP0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/07/12/howto-upgrade-von-asp-net-mvc-1-0-auf-2-0-net-4-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/07/12/howto-upgrade-von-asp-net-mvc-1-0-auf-2-0-net-4-0/</feedburner:origLink></item>
		<item>
		<title>HowTo: In das .NET Framework reindebuggen mit VS2010</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/e4Iqv7QNATM/</link>
		<comments>http://code-inside.de/blog/2010/07/08/howto-in-das-net-framework-reindebuggen-mit-vs2010/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 22:50:46 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Debugging]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/07/08/howto-in-das-net-framework-reindebuggen-mit-vs2010/</guid>
		<description><![CDATA[ 
Es kann ab und an sehr nützlich sein in die Interna des Frameworks reinzuschauen. Das sollte auch mit allen Libraries im .NET Framework mit ein paar Handgriffen funktionieren.
 
VS2008?
In dem Blogpost sind die Schritte mit VS2010 aufgezeigt. Mit VS2008 sollte es aber auch gehen, allerdings habe ich dies dort nie geprüft und bin eigentlich [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "HowTo: In das .NET Framework reindebuggen mit VS2010", url: "http://code-inside.de/blog/2010/07/08/howto-in-das-net-framework-reindebuggen-mit-vs2010/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image995.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb179.png" width="178" height="100" /></a> </p>
<p>Es kann ab und an sehr nützlich sein in die Interna des Frameworks reinzuschauen. Das sollte auch mit allen Libraries im .NET Framework mit ein paar Handgriffen funktionieren.</p>
<p> <span id="more-2726"></span>
<p><strong>VS2008?</strong></p>
<p>In dem Blogpost sind die Schritte mit VS2010 aufgezeigt. Mit VS2008 sollte es aber <a href="http://referencesource.microsoft.com/Default.aspx">auch gehen</a>, allerdings habe ich dies dort nie geprüft und bin eigentlich durch <a href="http://weblogs.asp.net/gunnarpeipman/archive/2010/07/04/stepping-into-asp-net-mvc-source-code-with-visual-studio-debugger.aspx">diesen Blogpost</a> mal wieder auf die Möglichkeit aufmerksam geworden. </p>
<p><strong>Tools –&gt; Options –&gt; Debugging</strong></p>
<p>Die Einstellung müssen genau so eingerichtet sein:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image996.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb180.png" width="495" height="295" /></a> </p>
<p><strong>Symbol Server einrichten</strong></p>
<p>WIchtig ist es, dass man den Haken bei dem MS Symbol Server macht. Weiter unten kann man entweder sagen “Lad alle Module die du brauchst” oder man beschränkt sich auf ganz bestimmte, wie z.B. System.Data oder System.Web.Mvc für die ASP.NET MVC Geschichten.</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image997.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb181.png" width="498" height="290" /></a> </p>
<p><strong>Debug</strong></p>
<p>Wenn man jetzt irgendwo einen Breakpoint setzt und ins Debugging geht, werden erst mal die Symbols runtergeladen – das kann eine kleine Weile dauern:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image998.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb182.png" width="448" height="95" /></a> </p>
<p>Dann noch die EULA akzeptieren:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image999.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb183.png" width="367" height="335" /></a> </p>
<p>Und fertig – jetzt sollte man irgendwo im .NET Framework sein <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Unicode Fehlermeldung:</strong></p>
<p>Komischerweise bekomm ich auf meinem System eine Fehlermeldung, dass etwas mit dem Encoding nicht stimmt. Debugging geht trotz der etwas lästigen Fehlermeldung.</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image1000.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb184.png" width="431" height="239" /></a> </p>
<p><strong>Mehr Symbol Server von Microsoft</strong></p>
<p>Das <a href="http://referencesource.microsoft.com/Default.aspx">Microsoft Reference Source Code Center</a> stellt alle Symbol Server bereit. Dort gibt es auch nochmal diese Anleitung. Viel mehr als das .NET Framework bieten Sie allerdings auch nicht wirklich an.</p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=HowTo%3A+In+das+.NET+Framework+reindebuggen+mit+VS2010&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F07%2F08%2Fhowto-in-das-net-framework-reindebuggen-mit-vs2010%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/e4Iqv7QNATM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/07/08/howto-in-das-net-framework-reindebuggen-mit-vs2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/07/08/howto-in-das-net-framework-reindebuggen-mit-vs2010/</feedburner:origLink></item>
		<item>
		<title>HowTo: Dependency Injection in ASP.NET MVC Controllern mit Windsor Castle</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/3kjLVl9omhs/</link>
		<comments>http://code-inside.de/blog/2010/07/02/howto-dependency-injection-in-asp-net-mvc-controllern-mit-windsor-castle/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 23:21:21 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Castle Windsor]]></category>
		<category><![CDATA[DI]]></category>
		<category><![CDATA[IoC]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/07/02/howto-dependency-injection-in-asp-net-mvc-controllern-mit-windsor-castle/</guid>
		<description><![CDATA[Um einem MVC Controller seine Abhängigkeiten (z.B. Repositories, Services etc.) über ein DI-Framework, wie z.B. Windsor Castle, reinzugeben muss man ein klein wenig am MVC Workflow rumschrauben. Glücklicherweise erlaubt das MVC Framework die Überschreibung der ControllerFactory.
 
Für die Testbarkeit – das Szenario
Wir haben den simplen HomeController:

    [HandleError]
    public class [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "HowTo: Dependency Injection in ASP.NET MVC Controllern mit Windsor Castle", url: "http://code-inside.de/blog/2010/07/02/howto-dependency-injection-in-asp-net-mvc-controllern-mit-windsor-castle/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image993.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb177.png" width="192" height="150" /></a>Um einem MVC Controller seine Abhängigkeiten (z.B. Repositories, Services etc.) über ein DI-Framework, wie z.B. <a href="http://www.castleproject.org/container/">Windsor Castle</a>, reinzugeben muss man ein klein wenig am MVC Workflow rumschrauben. Glücklicherweise erlaubt das MVC Framework die Überschreibung der ControllerFactory.</p>
<p> <span id="more-2713"></span>
<p><strong>Für die Testbarkeit – das Szenario</strong></p>
<p>Wir haben den simplen HomeController:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a2504d90-70b3-41f3-8142-10ab02df7869" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">    [HandleError]
    public class HomeController : Controller
    {
        private IFooService _fooService;

        public HomeController(IFooService fooService)
        {
            this._fooService = fooService;
        }

        public ActionResult Index()
        {
            ViewData["Message"] = "Welcome to ASP.NET MVC!" + this._fooService.Bar();

            return View();
        }

        public ActionResult About()
        {
            return View();
        }
    }</pre>
</div>
<p>Dieser nimmt im Konstruktor eine Implementation von IFooService entgegen. Der FooService wird in der Index Methode gebraucht. In einer realen Anwendung könnte dies z.B. ein Repository sein. </p>
<p>Der FooService:</p>
<p><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:61b4648c-619b-4949-bf5c-8ebb14e43a63" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">    public interface IFooService
    {
        string Bar();
    }

    public class DummyFooService : IFooService
    {
        public string Bar()
        {
            return "DummyFooBar";
        }
    }</pre>
</div>
<p>Durch den Einsatz des Interfaces könnten wir dies z.B. in einem UnitTest mocken. </p>
<p><strong></strong></p>
<p><strong>Knackpunkt: Die Objekterzeugung</strong></p>
<p>In einer normalen Anwendung könnte man, wie z.B. <a href="http://code-inside.de/blog/2010/06/27/howto-alle-implementationen-vom-interface-x-ber-castle-windsor-per-di-auflsen/">in diesem Post</a> erklärt, recht einfach über den IoC Container die Implementation reingeben. Allerdings wird ein Objekt zum HomeController vom MVC Framework erzeugt – dies übernimmt die <a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.defaultcontrollerfactory.aspx">DefaultControllerFactory</a>.</p>
<p>Zum Glück kann man auch eine eigene ControllerFactory schreiben. So würde es im Grunde aussehen:</p>
<p><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:89a4ad22-9ec1-4579-9844-6dded75da5d6" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">// nur für Demozwecke. Im richtigen Beispiel nutze ich MvcContrib
public class ControllerFactory : IControllerFactory
{
    public IController CreateController(RequestContext context, Type controllerType)
    {
        return IoC.Resolve&lt;IController&gt;(controllerType.Name);
    }
}</pre>
</div>
<p>Es gibt im MVC Framework momentan noch ein paar Ecken wo man nur über Umwege die Objekterzeugung steuern kann. Bei ActionFiltern wird es z.B. etwas kniffliger (<a href="http://www.lostechies.com/blogs/jimmy_bogard/archive/2010/05/03/dependency-injection-in-asp-net-mvc-filters.aspx">geht aber wohl auch</a> – vielleicht ein anderer Blogpost). Dies soll aber mit <a href="http://aspnet.codeplex.com/wikipage?title=Road%20Map&amp;ProjectName=aspnet">MVC3 besser werden</a> <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>MvcContrib</strong> </p>
<p>Ich nutze dafür aus dem <a href="http://mvccontrib.codeplex.com/">MvcContrib</a> Projekt die WindsorControllerFactory, benötigt werden aus den vielen DLLs lediglich zwei:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image994.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb178.png" width="244" height="194" /></a>&#160;</p>
<p><strong>Der Einstiegspunkt – Global.asax</strong></p>
<p>In die Global.asax habe ich einfach noch eine “Bootstrapper” Methode eingebaut:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c8554a38-99d5-49d4-8b4f-e5bb8e1cadf2" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">        protected void Application_Start()
        {
            Bootstrapper();

            AreaRegistration.RegisterAllAreas();
            RegisterRoutes(RouteTable.Routes);
        }

        private void Bootstrapper()
        {
            IWindsorContainer container = new WindsorContainer();
            // IFooService with DummyFooService
            container.Register(AllTypes.Pick().FromAssembly(typeof(MvcApplication).Assembly)
                    .WithService.FirstInterface());
            // Controller
            container.RegisterControllers(typeof(HomeController).Assembly);

            // Set the controller factory
            ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container));
        }</pre>
</div>
<p>Durch das nutzen der “WindsorControllerFactory” müssen auch alle Controller registriert werden. Dies geschieht in Zeile 16. In Zeile 19 wird dann die ControllerFactory gesetzt.</p>
<p>Fertig. Die richtige Implementation landet beim Aufruf des HomeControllers auch dort wo sie hin soll.</p>
<p><strong>Für andere IoC Container</strong></p>
<p>Phil Haack hat z.B. <a href="http://haacked.com/archive/2007/12/07/tdd-and-dependency-injection-with-asp.net-mvc.aspx">ein Post</a> mit StructureMap gemacht. In <a href="http://www.pnpguidance.net/Post/SetDefaultControllerFactoryIControllerFactoryASPNETMVCFramework.aspx">diesem Post</a> wird es mit Spring.NET gemacht.</p>
<p><strong>Wenn es komplexer wird</strong></p>
<p>In <a href="http://blog.coreycoogan.com/2009/11/06/castle-windsor-tutorial-in-asp-net-mvc/">diesem Post von Corey Coogan</a> ist ein komplexeres Beispiel erläutert. Jedenfalls hat mir der Blogpost recht viel gebracht und mein Blogpost soll es nur (etwas simpler) wiedergeben.</p>
<p><a href="http://code-inside.de/files/democode/mvccontrollerinjection/mvccontrollerinjection.zip"><strong>[ Download Democode ]</strong></a></p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=HowTo%3A+Dependency+Injection+in+ASP.NET+MVC+Controllern+mit+Windsor+Castle&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F07%2F02%2Fhowto-dependency-injection-in-asp-net-mvc-controllern-mit-windsor-castle%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/3kjLVl9omhs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/07/02/howto-dependency-injection-in-asp-net-mvc-controllern-mit-windsor-castle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/07/02/howto-dependency-injection-in-asp-net-mvc-controllern-mit-windsor-castle/</feedburner:origLink></item>
		<item>
		<title>ASP.NET MVP 2010</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/uvi5y7Wrqss/</link>
		<comments>http://code-inside.de/blog/2010/07/01/asp-net-mvp-2010/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 22:14:12 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[MVP]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/07/01/asp-net-mvp-2010/</guid>
		<description><![CDATA[ 
Für ein weiteres Jahr wurde ich von Microsoft mit dem ASP.NET MVP Award geehrt.  
Allen anderen MVPs, welche auch renominiert wurden oder neu ernannt, gratuliere ich natürlich auch.
<script type="text/javascript">SHARETHIS.addEntry({ title: "ASP.NET MVP 2010", url: "http://code-inside.de/blog/2010/07/01/asp-net-mvp-2010/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image992.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb176.png" width="107" height="167" /></a> </p>
<p>Für ein weiteres Jahr wurde ich von Microsoft mit dem ASP.NET MVP Award geehrt. <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Allen anderen MVPs, welche auch renominiert wurden oder neu ernannt, gratuliere ich natürlich auch.</p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=ASP.NET+MVP+2010&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F07%2F01%2Fasp-net-mvp-2010%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/uvi5y7Wrqss" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/07/01/asp-net-mvp-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/07/01/asp-net-mvp-2010/</feedburner:origLink></item>
		<item>
		<title>UI Prototyping mit SketchFlow &amp; Blend 4</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/T2oXHJfVdF4/</link>
		<comments>http://code-inside.de/blog/2010/06/30/ui-prototyping-mit-sketchflow-blend-4/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 23:20:25 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/06/30/ui-prototyping-mit-sketchflow-blend-4/</guid>
		<description><![CDATA[ 
Das man mit SketchFlow UI Prototypen bauen kann, ist ja kein großes Geheimnis. In Blend 3 hat mich das Feature aber nicht völlig umgehauen. In Blend 4 gibt es ein nettes Mockup Sample, welches bereits das ein oder andere Control mitbringt und die Verwendung besser aufzeigt. Für Besitzer von Blend 3: Der Umstieg ist [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "UI Prototyping mit SketchFlow &#38; Blend 4", url: "http://code-inside.de/blog/2010/06/30/ui-prototyping-mit-sketchflow-blend-4/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image983.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb167.png" width="244" height="68" /></a> </p>
<p>Das man mit SketchFlow UI Prototypen bauen kann, ist ja kein großes Geheimnis. In Blend 3 hat mich das Feature aber nicht völlig umgehauen. In Blend 4 gibt es ein nettes Mockup Sample, welches bereits das ein oder andere Control mitbringt und die Verwendung besser aufzeigt. Für Besitzer von Blend 3: Der Umstieg ist glaub ich sogar kostenlos auf die neue Version.</p>
<p> <span id="more-2705"></span>
<p><strong>Wichtig: Das Sample</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image984.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb168.png" width="227" height="338" /></a> </p>
<p>Dieses Sample Projekt beinhaltet einige Controls, die man wahrscheinlich regelmäßig braucht.</p>
<p>Auch der Umgang mit den Controls wird erläutert.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>In diesem Projekt befinden sich mehrere komplexere SketchFlow Controls:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image985.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb169.png" width="463" height="203" /></a> </p>
<p>Auch die Verwendung von diesen wird erklärt:</p>
<p><strong>Screenshots:</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image986.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb170.png" width="475" height="363" /></a> </p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image987.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb171.png" width="489" height="376" /></a> </p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image988.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb172.png" width="498" height="385" /></a> </p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image989.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb173.png" width="513" height="396" /></a> </p>
<p>Auch der Umgang mit Animationen wird näher erläutert:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image990.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb174.png" width="526" height="380" /></a> </p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image991.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb175.png" width="537" height="408" /></a> </p>
<p>Wer weitere Controls für SketchFlow sucht könnte sich folgende Links anschauen:</p>
<ul>
<li><a href="http://mockuptoxaml.codeplex.com/">Mockup2Xaml</a></li>
<li><a href="http://www.hardcodet.net/2010/05/announcing-sketchables">Sketchables</a></li>
</ul>
<p>Gefunden hab ich den Hinweis auf die neuen Funktionalitäten auf <a href="http://www.uxmagic.com/blog/post/2010/06/04/Blend-4-to-get-huge-SketchFlow-Prototyping-upgrade-with-new-e2809cMockupe2809d-controls.aspx">diesem Blog</a>.</p>
<p>Vielleicht geb ich SketchFlow ja nochmal eine Chance, ansonsten greif ich wieder zu Powerpoint <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=UI+Prototyping+mit+SketchFlow+%26amp%3B+Blend+4&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F06%2F30%2Fui-prototyping-mit-sketchflow-blend-4%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/T2oXHJfVdF4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/06/30/ui-prototyping-mit-sketchflow-blend-4/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/06/30/ui-prototyping-mit-sketchflow-blend-4/</feedburner:origLink></item>
		<item>
		<title>HowTo: Alle Implementationen vom Interface X über Castle Windsor per DI auflösen</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/PheqAp_zB1M/</link>
		<comments>http://code-inside.de/blog/2010/06/27/howto-alle-implementationen-vom-interface-x-ber-castle-windsor-per-di-auflsen/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 22:24:37 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Castle]]></category>
		<category><![CDATA[DI]]></category>
		<category><![CDATA[Windsor]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/06/27/howto-alle-implementationen-vom-interface-x-ber-castle-windsor-per-di-auflsen/</guid>
		<description><![CDATA[ 
Der Titel klingt recht &#34;kompliziert”, ist es aber eigentlich gar nicht. Grundproblem: Wir haben ein Interface und mehrere Implementationen davon. In unserer Applikation wollen diese über Konstruktor-Injektion holen und nacheinander aufrufen. Mit dem ArrayResolver und Castle Windsor dies sehr einfach zu bewerkstelligen. Der Blogpost darf auch als “realer” Einstieg in das Thema Dependency Injection [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "HowTo: Alle Implementationen vom Interface X &#252;ber Castle Windsor per DI aufl&#246;sen", url: "http://code-inside.de/blog/2010/06/27/howto-alle-implementationen-vom-interface-x-ber-castle-windsor-per-di-auflsen/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image980.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb164.png" width="211" height="162" /></a> </p>
<p>Der Titel klingt recht &quot;kompliziert”, ist es aber eigentlich gar nicht. Grundproblem: Wir haben ein Interface und mehrere Implementationen davon. In unserer Applikation wollen diese über Konstruktor-Injektion holen und nacheinander aufrufen. Mit dem ArrayResolver und Castle Windsor dies sehr einfach zu bewerkstelligen. Der Blogpost darf auch als “realer” Einstieg in das Thema Dependency Injection angesehen werden.</p>
<p> <span id="more-2685"></span>
<p><strong>Grundlagen</strong></p>
<p>Einen kleinen Einstieg hab ich <a href="http://code-inside.de/blog/2010/03/15/howto-dependency-injection-service-locator/">hier</a> bereits gegeben. In meinem Beispiel nutze ich <a href="http://www.castleproject.org/container/index.html">Castle Windsor</a>, genauso gut hätte ich wahrscheinlich ein anderes DI Framework nehmen können. </p>
<p><strong>Benötigte Assemblies</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image981.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb165.png" width="203" height="97" /></a> </p>
<p>Der <a href="http://www.castleproject.org/castle/download.html">Download</a> von Castle Windsor kann erstmal etwas erschreckend sein. Benötigt werden diese 4 Dlls (Core/DynamicProxy2/MicroKernel/Windsor).</p>
<p>&#160;</p>
<p><strong>Mein (reales) Beispiel</strong></p>
<p>Wir haben bei uns eine Applikation die auf einige Backend Systeme zugreift. Da die Backend Systeme ab und an “einschlafen” haben wir ein “WakeUpTool” geschrieben, welches nach einem bestimmten Intervall die Systeme auf Stand-by hält. </p>
<p>Wir haben bei uns ein “IWakeUpCommand” mit der simplen Methode “WakeUp”. Pro Backendsystem gibt es eine Implementation davon. Die einzelnen Aufwach-Befehle können völlig getrennt voneinander agieren. Wichtig ist nur, dass immer alle geladen werden.   <br />Da es sein kann, dass nun noch ein weiteres Backend System dazu kommt (oder eins wegfällt), wollten wir die Verbindung zwischen ApplicationRunner und den einzelnen Commands so lose wie möglich gestalten. </p>
<p><strong>Fake Beispiel</strong></p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image982.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb166.png" width="244" height="213" /></a> In meinem Beispiel, welches ihr ganz unten auch runterladen könnt, wird einfach nur ein ConsoleWriteLine ausgegeben. </p>
<p>In dem Beispiel gibt es das Interface “ICommand” mit der Methode “Exceute” und 3 Implementationen.</p>
<p>&#160;</p>
<p>Das Interface “IApplicationRunner” beinhaltet nur eine “Run” Methode. Dies ist mein eigentlicher Eintrittspunkt in die Applikationslogik. </p>
<p>Beispiel Command:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:2caa3608-03f6-4c49-9c87-083a0c6305b9" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">namespace CastleWindsorFindAllImplementations.Commands
{
    public class WakeUpCommand : ICommand
    {
        public void Execute()
        {
            Console.WriteLine("WakeUpCommand");
        }
    }
}</pre>
</div>
<p>Der ApplicationRunner nimmt einfach ein Array an ICommands entgegen und ruft diese nacheinander auf. Keine große Magie. </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:e1b6fcb0-a358-4158-8ecd-66bc84450468" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">namespace CastleWindsorFindAllImplementations
{
    public class ApplicationRunner : IApplicationRunner
    {
        private ICommand[] _commands;

        public ApplicationRunner(ICommand[] commands)
        {
            this._commands = commands;
        }

        public void Run()
        {
            foreach (ICommand command in _commands)
            {
                command.Execute();
            }
        }
    }
}</pre>
</div>
<p><strong>Castle Windsor Magie – wie der ApplicationRunner zu den Implementationen kommt!</strong></p>
<p>Ganz am Anfang registrieren wir einen ArrayResolver für Windsor Castle. Nur damit kann unser “container” auch Arrays auflösen.</p>
<p>Die Zeile 7 erspart eine Menge tipparbeit. Damit wird dem Container (so wie ich es verstanden habe <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) gesagt, dass er alle Interfaces suchen soll und dazu die passenden Implementationen registrieren soll. Suchen soll er zudem nur in dieser Assembly. Nur durch diesen Automatismus ist es auch erst elegant, weil man so einfach nur eine neuen Command hinzufügen muss und das Framework kümmert sich um die Auflösung. Man muss kein Setup etc. anpassen. Sehr praktisch, aber sicherlich wird es auch zu Problemen führen wenn es komplexer wird. </p>
<p>In Zeile 10 holen wir uns über den “container” unseren IApplicationRunner und sagen dann einfach nur “Run”. Windsor Castle hat als einzige Implementation unsere “ApplicationRunner” Klasse gefunden. Diese wiederrum braucht ein Array aus ICommands. Voodoo <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:12271daa-b0a1-4d4c-a392-87e3a54c12e3" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">    class Program
    {
        static void Main(string[] args)
        {
            IWindsorContainer container = new WindsorContainer();
            container.Kernel.Resolver.AddSubResolver(new ArrayResolver(container.Kernel));
            container.Register(AllTypes.Pick().FromAssembly(typeof(ApplicationRunner).Assembly)
                    .WithService.FirstInterface());

            IApplicationRunner runner = container.Resolve&lt;IApplicationRunner&gt;();
            runner.Run();

            Console.ReadLine();
        }
    }</pre>
</div>
<p><strong>Was ist wenn ich einen konkreten Typ von ICommand haben will?</strong></p>
<p>Dann hat man erst mal ein Problem, weil es so nicht vorgesehen ist. Was man machen kann ist bestimmten Komponenten innerhalb des “containers” einen Namen zu geben. </p>
<p><strong>Fazit</strong></p>
<p> Diese Methode ist äußerst praktisch wenn man einfach nur eine Liste von Implementationen nutzen will ohne sie explizit erst zu registrieren. Einen genauen Typen daraus wieder herauszupuzzeln ist allerdings schwieriger.</p>
<p><strong><a href="http://code-inside.de/files/democode/CastleWindsorFindAllImplementations/CastleWindsorFindAllImplementations.zip">[ Download Democode ]</a></strong></p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=HowTo%3A+Alle+Implementationen+vom+Interface+X+%26uuml%3Bber+Castle+Windsor+per+DI+aufl%26ouml%3Bsen&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F06%2F27%2Fhowto-alle-implementationen-vom-interface-x-ber-castle-windsor-per-di-auflsen%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/PheqAp_zB1M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/06/27/howto-alle-implementationen-vom-interface-x-ber-castle-windsor-per-di-auflsen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/06/27/howto-alle-implementationen-vom-interface-x-ber-castle-windsor-per-di-auflsen/</feedburner:origLink></item>
		<item>
		<title>Remote Desktop Connection Manager</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/tCadWN6QH3k/</link>
		<comments>http://code-inside.de/blog/2010/06/16/remote-desktop-connection-manager/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 13:38:51 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/06/16/remote-desktop-connection-manager/</guid>
		<description><![CDATA[ 
Wer auf mehreren Systemen über RDP Zugriff hat, der kann recht leicht den Überblick verlieren. Vor allem wenn man für jede Verbindung andere Credentials braucht. Microsoft hat vor kurzem den Remote Desktop Connection Manager freigegeben, der das Verwalten von RDP Sessions vereinfacht.
 
Ein paar nette Features seien hier noch erwähnt:

Die Verbindungen können in einer [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Remote Desktop Connection Manager", url: "http://code-inside.de/blog/2010/06/16/remote-desktop-connection-manager/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image979.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb163.png" width="135" height="124" /></a> </p>
<p>Wer auf mehreren Systemen über RDP Zugriff hat, der kann recht leicht den Überblick verlieren. Vor allem wenn man für jede Verbindung andere Credentials braucht. Microsoft hat vor kurzem den <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4603c621-6de7-4ccb-9f51-d53dc7e48047&amp;displaylang=en">Remote Desktop Connection Manager</a> freigegeben, der das Verwalten von RDP Sessions vereinfacht.</p>
<p> <span id="more-2678"></span>
<p>Ein paar nette Features seien hier noch erwähnt:</p>
<ul>
<li>Die Verbindungen können in einer Baum-Struktur gespeichert werden, ähnlich dem Windows Explorer.</li>
<li>Für jeden Ordner oder jedes System kann man die Credentials hinterlegen</li>
<li>Wer über einen Remote Gateway gehen muss kann diesen ebenfalls mit angeben. </li>
<li>Kann auch sonst alles was der RDP Client im Windows kann.</li>
<li>… und es ist kostenlos und es funktioniert recht gut <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
</ul>
<p>Ein kleiner Kritikpunkt: RDP Dateien kann man scheinbar nicht importieren, d.h. man muss die Verbindungsdaten nochmal eingeben.</p>
<p>Auf das Tool bin ich durch <a href="http://www.faq-o-matic.net/2010/06/13/rdp-verbindungsmanager-fr-admins/">diesen Blogpost</a> aufmerksam geworden. </p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=4603c621-6de7-4ccb-9f51-d53dc7e48047"><strong>[ Zum Download ]</strong></a></p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=Remote+Desktop+Connection+Manager&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F06%2F16%2Fremote-desktop-connection-manager%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/tCadWN6QH3k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/06/16/remote-desktop-connection-manager/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/06/16/remote-desktop-connection-manager/</feedburner:origLink></item>
		<item>
		<title>HowTo: “PublishedApplications” mit MSBuild &amp; dem TFS für Windows Services / DLLs</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/vFwkrBhEGUg/</link>
		<comments>http://code-inside.de/blog/2010/06/10/howto-publishedapplications-mit-msbuild-dem-tfs-fr-windows-services-dlls/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 12:01:25 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[MSBuild]]></category>
		<category><![CDATA[TFS]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/06/10/howto-publishedapplications-mit-msbuild-dem-tfs-fr-windows-services-dlls/</guid>
		<description><![CDATA[ 
Wir benutzen bei uns für den Build Prozess MSBuild und nutzen den Team Foundation Server. Wer eine ASP.NET Applikation baut bekommt diese in einem “PublishedWebsites” Ordner serviert. Jegliche andere Sachen werden aber einfach ins Bin/Release Verzeichnis kopiert. Da das nicht gerade besonders hilfreich ist, kann man das natürlich auch ändern – allerdings mit etwas [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "HowTo: &#8220;PublishedApplications&#8221; mit MSBuild &#38; dem TFS f&#252;r Windows Services / DLLs", url: "http://code-inside.de/blog/2010/06/10/howto-publishedapplications-mit-msbuild-dem-tfs-fr-windows-services-dlls/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image978.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb162.png" width="162" height="92" /></a> </p>
<p>Wir benutzen bei uns für den Build Prozess MSBuild und nutzen den Team Foundation Server. Wer eine ASP.NET Applikation baut bekommt diese in einem “PublishedWebsites” Ordner serviert. Jegliche andere Sachen werden aber einfach ins Bin/Release Verzeichnis kopiert. Da das nicht gerade besonders hilfreich ist, kann man das natürlich auch ändern – allerdings mit etwas basteln.</p>
<p> <span id="more-2675"></span>
<p><strong>Was muss man tun um die Ordnerstruktur beizubehalten?</strong></p>
<p>Eigentlich möchte man ja pro Applikation einen eigenen Output Folder haben. Leider baut der TFS alles und kopiert das Ergebnis einfach ins Release Verzeichnis.   <br />In unserem Beispiel haben wir eine TFSBuild.proj Datei, welche momentan 3 Solutions baut.    <br />Die Solutionnames sind bei uns natürlich etwas anders <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<ul>
<li>“Websolution1” enthält im Großen und Ganzen eine ASP.NET MVC Webseite.</li>
<li>“Websolution2” enthält einen Webservice </li>
<li>“WindowsSolution1” enthält einen Windows Dienst und einige andere Klassenbibliotheken.</li>
</ul>
<p>Der TFS legt automatisch für ASP.NET Projekte einen “PublishedWebsites” Ordner an. </p>
<p>Hier mal direkt einen Ausschnitt aus dem TFSBuild.proj File:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:4a126f43-c582-4539-a9c5-fc6b3ddae947" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">    &lt;SolutionToBuild Include="$(BuildProjectFolderPath)/../../Main/Source/Websolution1.sln"&gt;
        &lt;Targets&gt;&lt;/Targets&gt;
        &lt;Properties&gt;OutDir=$(OutDir)&lt;/Properties&gt;
    &lt;/SolutionToBuild&gt;
    &lt;SolutionToBuild Include="$(BuildProjectFolderPath)/../../Main/Source/Websolution2.sln"&gt;
        &lt;Targets&gt;&lt;/Targets&gt;
        &lt;Properties&gt;OutDir=$(OutDir)&lt;/Properties&gt;
    &lt;/SolutionToBuild&gt;
    &lt;SolutionToBuild Include="$(BuildProjectFolderPath)/../../Main/Source/WindowsSolution1.sln"&gt;
      &lt;Targets&gt;&lt;/Targets&gt;
      &lt;Properties&gt;&lt;/Properties&gt;
    &lt;/SolutionToBuild&gt;
  &lt;/ItemGroup&gt;

  &lt;PropertyGroup&gt;
    &lt;CustomizableOutDir&gt;true&lt;/CustomizableOutDir&gt;
  &lt;/PropertyGroup&gt;</pre>
</div>
<p>Wichtig ist die untere PropertyGroup und das der Wert “<a href="http://msdn.microsoft.com/en-us/library/aa337598.aspx">CustomizableOutDir</a>” auf “true” gesetzt ist. Damit wird im Grunde der Default-Mechanismus des TFS ausgeschalten. Daher muss man in den Properties das OutDir mitgeben. Da es bei den Webseiten keine Problem gab setzt ich es wieder zum Standard.</p>
<p>Nun geht man in die Projektdatei von dem Windowsservice (welche in der WindowsSolution1) ist. Dort hab ich es wie folgt angepasst:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d1682145-79aa-432d-88cb-52d8ae28d30b" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">  &lt;PropertyGroup&gt;
    &lt;PublishedApplicationOutputDir Condition=" '$(TeamBuildOutDir)'!='' "&gt;$(TeamBuildOutDir)_PublishedApplications\$(MSBuildProjectName)&lt;/PublishedApplicationOutputDir&gt;
    &lt;PublishedApplicationOutputDir Condition=" '$(TeamBuildOutDir)'=='' "&gt;$(MSBuildProjectDirectory)&lt;/PublishedApplicationOutputDir&gt;
  &lt;/PropertyGroup&gt;

  &lt;PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "&gt;
    &lt;DebugType&gt;pdbonly&lt;/DebugType&gt;
    &lt;Optimize&gt;true&lt;/Optimize&gt;
    &lt;OutputPath&gt;$(PublishedApplicationOutputDir)&lt;/OutputPath&gt;
    &lt;DefineConstants&gt;TRACE&lt;/DefineConstants&gt;
    &lt;ErrorReport&gt;prompt&lt;/ErrorReport&gt;
    &lt;WarningLevel&gt;4&lt;/WarningLevel&gt;
  &lt;/PropertyGroup&gt;</pre>
</div>
<p>Wenn es vom TeamBuild gebaut wird gibt der TFS die Property TeamBuildOutDir mit rein und setzt entsprechend meinen gewünschten “PublishedApplication” Pfad. </p>
<p>Das ganze wird am Ende als OutputPath bestimmt und schon haben wir pro Windowsdienst / Klassenbibliothek etc. einen eigenen Output-Folder.</p>
<p>Meine Lösung stammt ursprünglich von <a href="http://mikehadlow.blogspot.com/2009/10/tfs-build-publishedwebsites-for-exe-and.html">diesem Blogpost</a>. Hintergrund für das CustomizableOutDir Verhalten kann man in diesem <a href="http://mikehadlow.blogspot.com/2009/10/tfs-build-publishedwebsites-for-exe-and.html">Blogpost nachlesen</a>. </p>
<p>Wenn man auf das Datum der Blogposts schaut, sieht man, dass das Problem schon etwas älter ist, aber ich bin jetzt erst drauf gestoßen <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>MSBuild</strong></p>
<p>Wer einen Einstieg in MSBuild sucht, der findet eine klasse Serie auf Thorsten Hans seinem Blog: <a href="http://dotnet-forum.de/blogs/thorstenhans/pages/das-msbuild-universum.aspx">Das MSBuild Universum</a></p>
<p><strong>PS:</strong> Natürlich geb ich keine Garantie ab, dass dies die ideale Lösung ist. Aber es baut erstmal <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=HowTo%3A+%26ldquo%3BPublishedApplications%26rdquo%3B+mit+MSBuild+%26amp%3B+dem+TFS+f%26uuml%3Br+Windows+Services+%2F+DLLs&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F06%2F10%2Fhowto-publishedapplications-mit-msbuild-dem-tfs-fr-windows-services-dlls%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/vFwkrBhEGUg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/06/10/howto-publishedapplications-mit-msbuild-dem-tfs-fr-windows-services-dlls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/06/10/howto-publishedapplications-mit-msbuild-dem-tfs-fr-windows-services-dlls/</feedburner:origLink></item>
		<item>
		<title>Für absolute ASP.NET MVC Neulinge: MVC Music Store &amp; warum man es nicht al Best Practices verstehen sollte</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/z-l42PMFKbE/</link>
		<comments>http://code-inside.de/blog/2010/05/17/fr-absolute-asp-net-mvc-neulinge-mvc-music-store-warum-man-es-nicht-al-best-practices-verstehen-sollte/#comments</comments>
		<pubDate>Mon, 17 May 2010 21:56:58 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/05/17/fr-absolute-asp-net-mvc-neulinge-mvc-music-store-warum-man-es-nicht-al-best-practices-verstehen-sollte/</guid>
		<description><![CDATA[Wer mal in die ASP.NET MVC Entwicklung reinschauen möchte, der kann sich von Microsoft das Nerddinner und seit neustem auch den MVC Music Store samt PDF Anleitung anschauen. Allerdings ist die Anwendung mit Vorsicht zu genießen und IMHO nicht als Best Practices zu verstehen.
 

Laut Projektbeschreibung (“MVC Music Store is a tutorial application built on [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "F&#252;r absolute ASP.NET MVC Neulinge: MVC Music Store &#38; warum man es nicht al Best Practices verstehen sollte", url: "http://code-inside.de/blog/2010/05/17/fr-absolute-asp-net-mvc-neulinge-mvc-music-store-warum-man-es-nicht-al-best-practices-verstehen-sollte/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image977.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb161.png" width="153" height="100" /></a>Wer mal in die ASP.NET MVC Entwicklung reinschauen möchte, der kann sich von Microsoft das <a href="http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx">Nerddinner</a> und seit neustem auch den <a href="http://mvcmusicstore.codeplex.com/">MVC Music Store samt PDF Anleitung</a> anschauen. Allerdings ist die Anwendung mit Vorsicht zu genießen und IMHO <strong><u>nicht</u> als Best Practices zu verstehen</strong>.</p>
<p> <span id="more-2672"></span>
</p>
<p>Laut Projektbeschreibung (<em>“MVC Music Store is a tutorial application built on ASP.NET MVC 2. It&#8217;s a lightweight sample store which sells albums online, demonstrating ASP.NET MVC 2&#8217;s productivity features and data access via Entity Framework 4. See what you can do with MVC 2 in under 1000 lines of c# code!”)</em> soll dieses Sample die “Produktivitätsfeatures” von ASP.NET MVC 2 zeigen. Mehr aber auch nicht.</p>
<p><strong>Warum es nicht als Best Practices zu verstehen sein soll/sollte:</strong></p>
<ul>
<li>Keine Unit Tests</li>
<ul>
<li>Leider spricht Microsoft viel zu häufig von Testbarkeit anstatt mal ein gutes Sample zu erstellen</li>
</ul>
<li>Die Controller enthalten DB/Repository Logik. Abfragen werden dort direkt gegen den Entity Framework Context gemacht. Das ist nicht schön und ist auch für die Testbarkeit der Super GAU.</li>
<li>Fehlerbehandlung/Logging/Dependency Injection: Fehlt alles komplett. </li>
<li>Lokalisierung: Fehlanzeige</li>
<li>Profildaten speichern? MIt der (fragwürdigen) Profile API oder wie? Hier wird kein Ansatz gezeigt.</li>
<li>Ayende hat sich die Anwendung in Hinsicht auf die Performance/Skalierbarkeit angeschaut: <a href="http://ayende.com/Blog/archive/2010/05/17/analyzing-the-mvc-music-store-data-access.aspx">Da geht auch noch was</a>.</li>
</ul>
<p>IMHO ein netter Showcase was man in ein paar Stunden sicherlich zusammenbasteln kann, mehr aber auch nicht. Wie ein typisches Microsoft Sample halt ist – es zeigt recht gut die einfachen Anfänge, leider aber nicht die Feinheiten wenn es wirklich schwierig wird.</p>
<p>Wer sich die Funktionsweise von <a href="http://www.asp.net/mvc">ASP.NET MVC 2</a> anschauen will, kann einen Blick reinwerfen, aber bitte nicht alle Konzepte übernehmen, sondern mit etwas Weitsicht handeln <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=F%26uuml%3Br+absolute+ASP.NET+MVC+Neulinge%3A+MVC+Music+Store+%26amp%3B+warum+man+es+nicht+al+Best+Practices+verstehen+sollte&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F05%2F17%2Ffr-absolute-asp-net-mvc-neulinge-mvc-music-store-warum-man-es-nicht-al-best-practices-verstehen-sollte%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/z-l42PMFKbE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/05/17/fr-absolute-asp-net-mvc-neulinge-mvc-music-store-warum-man-es-nicht-al-best-practices-verstehen-sollte/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/05/17/fr-absolute-asp-net-mvc-neulinge-mvc-music-store-warum-man-es-nicht-al-best-practices-verstehen-sollte/</feedburner:origLink></item>
		<item>
		<title>Was bedeutet eigentlich System.webServer –  “validateIntegratedModeConfiguration” &amp; “runAllManagedModulesForAllRequests”</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/B0SbmZd7WII/</link>
		<comments>http://code-inside.de/blog/2010/05/17/was-bedeutet-eigentlich-system-webserver-validateintegratedmodeconfiguration-runallmanagedmodulesforallrequests/#comments</comments>
		<pubDate>Sun, 16 May 2010 23:03:41 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[IIS7]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/05/17/was-bedeutet-eigentlich-system-webserver-validateintegratedmodeconfiguration-runallmanagedmodulesforallrequests/</guid>
		<description><![CDATA[ 
Ein Kollege, der eine IIS6 Webapplikation auf IIS7 migriert, fragte mich was denn eigentlich dieses Validation Tag bedeutet. Unter ASP.NET 4.0 ist die Web.config um einiges schlanker, allerdings taucht das Validation und Modules Tag wieder auf. Was hat es mit den beiden Flags auf sich?
 
Migration auf IIS7
Der Post soll nur die beiden Properties [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Was bedeutet eigentlich System.webServer &#8211;  &#8220;validateIntegratedModeConfiguration&#8221; &#38; &#8220;runAllManagedModulesForAllRequests&#8221;", url: "http://code-inside.de/blog/2010/05/17/was-bedeutet-eigentlich-system-webserver-validateintegratedmodeconfiguration-runallmanagedmodulesforallrequests/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image974.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb158.png" width="199" height="102" /></a> </p>
<p>Ein Kollege, der eine IIS6 Webapplikation auf IIS7 migriert, fragte mich was denn eigentlich dieses Validation Tag bedeutet. Unter ASP.NET 4.0 ist die Web.config um einiges schlanker, allerdings taucht das Validation und Modules Tag wieder auf. Was hat es mit den beiden Flags auf sich?</p>
<p> <span id="more-2669"></span>
<p><strong>Migration auf IIS7</strong></p>
<p>Der Post soll nur die beiden Properties beleuchten. Wer eine Migration auf von IIS6 auf IIS7 machen möchte, der sollte <a href="http://mvolo.com/blogs/serverside/archive/2007/12/08/IIS-7.0-Breaking-Changes-ASP.NET-2.0-applications-Integrated-mode.aspx">hier</a> sich genauere Informationen besorgen. </p>
<p><strong>system.webServer</strong></p>
<p>Wer eine frische ASP.NET MVC Anwendung erstellt findet in der web.config diese Konfiguration:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f91f3b93-c2f6-4e11-b5de-546215c79d81" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">  &lt;system.webServer&gt;
    &lt;validation validateIntegratedModeConfiguration="false"/&gt;
    &lt;modules runAllManagedModulesForAllRequests="true"/&gt;
  &lt;/system.webServer&gt;</pre>
</div>
<p><strong>Validation: “validateIntegratedModeConfiguration”</strong></p>
<p> Im Standardfall ist dies auf “false” gesetzt. Vor dem IIS7 hat man alle Handler &amp; Module unter “System.Web” oder irgendwo in der web.config verstreut&#160; reingeschrieben. Ab dem IIS7 wurde ein spezieller Bereich in der web.config für den Webserver eingerichtet: system.webServer. Mit dem IIS7 gibt es mehrere Möglichkeiten sich in den ASP.NET Prozess einzuklinken. Das ist der s.g. “Integrated” Mode.<br />
  <br />Mit dem validation Tag &amp; dem Property <a href="http://msdn.microsoft.com/en-us/library/bb422433(VS.90).aspx">validateIntegratedModeConfiguration</a> wird im Grunde nur geprüft ob die web.config vollständig richtig konfiguriert ist. Würde das Flag auf “true” stehen, würde eine Fehlermeldung kommen wenn unter in der web.config einfach so ein &lt;HttpModules&gt; stehen würde.</p>
<p>Da viele Anwendung aber trotzdem noch korrekt auf dem IIS6 laufen sollen und auch der interne Entwicklungsserver im Visual Studio (Cassini) auf IIS6 aufbaut, ist das Flag auf “false” gesetzt. Es wird im Grunde nur die Fehlermeldung ignoriert. </p>
<p><strong>Modules: “runAllManagedModulesForAllRequests”</strong></p>
<p>Wer auf dem IIS6 versucht hat “endunglose” URLs wie z.B. </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f442b90a-19f0-4fe6-9561-c4d824a1d5da" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">http://code-inside.de/blog/2010/05/16/howto-visual-studio-immer-als-admin-starten/</pre>
</div>
<p>Der musste entweder direkt am IIS etwas ändern oder etwas <a href="http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx">rumbasteln</a>. Ähnliche Änderungen am IIS6 sind auch notwendig wenn man eine ASP.NET MVC Anwendung <a href="http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx">zum Laufen</a> bekommen will. </p>
<p>Mit dem Flag “runAllManagedModulesForAllRequests” wird der IIS nur angewiesen alle registrierten “verwalteten” Module bei jedem Request zu durchlaufen:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image975.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb159.png" width="533" height="374" /></a> </p>
<p>Diese kann man pro Seite jeweils im <a href="http://learn.iis.net/page.aspx/121/iis-7-modules-overview/">IIS verwalten</a>. Das Flag ist also nur ein Shortcut um die web.config nicht unendlich aufzublähen und damit man im IIS zentral dies steuern kann.</p>
<p>Statische Dateien, wie z.B. jpegs, durchlaufen nicht diese Module. “Statische Datein” können ebenfalls im IIS verwaltet werden.</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image976.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb160.png" width="369" height="220" /></a></p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=Was+bedeutet+eigentlich+System.webServer+%26%238211%3B++%26ldquo%3BvalidateIntegratedModeConfiguration%26rdquo%3B+%26amp%3B+%26ldquo%3BrunAllManagedModulesForAllRequests%26rdquo%3B&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F05%2F17%2Fwas-bedeutet-eigentlich-system-webserver-validateintegratedmodeconfiguration-runallmanagedmodulesforallrequests%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/B0SbmZd7WII" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/05/17/was-bedeutet-eigentlich-system-webserver-validateintegratedmodeconfiguration-runallmanagedmodulesforallrequests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/05/17/was-bedeutet-eigentlich-system-webserver-validateintegratedmodeconfiguration-runallmanagedmodulesforallrequests/</feedburner:origLink></item>
		<item>
		<title>HowTo: Visual Studio immer als Admin starten</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/jiLN3uzjbnA/</link>
		<comments>http://code-inside.de/blog/2010/05/16/howto-visual-studio-immer-als-admin-starten/#comments</comments>
		<pubDate>Sun, 16 May 2010 22:11:02 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[UAC]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/?p=2660</guid>
		<description><![CDATA[ 
Wer den richtigen IIS als Development Server nimmt, der wird das Problem unter Vista &#38; Win7 kennen:     Solange die Benutzerkontensteuerung/UAC nicht ausgeschalten ist, muss man erst mühsam über *Rechtsklick* *Als Admin ausführen* klicken. Mit einem kleinen Trick spart man sich das Geklicke im Kontextmenü.
 
“Programm als Administrator ausführen”
Diese Einstellung kann [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "HowTo: Visual Studio immer als Admin starten", url: "http://code-inside.de/blog/2010/05/16/howto-visual-studio-immer-als-admin-starten/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image972.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb156.png" width="196" height="120" /></a> </p>
<p>Wer den <a href="http://code-inside.de/blog/2009/03/19/howto-iis7-als-development-server-im-visual-studio-2008-einrichten/">richtigen IIS als Development Server</a> nimmt, der wird das Problem unter Vista &amp; Win7 kennen:    <br /> Solange die Benutzerkontensteuerung/UAC nicht ausgeschalten ist, muss man erst mühsam über *Rechtsklick* *Als Admin ausführen* klicken. Mit einem kleinen Trick spart man sich das Geklicke im Kontextmenü.</p>
<p> <span id="more-2660"></span>
<p><strong>“Programm als Administrator ausführen”</strong></p>
<p>Diese Einstellung kann man im Kompatibilitätstab in den Eigenschaften machen:</p>
<p><a href="http://code-inside.de/blog/wp-content/uploads/image973.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb157.png" width="269" height="378" /></a> </p>
<p>Bei einem Doppelklick auf ein .SLN File wird diese Exe aufgerufen:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d124fd5f-85d6-4fe6-885c-902d301ac08b" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\VSLauncher.exe
</pre>
</div>
<p>Die normale Exe liegt dort:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d7069844-3cc5-40eb-946b-66ac71198f3d" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe</pre>
</div>
</p>
<p>Diese Einstellung<strong> bei beiden Dateien</strong> machen. Ohne weitere Änderungen der UAC kommt weiter der “Warndialog” – allerdings vergisst man nun nicht mehr VS als Admin auszuführen und man muss nicht in Kontextmenüs nach dem “Als Admin ausführen” suchen. </p>
<p>Wer Desktop Programme entwickelt sollte sich allerdings im Hinterkopf behalten, dass sein Programm auch ohne Admin-Rechte laufen sollte – jedenfalls für den gewöhnlichen Nutzer.</p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=HowTo%3A+Visual+Studio+immer+als+Admin+starten&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F05%2F16%2Fhowto-visual-studio-immer-als-admin-starten%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/jiLN3uzjbnA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/05/16/howto-visual-studio-immer-als-admin-starten/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/05/16/howto-visual-studio-immer-als-admin-starten/</feedburner:origLink></item>
		<item>
		<title>HowTo: ASP.NET Anwendungen auf IIS6/7 &amp; co. zum Laufen bekommen</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/hzdpzVVS_9w/</link>
		<comments>http://code-inside.de/blog/2010/05/10/howto-asp-net-anwendungen-auf-iis67-co-zum-laufen-bekommen/#comments</comments>
		<pubDate>Mon, 10 May 2010 20:58:59 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[IIS]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/05/10/howto-asp-net-anwendungen-auf-iis67-co-zum-laufen-bekommen/</guid>
		<description><![CDATA[Der IIS (insbesondere der IIS6) kann sich unter Umständen recht zickig anstellen wenn man eine ASP.NET (oder noch schlimmer: ASP.NET MVC) Anwendung zum Laufen bekommen möchte. Hier ein paar zusammengestellte Tipps für Windows Server 2003 (IIS6) und spätere Versionen. (IIS7 / IIS7.5)
 

Die Tipps gelten für Windows Server 2003 bzw. höhere Versionen – auch wenn [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "HowTo: ASP.NET Anwendungen auf IIS6/7 &#38; co. zum Laufen bekommen", url: "http://code-inside.de/blog/2010/05/10/howto-asp-net-anwendungen-auf-iis67-co-zum-laufen-bekommen/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image968.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb153.png" width="159" height="77" /></a>Der IIS (insbesondere der IIS6) kann sich unter Umständen recht zickig anstellen wenn man eine ASP.NET (oder noch schlimmer: ASP.NET MVC) Anwendung zum Laufen bekommen möchte. Hier ein paar zusammengestellte Tipps für Windows Server 2003 (IIS6) und spätere Versionen. (IIS7 / IIS7.5)</p>
<p> <span id="more-2654"></span>
</p>
<p>Die Tipps gelten für Windows Server 2003 bzw. höhere Versionen – auch wenn es da deutlich einfacher geworden ist.</p>
<ul>
<li>Ist die richtige .NET Version auf dem Server installiert?</li>
<ul>
<li>Nachprüfen kann man das entweder über Programme/Software in der Systemsteuerung oder man schaut mal in den GAC (C:\Windows\assembly) ob dort .NET DLLs mit der nötigen Versionsnummer da sind.</li>
<li>Wenn es nicht installiert ist: Einfach die neuste Version installieren.</li>
</ul>
<li>Ist auf dem Windows Server überhaupt der IIS installiert?</li>
<ul>
<li>Nachprüfen kann man das in der Systemsteuerung unter Software/Programme. Der IIS ist unter den Windows Komponenten zu finden.</li>
<li>Wenn er nicht installiert ist: Den nächsten Punkt noch beachten.</li>
</ul>
<li>Ist im IIS die .NET Unterstützung mit installiert? Im IIS 7 gibt es so genannte “Anwendungsentwicklungsfeatures” – dort ASP.NET mit anklicken. Im IIS6 gibt es glaub ich was ähnliches.</li>
<li>Jetzt muss man rausbekommen unter welcher Version die Anwendung laufen lassen möchte:</li>
<ul>
<li>Im IIS6 ist das etwas magisch. Auf 32bit Maschinen gibt es unter Eigenschaften einer Webseite einen ASP.NET Tab – auf einer 64bit Maschine muss man erst mal irgendwelche <a href="http://weblogs.asp.net/plip/archive/2006/05/25/Where_2700_s-the-ASP.NET-Tab-in-IIS_3F00_-It_2700_s-Missing_2100_-I_2700_ve-installed-.NET-2.0-_2E002E002E00_.aspx">RegistryKeys umändern</a>. Allerdings läuft bei mir eine ASP.NET MVC Anwendung im IIS6 auch ohne das ich diesen Reiter hab. Wer ihn sieht, sollte mal nachschauen ob dort evtl. ASP.NET 1.1 ausgewählt ist.</li>
<li>Im IIS7 (und IIS7.5) wird dies über die Anwendungspools geregelt<a href="http://code-inside.de/blog/wp-content/uploads/image969.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://code-inside.de/blog/wp-content/uploads/image_thumb154.png" width="244" height="219" /></a> </li>
</ul>
<li>Ganz wichtig: asp_regiis.exe</li>
<ul>
<li>Diese Datei registriert macht ein paar wichtige Änderungen am IIS. Bis .NET 4.0 muss man diese Datei ausführen:</li>
<ul>
<li>C:\Windows\Microsoft.NET\Framework\v2.0.50727\asp_regiis.exe –i</li>
</ul>
<li>Ab .NET 4.0 gibt es eine neue Variante unter der Frameworkversion v4… </li>
</ul>
<li>Wenn man eine ASP.NET MVC Anwendung unter IIS6 zum Laufen bringen soll: Ein Wildcard Mapping auf die aspnet_isapi.dll &amp; deaktivieren von “Verify that the file exists” unter den Konfigurationsoptionen im Basisverzeichnis Tab oder <a href="http://blog.stevensanderson.com/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/">diese Tipps</a> befolgen: <a href="http://code-inside.de/blog/wp-content/uploads/image970.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb155.png" width="263" height="291" /></a> </li>
</ul>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>Wenn diese Punkte schon mal erfüllt sind, kann es z.B. noch ein Problem mit Schreibrechten geben bzw. wenn die Anwendung unter einem speziellen Account läuft zu Problemen kommen.</p>
<ul>
<li>Hat der User unter dem die Anwendung läuft Schreib- &amp; Leserechte auf den Ordner. Siehe auch <a href="http://code-inside.de/blog/2010/04/29/iis6-fix/">hier</a>.</li>
<li>Ist der User unter dem die Anwendung läuft auch Mitglied der Windows Gruppe IIS_WPG (IIS6) bzw. IIS_IUSRS</li>
</ul>
<p>Wenn es nicht eine ganz exotische Anwendung ist, sollte diese spätestens nun auch laufen. Ansonsten lohnt ein Blick in den Windowslog. Wenn ich doch etwas vergessen habe, dann werde ich dies hier weiterführen <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=HowTo%3A+ASP.NET+Anwendungen+auf+IIS6%2F7+%26amp%3B+co.+zum+Laufen+bekommen&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F05%2F10%2Fhowto-asp-net-anwendungen-auf-iis67-co-zum-laufen-bekommen%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/hzdpzVVS_9w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/05/10/howto-asp-net-anwendungen-auf-iis67-co-zum-laufen-bekommen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/05/10/howto-asp-net-anwendungen-auf-iis67-co-zum-laufen-bekommen/</feedburner:origLink></item>
		<item>
		<title>eBook ASP.NET MVC 2 in Action</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/H1jHwZw22iI/</link>
		<comments>http://code-inside.de/blog/2010/05/05/ebook-asp-net-mvc-2-in-action/#comments</comments>
		<pubDate>Tue, 04 May 2010 23:11:24 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[eBook]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/05/05/ebook-asp-net-mvc-2-in-action/</guid>
		<description><![CDATA[ 
Die Autoren rund um das Buch “ASP.NET MVC 2 in Action”, darunter u.a. Jeffrey Palermo, haben das Manuscript auf GitHub für jeden einsehbar und herunterladebar zur Verfügung gestellt. Ab Ende Juli sollte es auch bei Amazon lieferbar sein. Wer das eBook sich so zulegen möchte um die Autoren zu unterstützen, der kann es auch [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "eBook ASP.NET MVC 2 in Action", url: "http://code-inside.de/blog/2010/05/05/ebook-asp-net-mvc-2-in-action/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image967.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb152.png" width="143" height="180" /></a> </p>
<p>Die Autoren rund um das Buch “ASP.NET MVC 2 in Action”, darunter u.a. Jeffrey Palermo, haben das Manuscript auf <a href="http://github.com/jeffreypalermo/mvc2inaction/tree/master/manuscript/">GitHub</a> für jeden einsehbar und herunterladebar zur Verfügung gestellt. Ab Ende Juli sollte es auch <a href="http://www.amazon.de/gp/product/193518279X?ie=UTF8&amp;tag=meinkleinerbl-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=193518279X">bei Amazon</a> lieferbar sein. Wer das eBook sich so zulegen möchte um die Autoren zu unterstützen, der kann es <a href="http://manning.com/palermo2/">auch hier kaufen</a>.    <br /><a href="http://github.com/jeffreypalermo/mvc2inaction/tree/master/manuscript/"><strong>Zum Manuscript</strong></a>. Mehr Information auf <a href="http://jeffreypalermo.com/blog/read-all-of-asp-net-mvc-2-in-action-now-while-you-wait-for-the-printed-book/"><strong>Jeffrey Palermos Blog</strong></a>.</p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=eBook+ASP.NET+MVC+2+in+Action&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F05%2F05%2Febook-asp-net-mvc-2-in-action%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/H1jHwZw22iI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/05/05/ebook-asp-net-mvc-2-in-action/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/05/05/ebook-asp-net-mvc-2-in-action/</feedburner:origLink></item>
		<item>
		<title>Fix: “System.Xml.XmlException: An error occurred while parsing EntityName.”</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/-dsNWs066JQ/</link>
		<comments>http://code-inside.de/blog/2010/05/04/fix-system-xml-xmlexception-an-error-occurred-while-parsing-entityname/#comments</comments>
		<pubDate>Tue, 04 May 2010 22:48:46 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Fix]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[Exception]]></category>
		<category><![CDATA[Xml]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/05/04/fix-system-xml-xmlexception-an-error-occurred-while-parsing-entityname/</guid>
		<description><![CDATA[ 
Ich hatte heute mit einem kleinen XML Problem zu kämpfen. Bei der Generierung des XMLs trat der oben genannte Fehler auf. Problemlösung in kurz: “&#38;”, “&#60;” &#38; “&#62;” maskieren wenn man InnerXml setzt oder “vollständiges” Xml Element setzen.
 
Problemfall:


    class Program
    {
       [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Fix: &#8220;System.Xml.XmlException: An error occurred while parsing EntityName.&#8221;", url: "http://code-inside.de/blog/2010/05/04/fix-system-xml-xmlexception-an-error-occurred-while-parsing-entityname/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image966.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb151.png" width="199" height="108" /></a> </p>
<p>Ich hatte heute mit einem kleinen XML Problem zu kämpfen. Bei der Generierung des XMLs trat der oben genannte Fehler auf. Problemlösung in kurz: “&amp;”, “&lt;” &amp; “&gt;” maskieren wenn man <a href="http://msdn.microsoft.com/de-de/library/system.xml.xmlelement.innerxml.aspx">InnerXml</a> setzt oder “vollständiges” Xml Element setzen.</p>
<p> <span id="more-2644"></span>
<p><strong>Problemfall:</strong></p>
<p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:69aa5c86-11b8-440b-b9b9-30673e674f2e" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            XmlElement element = doc.CreateElement("element");
            element.InnerXml = "hello &amp; good bye";
        }
    }</pre>
</div>
<p>Dieser Code endet mit einer Exception. Entweder man setzt InnerText oder maskiert das “&amp;”. Das gleiche gilt auch für “&lt;” bzw. “&gt;” z.B. mit <a href="http://msdn.microsoft.com/de-de/library/system.web.httputility.htmlencode.aspx">HttpUtility.HtmlEncode</a>. Wenn man komplettes, valides XML reingibt funktioniert es auch:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:b65ad8f3-87d9-46d4-a119-7c3c2d9f3c11" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">        static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            XmlElement element = doc.CreateElement("element");
            element.InnerXml = "hello &lt;test&gt;&lt;/test&gt; good bye";
        }</pre>
</div>
<p>Eigentlich völlig logisch. Problematisch wird es nur wenn man z.B. HTML Markup wie “&lt;br/&gt;” und vom User eingegebene Texte (wo auch ein “&amp;” oder “&lt;” drin stehen könnte) auftauchen. Da die Fehlermeldung mir recht nichtsagend war, hab ich mir gedacht es zu bloggen. <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=Fix%3A+%26ldquo%3BSystem.Xml.XmlException%3A+An+error+occurred+while+parsing+EntityName.%26rdquo%3B&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F05%2F04%2Ffix-system-xml-xmlexception-an-error-occurred-while-parsing-entityname%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/-dsNWs066JQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/05/04/fix-system-xml-xmlexception-an-error-occurred-while-parsing-entityname/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/05/04/fix-system-xml-xmlexception-an-error-occurred-while-parsing-entityname/</feedburner:origLink></item>
		<item>
		<title>Gratis eBook zum SQL Server 2008 R2</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/POHfm5KJAU4/</link>
		<comments>http://code-inside.de/blog/2010/05/04/gratis-ebook-zum-sql-server-2008-r2/#comments</comments>
		<pubDate>Tue, 04 May 2010 13:14:59 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[eBook]]></category>
		<category><![CDATA[MSSQL]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/05/04/gratis-ebook-zum-sql-server-2008-r2/</guid>
		<description><![CDATA[ 

Gerade auf dem MS Technet Blog gefunden: MS Press stellt das Buch “Introducing Microsoft SQL Server 2008 R2” kostenfrei zum Download (PDF) / (XPS) bereit. Haupthemen: Database Administration &#38; Business Intelligence Development    
 
Database Administration

SQL Server 2008 R2 Editions and Enhancements 
Multi-Server Administration 
Data-Tier Applications 
High Availability and Virtualization Enhancements 
Consoldidation [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Gratis eBook zum SQL Server 2008 R2", url: "http://code-inside.de/blog/2010/05/04/gratis-ebook-zum-sql-server-2008-r2/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image965.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb150.png" width="130" height="158" /></a> </p>
</p>
<p>Gerade auf dem <a href="http://blogs.technet.com/austria/archive/2010/05/04/sql-server-2008-r2-ebook.aspx">MS Technet Blog</a> gefunden: MS Press stellt das Buch “Introducing Microsoft SQL Server 2008 R2” kostenfrei <a href="http://go.microsoft.com/fwlink/?LinkId=189147">zum <strong>Download</strong> (PDF)</a> / (<a href="http://go.microsoft.com/fwlink/?LinkId=189148">XPS</a>) bereit. <strong>Haupthemen:</strong> Database Administration &amp; Business Intelligence Development    </p>
<p> <span id="more-2640"></span>
<p><strong>Database Administration</strong></p>
<ul>
<li>SQL Server 2008 R2 Editions and Enhancements </li>
<li>Multi-Server Administration </li>
<li>Data-Tier Applications </li>
<li>High Availability and Virtualization Enhancements </li>
<li>Consoldidation and Monitoring</li>
</ul>
<p><strong>Business Intelligence Development</strong></p>
<ul>
<li>Scalable Data Warehousing </li>
<li>Master Data Services </li>
<li>Complex Event Processing with StreamInsight </li>
<li>Reporting Services Enhancements </li>
<li>Self-Service Analysis with PowerPivot</li>
</ul>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=Gratis+eBook+zum+SQL+Server+2008+R2&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F05%2F04%2Fgratis-ebook-zum-sql-server-2008-r2%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/POHfm5KJAU4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/05/04/gratis-ebook-zum-sql-server-2008-r2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/05/04/gratis-ebook-zum-sql-server-2008-r2/</feedburner:origLink></item>
		<item>
		<title>HowToCode: Null Problemo mit Null, Exceptions &amp; andere Rückgabetypen</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/xAkz_Ux0gbc/</link>
		<comments>http://code-inside.de/blog/2010/05/03/howtocode-null-problemo-mit-null-exceptions-andere-rckgabetypen/#comments</comments>
		<pubDate>Mon, 03 May 2010 22:18:21 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[HowToCode]]></category>
		<category><![CDATA[Null]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/05/03/howtocode-null-problemo-mit-null-exceptions-andere-rckgabetypen/</guid>
		<description><![CDATA[Die Null-Diskussion die Thomas Bandt begonnen hatte flaut langsam ab und ich möchte hier mal für mich die Hauptpunkte niederschrieben. Die Hauptfrage war: Ist es OK Null bei einer Methode zurückzugeben, wenn z.B. kein User mit der ID 5 existiert? Macht man es über Enums? Oder über Exceptions?
 
Beispiel: IUserRepository mit der Methode “GetUser(Guid id)”
Wir [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "HowToCode: Null Problemo mit Null, Exceptions &#38; andere R&#252;ckgabetypen", url: "http://code-inside.de/blog/2010/05/03/howtocode-null-problemo-mit-null-exceptions-andere-rckgabetypen/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image964.png"><img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb149.png" width="110" height="121" /></a>Die Null-Diskussion die <a href="http://blog.thomasbandt.de/39/2333/de/blog/null-verstaendnis.html">Thomas Bandt begonnen</a> hatte flaut langsam ab und ich möchte hier mal für mich die Hauptpunkte niederschrieben. Die Hauptfrage war: Ist es OK Null bei einer Methode zurückzugeben, wenn z.B. kein User mit der ID 5 existiert? Macht man es über <a href="http://code-inside.de/blog/2009/02/06/howtocode-errorcodes-exceptions-den-user-informieren-wenn-etwas-schief-luft-wie-gehts/">Enums</a>? Oder über Exceptions?</p>
<p> <span id="more-2636"></span>
<p><strong>Beispiel: IUserRepository mit der Methode “GetUser(Guid id)”</strong></p>
<p>Wir stellen uns vor, wir hätten ein eines UserRepository was eine Get Methode besitzt, welche eine Guid als Parameter erwartet. </p>
<p><strong>Was passiert wenn kein Ergebnis gefunden wird?</strong></p>
<p><a href="http://blog.thomasbandt.de/39/2333/de/blog/null-verstaendnis.html">Thomas sein ursprünglicher Gedanke: Null</a>.     <br />Das Problem dabei: Man muss es prüfen und es wird nicht wirklich erwartet (einfach die vielen Kommentare lesen).</p>
<p>Jürgen Gutsch hat die vielen verstreuten Posts <a href="http://www.aspnetzone.de/blogs/juergengutsch/archive/2010/05/03/katastrophenfall-null.aspx">in einem Blogpost</a> mal zusammengefasst.</p>
<p><strong>Das was ich aus der Diskussion mitgenommen habe:</strong></p>
<ul>
<li>Im Normalfall niemals NULL zurückgegeben
<ul>
<li>Man erwartet es nicht und es gibt bessere Varianten </li>
</ul>
</li>
<li>Wenn ein Objekt erwartet wird:
<ul>
<li>bei einer “Get” Methode eine Exception werfen wenn das gewünschte nicht gefunden wurde </li>
<li>evtl. eine “Find” mit speziellen Rückgabetypen (ReturnCodes/bool/IResultWrapper) oder “TryXXX” Methode mit einem out Parameter anbieten.
<ul>
<li>Um die Lesbarkeit zu erhöhen hat sich <a href="http://ralfw.blogspot.com/2010/05/nullonade-monade-statt-null.html">Ralf ein paar Gedanken</a> gemacht </li>
</ul>
</li>
</ul>
</li>
<li>Wenn eine Collection erwartet wird:
<ul>
<li>Eine leere Collection zurückgeben </li>
</ul>
</li>
</ul>
<p>Wichtig ist, dass die API intuitiv zu benutzen ist. NULL ist IMHO nicht wirklich intuitiv. Ich seh die ganze Sache auch aus Webentwicklersicht – ein Geräteprogrammierer mag das völlig anders sehen.</p>
<p>My 2 cents <img src='http://code-inside.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=HowToCode%3A+Null+Problemo+mit+Null%2C+Exceptions+%26amp%3B+andere+R%26uuml%3Bckgabetypen&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F05%2F03%2Fhowtocode-null-problemo-mit-null-exceptions-andere-rckgabetypen%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/xAkz_Ux0gbc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/05/03/howtocode-null-problemo-mit-null-exceptions-andere-rckgabetypen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/05/03/howtocode-null-problemo-mit-null-exceptions-andere-rckgabetypen/</feedburner:origLink></item>
		<item>
		<title>Byebye ASP.NET AJAX Library, hello jQuery</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/x8wdqnH5x74/</link>
		<comments>http://code-inside.de/blog/2010/05/03/byebye-asp-net-ajax-library-hello-jquery/#comments</comments>
		<pubDate>Mon, 03 May 2010 06:57:17 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/05/03/byebye-asp-net-ajax-library-hello-jquery/</guid>
		<description><![CDATA[ Microsoft hat für ASP.NET als der AJAX Hype aufkam zwei wesentliche “Frameworks” entwickelt: Microsoft AJAX Library auf der Client Seite und das AJAX Control Toolkit teils server- aber auch clientseitig. Da die Frage auch in der MVP Mailingliste aufkam: Microsoft entwickelt die AJAX Client Library nicht weiter. Wer es weiterhin benutzen möchte, für den [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Byebye ASP.NET AJAX Library, hello jQuery", url: "http://code-inside.de/blog/2010/05/03/byebye-asp-net-ajax-library-hello-jquery/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image963.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb148.png" width="153" height="79" /></a> Microsoft hat für ASP.NET als der AJAX Hype aufkam zwei wesentliche “Frameworks” entwickelt: <a href="http://msdn.microsoft.com/library/bb398822.aspx">Microsoft AJAX Library</a> auf der Client Seite und das <a href="http://www.asp.net/(S(fu2l2uzphr2u3u45q2dnez55))/ajax/AjaxControlToolkit/Samples/">AJAX Control Toolkit</a> teils server- aber auch clientseitig. Da die Frage auch in der MVP Mailingliste aufkam: Microsoft entwickelt die AJAX Client Library nicht weiter. Wer es weiterhin benutzen möchte, für den ist es in dem <a href="http://www.asp.net/ajax/">AJAX Control Toolkit</a> enthalten. Neue Sachen, wie z.B. <a href="http://msdn.microsoft.com/en-us/magazine/cc546561.aspx">das Client Templating</a>, wird es in <a href="http://stephenwalther.com/blog/archive/2010/03/16/microsoft-jquery-and-templating.aspx">Zukunft in jQuery</a> geben.</p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=Byebye+ASP.NET+AJAX+Library%2C+hello+jQuery&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F05%2F03%2Fbyebye-asp-net-ajax-library-hello-jquery%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/x8wdqnH5x74" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/05/03/byebye-asp-net-ajax-library-hello-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/05/03/byebye-asp-net-ajax-library-hello-jquery/</feedburner:origLink></item>
		<item>
		<title>Fix: “Microsoft.WebApplication.targets was not found.”</title>
		<link>http://feedproxy.google.com/~r/Code-insideBlog/~3/8K06dhVA9-0/</link>
		<comments>http://code-inside.de/blog/2010/04/29/fix-microsoft-webapplication-targets-was-not-found/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 21:43:08 +0000</pubDate>
		<dc:creator>Robert Mühsig</dc:creator>
				<category><![CDATA[Fix]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[MSBuild]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[WebApplications]]></category>

		<guid isPermaLink="false">http://code-inside.de/blog/2010/04/29/fix-microsoft-webapplication-targets-was-not-found/</guid>
		<description><![CDATA[Wer mit MSBuild Webapplikationen baut (z.B. im Zusammenhang mit dem TFS 2008/2010) kann u.U. folgende Fehlermeldung erhalten:    “The imported project C:\Program Files (x86) \MSBuild\Microsoft\VisualStudio\ v10.0\WebApplications\ Microsoft.WebApplication.targets was not found.”. Einfachste Problemlösung: Visual Studio 2010/2008 installieren.
 
Vor der .NET 4.0 Zeit: “The imported project &#34;C:\Program Files\MSBuild\Microsoft\VisualStudio\v8.0\WebApplications\Microsoft.WebApplication.targets&#34; was not found” 
Wer mit .NET 4.0 [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Fix: &#8220;Microsoft.WebApplication.targets was not found.&#8221;", url: "http://code-inside.de/blog/2010/04/29/fix-microsoft-webapplication-targets-was-not-found/" });</script>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-inside.de/blog/wp-content/uploads/image962.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://code-inside.de/blog/wp-content/uploads/image_thumb147.png" width="174" height="157" /></a>Wer mit MSBuild Webapplikationen baut (z.B. im Zusammenhang mit dem TFS 2008/2010) kann u.U. folgende Fehlermeldung erhalten:    <br />“The imported project C:\Program Files (x86) \MSBuild\Microsoft\VisualStudio\ v10.0\WebApplications\ Microsoft.WebApplication.targets was not found.”. Einfachste Problemlösung: Visual Studio 2010/2008 installieren.</p>
<p> <span id="more-2622"></span>
<p><u>Vor der .NET 4.0 Zeit:</u> “The imported project &quot;C:\Program Files\MSBuild\Microsoft\VisualStudio\<strong>v8.0</strong>\WebApplications\Microsoft.WebApplication.targets&quot; was not found” </p>
<p><u>Wer mit .NET 4.0 baut:</u> “The imported project &quot;C:\Program Files\MSBuild\Microsoft\VisualStudio\<strong>v10.0</strong>\WebApplications\Microsoft.WebApplication.targets&quot; was not found”</p>
<p><strong>Einfachste Fehlerbehebung:</strong> Visual Studio auf dem Build Server installieren.</p>
<p><strong>Eine andere Variante:</strong> Einfach den WebApplications Ordner mit Inhalt (ein .target File + dll) kopieren. </p>
<p>Im Zusammenhang mit TeamCity ist mir dieser “Bug” <a href="http://code-inside.de/blog/2009/07/14/howto-teamcity-web-application-projects/">bereits aufgefallen</a>. Mit dem neuen TFS2010 hat sich das auch nicht geändert, daher der “nochmalige” Blogpost.</p>
<p><a href="http://sharethis.com/item?&wp=2.8.4&amp;publisher=3dc0f130-3c38-4ff7-addc-d62ab6c063ee&amp;title=Fix%3A+%26ldquo%3BMicrosoft.WebApplication.targets+was+not+found.%26rdquo%3B&amp;url=http%3A%2F%2Fcode-inside.de%2Fblog%2F2010%2F04%2F29%2Ffix-microsoft-webapplication-targets-was-not-found%2F">ShareThis</a></p><img src="http://feeds.feedburner.com/~r/Code-insideBlog/~4/8K06dhVA9-0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://code-inside.de/blog/2010/04/29/fix-microsoft-webapplication-targets-was-not-found/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://code-inside.de/blog/2010/04/29/fix-microsoft-webapplication-targets-was-not-found/</feedburner:origLink></item>
	</channel>
</rss>
