<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Das Megos .NET-Weblog</title>
	<atom:link href="http://megos.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://megos.wordpress.com</link>
	<description>Die .NET-Abenteuer einer Brugger Software-Firma</description>
	<lastBuildDate>Wed, 11 Jan 2012 14:22:00 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='megos.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Das Megos .NET-Weblog</title>
		<link>http://megos.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://megos.wordpress.com/osd.xml" title="Das Megos .NET-Weblog" />
	<atom:link rel='hub' href='http://megos.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Popup-Menus in WP7-Apps</title>
		<link>http://megos.wordpress.com/2012/01/11/popup-menu-in-wp7-apps/</link>
		<comments>http://megos.wordpress.com/2012/01/11/popup-menu-in-wp7-apps/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 14:21:52 +0000</pubDate>
		<dc:creator>René Brunner</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WP7]]></category>

		<guid isPermaLink="false">http://megos.wordpress.com/?p=401</guid>
		<description><![CDATA[Teil der Benutzeroberfläche von Applikationen für Windows Phone 7 sind bekanntlich Popup-Menus: Etwas nicht nur kurz antippen, sondern lange draufhalten, um das Popup-Menu bzw. Kontext-Menu aufzurufen. Als App-Programmierer wird man verwiesen auf ein entsprechendes Control, das Teil des Silverlight Toolkits ist, welches in einer Ausgabe für WP7 und einer für das &#8222;echte&#8220; Silverlight existiert. Dieses [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=401&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Teil der Benutzeroberfläche von Applikationen für Windows Phone 7 sind bekanntlich Popup-Menus: Etwas nicht nur kurz antippen, sondern lange draufhalten, um das Popup-Menu bzw. Kontext-Menu aufzurufen.</p>
<p>Als App-Programmierer wird man verwiesen auf ein entsprechendes Control, das Teil des <a href="http://silverlight.codeplex.com/">Silverlight Toolkits</a> ist, welches in einer Ausgabe für WP7 und einer für das &#8222;echte&#8220; Silverlight existiert. Dieses Toolkit hat man nicht &#8222;einfach so&#8220; installiert, selbst wenn man die ganzen WP7-Entwicklungs-Tools und SDKs installiert hat, aber mit <a href="http://nuget.org/">NuGet</a> ist es schnell und einfach installiert.</p>
<p>Informationen darüber, wie man ein <i>ContextMenu</i>-Control einbaut in seine Applikation, findet man z.B. <a href="http://windowsphonegeek.com/articles/WP7-ContextMenu-in-depth--Part1-key-concepts-and-API">hier</a>. Bei einer <i>ListBox</i> ist es noch ein wenig tricky herauszufinden, für welches Item das Menu aufgerufen wurde, aber der nötige Trick findet sich z.B. <a href="http://henry-chong.com/2011/03/windows-phone-7-contextmenu-and-listboxes/">hier</a>.</p>
<p>Wenn Sie nur wie ich vor dem Problem stehen, ein Popup-Menu für Ihre WP7-Applikation zu bauen, können Sie jetzt getrost aufhören zu lesen &#8211; es folgt nämlich nur noch mein Kommentar zu dieser Geschichte:</p>
<p>Da gibt es also für ein ureigenstes Feature der WP7-Benutzeroberfläche kein &#8222;natives&#8220; Control, welches der App-Programmierer mit aller Selbstverständlichkeit nutzen kann, sondern nur ein Control, das sich wie das eingebaute Control verhält, zumindest so, wie sich das eingebaute momentan unter Mango verhält.</p>
<p>Dieses Control ist zudem enthalten in einem Toolkit, dessen Status nicht so ganz klar ist: Ok, es sind Leute vom Silverlight-Team selbst unter den Programmierern, und auch ein Programmierer namens &#8222;Microsoft&#8220; ist dabei. Aber ist das jetzt offiziell? Kann ich mich darauf verlassen, dass das weiter gepflegt wird? Was ist, wenn Microsoft in Zukunft das &#8222;eingebaute&#8220; Popup-Menu verbessert &#8211; sieht mein Control dann plötzlich &#8222;alt&#8220; aus?</p>
<p>Vielleicht bin ich einfach zu kritisch oder zu skeptisch eingestellt, aber wenn ich Dinge lese wie <a href="http://johnpapa.net/windows-phone-developer-tools-and-the-silverlight-for-windows-phone-toolkit-released">hier</a> zum <i>ToggleSwitch</i>-Control in einem neuen Release des Silverlight Toolkits:</p>
<blockquote><p>The ToggleSwitch is designed to match the native experience.</p></blockquote>
<p>dann wundere ich mich doch sehr: Was ist denn mit dem &#8222;eingebauten&#8220; Toogle-Switch los, dass man ihn nicht ganz einfach als Teil des WP7 API zur Verfügung stellt? Was ist an dem so gefährlich oder problematisch, dass man in einem Toolkit einen Nachbau anbieten und die Leute beruhigen muss, das sehe dann schon genau so aus wie &#8222;echt&#8220;?</p>
<p>Ich glaube, die Lösung des Rätsels ist wie folgt, auch wenn ich das nur hier und da im Internet quasi als Gerücht gefunden habe und nicht in der Lage bin, auf ein zuverlässige Quelle zu verlinken: Microsoft habe die native WP7 controls aus Gründen der Performance nicht in Silverlight, sondern direkt in C++ programmiert, und damit wohl mit APIs ausgestattet, die sich nicht für eine komplette Öffnung für alle WP7-Programmierer eignen. Es mag auch eine Rolle spielen, dass gewisse WP7-Standard-Programme, allen voran wahrscheinlich der IE, nicht in C# programmiert sind, sondern in C++, und mit Silverlight-Controls wohl ihre liebe Mühe hätten.</p>
<p>Gut denkbar natürlich, dass die fraglichen Controls in der nächsten Iteration von WP7 in die Standard-API aufgenommen werden und sich ab da Microsoft völlig unsichtbar darum kümmert, die beiden Spielarten der Controls (C++ und C#/Silverlight) synchron zu halten, womit sich dann die Sache wesentlich entschärft.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/megos.wordpress.com/401/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/megos.wordpress.com/401/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/megos.wordpress.com/401/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/megos.wordpress.com/401/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/megos.wordpress.com/401/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/megos.wordpress.com/401/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/megos.wordpress.com/401/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/megos.wordpress.com/401/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/megos.wordpress.com/401/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/megos.wordpress.com/401/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/megos.wordpress.com/401/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/megos.wordpress.com/401/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/megos.wordpress.com/401/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/megos.wordpress.com/401/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=401&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://megos.wordpress.com/2012/01/11/popup-menu-in-wp7-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d144980edde2f1b80ccd246210d9ce5f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">megosbr</media:title>
		</media:content>
	</item>
		<item>
		<title>API-Minimalismus</title>
		<link>http://megos.wordpress.com/2011/12/28/api-minimalismus/</link>
		<comments>http://megos.wordpress.com/2011/12/28/api-minimalismus/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 12:37:59 +0000</pubDate>
		<dc:creator>René Brunner</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WP7]]></category>

		<guid isPermaLink="false">http://megos.wordpress.com/?p=393</guid>
		<description><![CDATA[Ich verfolge schon seit geraumer Zeit, was auf dem Gebiet der Smartphone-Betriebssysteme passiert. Eines der bemerkenswertesten Ereignisse auf diesem Gebiet in letzter Zeit ist für mich die Art, wie Microsoft Windows Phone 7 zum Laufen gekriegt hat: Während Nokia viele Jahre damit verbracht hat, einen Versuch der Symbian-Modernisierung nach dem anderen an die Wand zu [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=393&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ich verfolge schon seit geraumer Zeit, was auf dem Gebiet der Smartphone-Betriebssysteme passiert.</p>
<p>Eines der bemerkenswertesten Ereignisse auf diesem Gebiet in letzter Zeit ist für mich die Art, wie Microsoft <i>Windows Phone 7</i> zum Laufen gekriegt hat: Während Nokia viele Jahre damit verbracht hat, einen Versuch der Symbian-Modernisierung nach dem anderen an die Wand zu fahren, hat Microsoft in der unglaublich kurzen Zeit von etwa anderthalb Jahren ein einigermassen brauchbares Smartphone-OS mit modernem und sogar stellenweise innovativem User Interface aus dem Boden gestampft.</p>
<p>Natürlich ist WP7 bei näherem Hinsehen nicht &#8222;neu&#8220;: Im Inneren werkelt der immer noch gleiche uralte Windows-CE-Kernel, und die Benutzeroberfläche besteht im wesentlichen aus Silverlight und XNA, beides Systeme, die bereits bestanden und zu Beginn der Arbeiten an WP7 bereits eine ordentliche Reife erlangt hatten. Es ist aber meiner Meinung nach trotzdem eine tolle Leistung, all diese Teile brauchbar zu kombinieren und in kurzer Zeit zur Marktreife zu bringen.</p>
<p>So weit, so gut. Seit einigen Tagen allerdings hat mein Bild von WP7 ein paar Kratzer abbekommen. Ich habe WP7 gewählt, um mich in die WPF/Silverlight/XAML-basierte Welt der .NET-Benutzeroberflächen-Programmierung für &#8222;konventionelle&#8220; Applikationen (im Gegensatz zu Web-Applikationen) einzuarbeiten und komme doch ziemlich ernüchtert von ersten Detail-Abklärungen zurück.</p>
<p>Auch Microsoft konnte nicht zaubern, und um WP7 in so kurzer Zeit zu stemmen, musste wohl jemand mit eiserner Hand die Aufgabe auf ein handhabbares Mass reduzieren. Herausgekommen ist ein Smartphone-OS mit einer API, die arg schwach auf der Brust ist.</p>
<p>Am konkreten Beispiel: Was kann ein Programmierer, der eine WP7-App baut, punkto SMS auf dem Gerät alles anstellen?</p>
<p>Kann er sich in den Empfang von SMS einklinken, um z.B. eine SMS-Auto-Responder-App zu bauen? Nein, es gibt keine API hierfür. Kann er eine App bauen, die &#8211; Erlaubnis des Smartphone-Besitzers natürlich vorausgesetzt &#8211; automatisch SMS versendet, die z.B. Kollegen an nahende Termine erinnern? Nein. Kann er eine App bauen, die es möglich macht, eine früher gesendete SMS abzuändern und jemand anderem ebenfalls zu senden? Oder eine App für den Backup aller SMS? Nein, kann er nicht, die API gewährt keinen Zugriff auf den SMS-Speicher.</p>
<p>Ja, gibt es denn überhaupt irgendwelche Unterstützung im API betreffend SMS? Nun ja, eine WP7-App kann betreffend SMS genau <b>eine</b> Funktion ausführen, eine einzige: Sie kann einen SMS-Text und eine Liste von Empfängern vorbereiten und an den SMS-Erfassungs-View senden, wo dann der Benutzer bei Bedarf noch ändern und die fertige SMS schliesslich senden kann.</p>
<p>Kann die App dann wenigstens in Erfahrung bringen, ob der Benutzer die solchermassen vorbereitete SMS tatsächlich abgeschickt hat? Sie ahnen es wohl schon: Natürlich nicht.</p>
<p>Wer sich nun sagt, halb so wild, SMS ist sowieso auf dem absteigenden Ast: Ganz ähnliche Einschränkungen scheinen auch für E-Mails zu gelten.</p>
<p>Ich komme für mich zum Schluss: Mit einer derart limitierten API ist es extrem schwierig, wirklich interessante und innovative Apps für WP7 zu programmieren. Hier muss sich meiner Meinung nach in kurzer Zeit sehr viel tun, wenn WP7 je zu iOS und Android aufschliessen will.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/megos.wordpress.com/393/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/megos.wordpress.com/393/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/megos.wordpress.com/393/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/megos.wordpress.com/393/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/megos.wordpress.com/393/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/megos.wordpress.com/393/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/megos.wordpress.com/393/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/megos.wordpress.com/393/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/megos.wordpress.com/393/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/megos.wordpress.com/393/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/megos.wordpress.com/393/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/megos.wordpress.com/393/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/megos.wordpress.com/393/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/megos.wordpress.com/393/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=393&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://megos.wordpress.com/2011/12/28/api-minimalismus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d144980edde2f1b80ccd246210d9ce5f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">megosbr</media:title>
		</media:content>
	</item>
		<item>
		<title>Keine Indices für nvarchar(MAX)</title>
		<link>http://megos.wordpress.com/2011/10/18/keine-indices-fuer-nvarcharmax/</link>
		<comments>http://megos.wordpress.com/2011/10/18/keine-indices-fuer-nvarcharmax/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 12:37:31 +0000</pubDate>
		<dc:creator>René Brunner</dc:creator>
				<category><![CDATA[EF4]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://megos.wordpress.com/?p=386</guid>
		<description><![CDATA[Heute habe ich an einer SQL-Datenbank, die ich via Entity Framework 4 von einer C#-Anwendung aus anspreche, &#8222;von Hand&#8220; Kolonnen hinzugefügt, um Änderungen an meinen Entities nachzuvollziehen, ohne die Daten in den Tabellen zu verlieren. Dabei ist mir zum ersten mal richtig aufgefallen, dass alle meine textuellen Kolonnen vom Typ nvarchar(MAX) sind, bzw. dass EF4 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=386&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Heute habe ich an einer SQL-Datenbank, die ich via Entity Framework 4 von einer C#-Anwendung aus anspreche, &#8222;von Hand&#8220; Kolonnen hinzugefügt, um Änderungen an meinen Entities nachzuvollziehen, ohne die Daten in den Tabellen zu verlieren. Dabei ist mir zum ersten mal richtig aufgefallen, dass alle meine textuellen Kolonnen vom Typ <i>nvarchar(MAX)</i> sind, bzw. dass EF4 die Kolonnen so für mich definiert hat.</p>
<p>MAX schien mir Overkill, aber richtig, ich hatte ja bei den Properties im EF-Designer keine Maximal-Längen-Angaben gemacht. Irgendwie verständlich, weil man schliesslich beim O/R-Mapping vom C#-Datentyp <i>String</i> her kommt, wo man sich keine Gedanken über Maximallängen machen muss.</p>
<p>Zur Sicherheit klärte ich ab, ob ich mir mit der Verwendung von <i>nvarchar(MAX)</i> irgendwelche Nachteile einhandle. Ich dachte da an eine mögliche Speicherverschwendung, die so zustandekommt. Eine <a href="http://stackoverflow.com/questions/148398/are-there-any-disadvantages-to-always-using-nvarcharmax">Frage</a> auf Stack Overflow brachte Klärung: Nein, Speicherverschwendung ist kein Problem, <b>aber</b> SQL Server mag keine normalen Indices bauen mit MAX-Kolonnen drin.</p>
<p>Es ist tatsächlich ein bisschen schwierig, einen B-Baum zu führen mit potentiell beliebig langen Schlüsseln in Seiten fixer Länge!</p>
<p>Neugierig geworden, forschte ich noch etwas weiter. Maximallängen setzen bei den Properties im EF4-Designer löst zwar das erwähnte Indizier-Problem, hat aber eine Schwäche: EF4 selbst überwacht die Maximallängen nicht, sondern gibt einfach alles an den SQL Server weiter, wo es dann zwar schon einen Fehler gibt, aber offenbar einen, bei dem man unter Umständen nicht versteht, wo das Problem liegt. Diese Geschichte ist <a href="http://blog.alner.net/archive/2010/04/13/entity_framework_does_not_enforce_maxlength_metadata.aspx">hier</a> näher beschrieben.</p>
<p>Weiterhin scheint es überraschend schwierig zu sein, die Maximallängen-Angaben, die man im Designer macht, zur Programmlaufzeit abzufragen, z.B. um irgendwelche Eingabe-Controls dynamisch und &#8222;generisch&#8220; auf die betreffenden Längen einzuschränken. Nachlesen kann man das z.B. <a href="http://stackoverflow.com/questions/748939/field-max-length-in-entity-framework">hier</a>.</p>
<p>Schliesslich scheint es mit <i>Code First</i> in EF4.1 und/oder bei Einsatz von SQL Server Compact eine Reihe neuer Fragen rund um die Maximallänge von Text-Kolonnnen zu geben, wie man <a href="http://blogs.msdn.com/b/adonet/archive/2011/03/29/ef-4-1-rtw-change-to-default-maxlength-in-code-first.aspx">hier</a> beschrieben findet.</p>
<p>Es ist schon interessant, wie sich beim Programmieren mit .NET immer mal wieder Dinge als vielschichtiger herausstellen, als man auf den ersten Blick annimmt.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/megos.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/megos.wordpress.com/386/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/megos.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/megos.wordpress.com/386/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/megos.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/megos.wordpress.com/386/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/megos.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/megos.wordpress.com/386/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/megos.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/megos.wordpress.com/386/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/megos.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/megos.wordpress.com/386/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/megos.wordpress.com/386/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/megos.wordpress.com/386/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=386&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://megos.wordpress.com/2011/10/18/keine-indices-fuer-nvarcharmax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d144980edde2f1b80ccd246210d9ce5f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">megosbr</media:title>
		</media:content>
	</item>
		<item>
		<title>Informationspolitik</title>
		<link>http://megos.wordpress.com/2011/09/01/informationspolitik/</link>
		<comments>http://megos.wordpress.com/2011/09/01/informationspolitik/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 14:10:51 +0000</pubDate>
		<dc:creator>René Brunner</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[TechDays]]></category>

		<guid isPermaLink="false">http://megos.wordpress.com/?p=375</guid>
		<description><![CDATA[Wenn es um Windows 8 geht in offiziellen Verlautbarungen von Microsoft, glänzen C#, .NET, WPF und Silverlight meistens durch Abwesenheit. Stattdessen wird jede Menge über HTML 5 und JavaScript für eine schöne neue Welt von modernen Windows-Applikationen erzählt. Als das vor ein paar Monaten losging, waren verständlicherweise viele Programmierer ziemlich beunruhigt und haben auf verschiedenen [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=375&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Wenn es um Windows 8 geht in offiziellen Verlautbarungen von Microsoft, glänzen C#, .NET, WPF und Silverlight meistens durch Abwesenheit. Stattdessen wird jede Menge über HTML 5 und JavaScript für eine schöne neue Welt von modernen Windows-Applikationen erzählt.</p>
<p>Als das vor ein paar Monaten losging, waren verständlicherweise viele Programmierer ziemlich beunruhigt und haben auf verschiedenen Wegen Microsoft um Klärung gebeten. Die Auskunft damals war: Liebe Leute, wir verstehen Eure Sorgen, aber es tut uns leid, wir können im Moment <b>nichts</b> sagen. Wartet bis zur BUILD Conference in den USA im September.</p>
<p>Es versteht sich, das dieses Schweigen Microsofts <b>nicht</b> zur Beruhigung beigetragen hat, wie man ziemlich deutlich z.B. an <a href="http://www.isdotnetdead.com/">isdotnetdead.com</a> und <a href="http://forums.silverlight.net/t/230744.aspx">Open Plea by Silverlight / WPF Devs</a> ersehen kann.</p>
<p>Nun kam für mich als Schweizer gestern folgende Meldung: Für die TechDays 11 in Bern am 20. und 21. Oktober, also zeitlich eine ganze Weile <b>nach</b> der BUILD, wird bezüglich Windows 8 umdisponiert. An den TechDays gibt es neu <b>keine</b> Informationen über Windows 8; wer sich als Schweizer Programmierer dafür interessiert, wartet auf einen eigenen Informationsanlass am 9. Februar 2012. Zu lesen ist das z.B. auf der <a href="http://www.techdays.ch/">TechDays-Website</a> oder der Website des <a href="http://blogs.msdn.com/b/swiss_dpe_team/archive/2011/08/31/register-now-for-microsoft-techdays-11-bern-and-benefit-from-the-early-bird-offer.aspx">SWISS DPE Teams</a>.</p>
<p>Das monatelange Schweigen von Microsoft über die zukünftigen Stossrichtungen betreffend Programmieren für Windows 8 und jetzt die Verschiebung der Orientierung der Schweizer auf den Februar 2012 finde ich persönlich nicht gut, sehe das aber noch knapp innerhalb eines &#8222;normalen&#8220; Rahmens.</p>
<p>Was ich allerdings jetzt definitiv nicht mehr verstehe und was mich über die Klippe gestossen und zu diesem Blog-Eintrag veranlasst hat: Microsoft liefert, so viel ich weiss, <b>keine</b> brauchbare Begründungen für all diese Wartereien und Verschiebungen, die man uns zumutet.</p>
<p>Wenn man schon die Leute <b>monatelang</b> hängenlässt, was in der heutigen Zeit eine kleine Ewigkeit bedeutet, gehört doch einfach dazu, den Leuten zu erklären, warum man das tut. Ohne Erklärung werden die Ängste nur um so grösser, und die Spekulationen umso wilder.</p>
<p>Ich bin Realist und weiss, wie klein die Chancen sind, dass nun genau dieser Blog-Eintrag etwas bewirkt, aber es musste mal gesagt sein.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/megos.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/megos.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/megos.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/megos.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/megos.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/megos.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/megos.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/megos.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/megos.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/megos.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/megos.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/megos.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/megos.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/megos.wordpress.com/375/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=375&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://megos.wordpress.com/2011/09/01/informationspolitik/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d144980edde2f1b80ccd246210d9ce5f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">megosbr</media:title>
		</media:content>
	</item>
		<item>
		<title>using System.Web.Mvc.Html;</title>
		<link>http://megos.wordpress.com/2011/06/29/using-system-web-mvc-html/</link>
		<comments>http://megos.wordpress.com/2011/06/29/using-system-web-mvc-html/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 09:47:25 +0000</pubDate>
		<dc:creator>René Brunner</dc:creator>
				<category><![CDATA[MVC2]]></category>

		<guid isPermaLink="false">http://megos.wordpress.com/?p=371</guid>
		<description><![CDATA[Es ist nur eine kleine Sache, aber es kann je nach dem dauern, bis man darauf kommt (wie bei mir heute&#8230;): Wenn man eine neue Extension Method für HtmlHelper schreiben will, z.B. einen speziell &#8222;konfigurierte&#8220; Variante von Html.ActionLink, sind Methoden wie eben ActionLink erst sichtbar, wenn man neben System.Web.Mvc auch System.Web.Mvc.Html importiert. Man kommt deshalb [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=371&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Es ist nur eine kleine Sache, aber es kann je nach dem dauern, bis man darauf kommt (wie bei mir heute&#8230;):</p>
<p>Wenn man eine neue <i>Extension Method</i> für <i>HtmlHelper</i> schreiben will, z.B. einen speziell &#8222;konfigurierte&#8220; Variante von <i>Html.ActionLink</i>, sind Methoden wie eben <i>ActionLink</i> erst sichtbar, wenn man neben <i>System.Web.Mvc</i> auch <i>System.Web.Mvc.Html</i> importiert.</p>
<p>Man kommt deshalb so schlecht drauf, weil Visual Studio 2010 nicht genügend schlau ist, auf diese Tatsache hinzuweisen, wenn man im Code <i>htmlHelper.ActionLink</i> hinschreibt, bzw. der &#8222;using&#8220;-Assistent findet zwar heraus, dass man für einen <i>HtmlHelper</i> einen Import von <i>System.Web.Mvc</i> benötigt, versagt aber für <i>ActionLink</i> und ähnliche Methoden.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/megos.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/megos.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/megos.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/megos.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/megos.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/megos.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/megos.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/megos.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/megos.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/megos.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/megos.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/megos.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/megos.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/megos.wordpress.com/371/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=371&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://megos.wordpress.com/2011/06/29/using-system-web-mvc-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d144980edde2f1b80ccd246210d9ce5f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">megosbr</media:title>
		</media:content>
	</item>
		<item>
		<title>Eigene Fehlerseiten in ASP.NET MVC2</title>
		<link>http://megos.wordpress.com/2011/06/22/eigene-fehlerseiten-in-asp-net-mvc2/</link>
		<comments>http://megos.wordpress.com/2011/06/22/eigene-fehlerseiten-in-asp-net-mvc2/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 12:12:32 +0000</pubDate>
		<dc:creator>René Brunner</dc:creator>
				<category><![CDATA[HTTP]]></category>
		<category><![CDATA[MVC2]]></category>

		<guid isPermaLink="false">http://megos.wordpress.com/?p=367</guid>
		<description><![CDATA[Heute wollte ich in der ASP.NET-MVC2-Web-Applikation, an der ich gerade arbeite, eigene Fehlerseiten einrichten, vor allem natürlich für den HTTP-Fehler 404. Auf den ersten Blick sieht alles ziemlich einfach aus, denn solche eigene Fehlerseiten sind ein häufig benötigtes Feature, und die Erbauer von MVC haben entsprechend etwas bereitgestellt: Die Stichworte sind da Einsatz des HandleErrorAttribute [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=367&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Heute wollte ich in der ASP.NET-MVC2-Web-Applikation, an der ich gerade arbeite, eigene Fehlerseiten einrichten, vor allem natürlich für den HTTP-Fehler 404.</p>
<p>Auf den ersten Blick sieht alles ziemlich einfach aus, denn solche eigene Fehlerseiten sind ein häufig benötigtes Feature, und die Erbauer von MVC haben entsprechend etwas bereitgestellt: Die Stichworte sind da Einsatz des <i>HandleErrorAttribute</i> im Code und <i>customErrors</i> in <i>web.config</i>, bei Microsoft z.B. <a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.handleerrorattribute.aspx">hier</a> beschrieben.</p>
<p>Rein optisch sieht das Resultat im Browser perfekt aus, bei Fehler kommt die eigene Seite, die man nach Belieben selbst gestalten kann. Die Sache hat aber einen ziemlich grossen Schönheitsfehler: Der Webserver liefert die Fehlerseite nicht mit dem Fehler als Statuscode aus, sondern mit Code 200 &#8222;alles in Ordnung&#8220;. Das ist im besten Fall einfach Unsinn und führt im schlimmsten Fall dazu, dass Roboter von Suchmaschinen beim Abklappern der Website ein ziemlich schiefes Bild davon bekommen.</p>
<p>Bei meiner Suche im Internet nach einer Lösung für dieses Problem kam ich dann ganz schön ins Staunen: Ich glaube, ich habe noch nie einen solchen Wildwuchs von Lösungen und Lösungsversuchen betreffend MVC angetroffen wie bei dieser Sache! Eine Auswahl von dem, was ich gefunden habe:</p>
<p><a href="http://richarddingwall.name/2008/08/17/strategies-for-resource-based-404-errors-in-aspnet-mvc/">Dieser Artikel</a> beschreibt das Problem ausführlich und schlägt eine Lösung vor, die etwas kompliziert aussieht und zudem schon etwas älter zu sein scheint. <a href="http://secretgeek.net/custom_errors_mvc.asp">Dieser Artikel</a> zählt eine lange Liste diverser Eingriffe auf, bei denen wohl die Meinung sein soll, sie seien alle nötig, damit es sicher mit jeder Kombination von Framework und IIS klappt, was mir etwas unwahrscheinlich erschien.</p>
<p>Implementiert habe ich schliesslich die <a href="http://www.digitallycreated.net/Blog/57/getting-the-correct-http-status-codes-out-of-asp.net-custom-error-pages">hier</a> beschriebene Lösung, die up-to-date, einfach und übersichtlich ist und an der ich (bis jetzt zumindest) trotzdem keinen Haken finden konnte; kann ich also empfehlen.</p>
<p>Diese Lösung klappt übrigens nicht nur mit dem Wert <i>On</i> für den Parameter <i>mode</i> bei <i>customErrors</i>, sondern ebensogut mit <i>RemoteOnly</i>, was für das Debugging gewisse Vorteile haben kann.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/megos.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/megos.wordpress.com/367/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/megos.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/megos.wordpress.com/367/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/megos.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/megos.wordpress.com/367/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/megos.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/megos.wordpress.com/367/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/megos.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/megos.wordpress.com/367/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/megos.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/megos.wordpress.com/367/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/megos.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/megos.wordpress.com/367/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=367&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://megos.wordpress.com/2011/06/22/eigene-fehlerseiten-in-asp-net-mvc2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d144980edde2f1b80ccd246210d9ce5f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">megosbr</media:title>
		</media:content>
	</item>
		<item>
		<title>EF4: Zu meckern gibt es immer etwas</title>
		<link>http://megos.wordpress.com/2011/05/25/ef4-zu-meckern-gibt-es-immer-etwas/</link>
		<comments>http://megos.wordpress.com/2011/05/25/ef4-zu-meckern-gibt-es-immer-etwas/#comments</comments>
		<pubDate>Wed, 25 May 2011 12:50:33 +0000</pubDate>
		<dc:creator>René Brunner</dc:creator>
				<category><![CDATA[EF4]]></category>

		<guid isPermaLink="false">http://megos.wordpress.com/?p=359</guid>
		<description><![CDATA[Im Rahmen meiner bisherigen Arbeit mit dem EF4 bin ich auf ein paar Dinge gestossen, welche dieses Framework nicht kann, die aber wünschenswert und sinnvoll wären. Ich führe diese hier auf, weil es eine nützliche Information sein kann zu wissen, dass etwas nicht geht &#8211; man kann dann nämlich aufhören nach einer direkten Lösung zu [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=359&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Im Rahmen meiner bisherigen Arbeit mit dem EF4 bin ich auf ein paar Dinge gestossen, welche dieses Framework nicht kann, die aber wünschenswert und sinnvoll wären. Ich führe diese hier auf, weil es eine nützliche Information sein kann zu wissen, dass etwas <b>nicht</b> geht &#8211; man kann dann nämlich aufhören nach einer direkten Lösung zu suchen und sein Ansinnen entweder fallenlassen oder damit beginnen, eine Umgehungslösung zu suchen.</p>
<p>Weil sich solche Dinge heutzutage schnell ändern können: Die folgenden Aussagen beziehen sich auf das Entity Framework 4, so wie in Visual Studio 2010 (original d.h. ohne Service Pack 1) enthalten.</p>
<ul>
<li>Es gibt im Datenbank-Designer für das EF4 keine Möglichkeit, die Reihenfolge von Properties zu ändern, weder mit der Maus interaktiv (etwa via &#8222;Drag &amp; Drop&#8220;) noch durch Änderungen im Eigenschaften-Fenster. Umgehungslösung: Direkt im XML hinter dem Designer herumpfuschen, so wie z.B. <a href="http://stackoverflow.com/questions/3498052/entity-framework-is-there-a-way-to-reorder-properties-in-the-edmx-designer">hier</a> erläutert.</li>
<li>Arbeitet man <i>Design First</i> d.h. generiert die Datenbank ab Design, gibt es keine Möglichkeit, sich im Designer zu Indices zu äussern: Indices kennt dieser schlicht nicht, abgesehen von denjenigen für <i>Primary Keys</i> natürlich.</li>
<li>Ebensowenig kennt der Designer <i>Unique Constraints</i>.</li>
<li>EF4 unterstützt <i>Enumerations</i> nicht. Leute lassen sich hier alle möglichen Umgehungslösungen einfallen, wie z.B. <a href="http://stackoverflow.com/questions/5147822/enums-in-ef4-poco-generated-objects">diese hier</a>, aber das grundsätzliche Problem schleckt keine Geiss weg, wie man hier in der Schweiz zu sagen pflegt. Etwas pikant ist an dieser Geschichte noch, dass <i>LINQ to SQL</i> offenbar Enumerations unterstützt.</li>
</ul>
<p>Bei allen 4 aufgeführten Dingen erstaunt es mich etwas, dass man mit dem Entity Framework Release 4 erreicht, ohne eine Lösung anzubieten. Wenn man die Signale von Microsoft richtig deutet, ist ja das EF zumindest im Moment <b>die</b> favorisierte Datenbank-Zugriffs-Technologie für .NET-Programme und hätte darum Detail-Pflege sicher verdient.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/megos.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/megos.wordpress.com/359/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/megos.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/megos.wordpress.com/359/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/megos.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/megos.wordpress.com/359/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/megos.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/megos.wordpress.com/359/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/megos.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/megos.wordpress.com/359/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/megos.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/megos.wordpress.com/359/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/megos.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/megos.wordpress.com/359/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=359&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://megos.wordpress.com/2011/05/25/ef4-zu-meckern-gibt-es-immer-etwas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d144980edde2f1b80ccd246210d9ce5f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">megosbr</media:title>
		</media:content>
	</item>
		<item>
		<title>Debugging von ASP.NET-MVC2-Applikationen</title>
		<link>http://megos.wordpress.com/2011/05/05/debugging-von-asp-net-mvc2-applikationen/</link>
		<comments>http://megos.wordpress.com/2011/05/05/debugging-von-asp-net-mvc2-applikationen/#comments</comments>
		<pubDate>Thu, 05 May 2011 09:29:59 +0000</pubDate>
		<dc:creator>René Brunner</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[MVC2]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://megos.wordpress.com/?p=353</guid>
		<description><![CDATA[Irgendwie ging immer alles schief, wenn ich Fehler aufspüren wollte in der Applikation, die ich gerade mit ASP.NET MVC2 entwickle: Z.B. bei der Verwendung eines Objekts, das fehlerhafterweise null war, stoppte der Debugger nicht am Ort des Fehlers, sondern irgendwo im MVC2-Code, dort nämlich, wo ein &#8222;hoch oben&#8220; angesiedelter Handler per catch die resultierende Exception [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=353&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Irgendwie ging immer alles schief, wenn ich Fehler aufspüren wollte in der Applikation, die ich gerade mit ASP.NET MVC2 entwickle: Z.B. bei der Verwendung eines Objekts, das fehlerhafterweise <i>null</i> war, stoppte der Debugger nicht am Ort des Fehlers, sondern irgendwo im MVC2-Code, dort nämlich, wo ein &#8222;hoch oben&#8220; angesiedelter Handler per <i>catch</i> die resultierende Exception abfing.</p>
<p>Um noch eins draufzusetzen, hatte Visual Studio zudem etwas am entsprechenden MVC2-Source-File mit dem <i>catch</i> drin zu meckern, das es vom Microsoft-Source-Code-Server heruntergeladen hatte, irgendetwas mit <i>Some bytes have been replaced with the Unicode substitution character while loading file</i>, so wie bei StackOverflow <a href="http://stackoverflow.com/questions/4305923/file-load-some-bytes-have-been-replaced-with-the-unicode-substitution-character-w">hier</a> beschrieben, notabene ohne Tipps zur Abhilfe.</p>
<p>Es gibt in Visual Studio eine Einstellung, mit der der Debugger gleich stoppt, sobald irgendeine Exception auftritt, unabhängig davon, ob ein <i>catch</i> dafür zuständig ist oder nicht, so wie <a href="http://msdn.microsoft.com/en-us/library/d14azbfh.aspx">hier</a> beschrieben, aber dieser Mechanismus hat auch so seine Probleme:</p>
<p>Mit Debugging-Option <i>Enable Just My Code</i> <b>nicht gesetzt</b> gibt&#8217;s viel zu viele Exceptions, weil in MVC2 vieles über Exceptions abgehandelt wird, die man dann alle erst &#8222;wegklicken&#8220; muss, bis schliesslich die eigene Exception drankommt, um die es eigentlich geht. Und mit Option <b>gesetzt</b> klappt&#8217;s mit Exceptions innerhalb von MVC2 nicht, die auftreten, weil man z.B. einer Methode einen Parameter als <i>null</i> übergeben hat, der definiert sein muss.</p>
<p>Die Rettung war schliesslich folgendes Vorgehen:</p>
<p>Man kann dankenswerterweise den Source Code von ASP.NET MVC2 bei Microsoft CodePlex <a href="http://aspnet.codeplex.com/releases/view/41742">hier</a> herunterladen, in einer Form, über die Visual Studio nichts zu meckern hat. Und es ist überraschend einfach, diesen Code quasi als &#8222;eigenen&#8220; Code in sein Projekt einzubinden, so wie <a href="http://blog.stevensanderson.com/2009/02/03/using-the-aspnet-mvc-source-code-to-debug-your-app/">hier</a> beschrieben. (Die Beschreibung ist zwar noch für MVC1, es klappt aber auch mit MVC2.)</p>
<p>Für die Zeit der Entwicklung meiner Applikation habe ich nun an zwei Orten in diesem MVC2-Source-Code <i>catch</i>-Anweisungen auskommentiert, so dass der Debugger die meisten auftretenden Exceptions als <i>unhandled</i> taxiert und gleich stoppt. (So komme ich jetzt ohne die erwähnte untaugliche Option aus, die den Debugger bei <b>jeder</b> Exception stoppen lässt.)</p>
<p>Auch sonst ist es natürlich ganz interessant, ein paar Blicke auf diesen Source-Code zu werfen, und man findet im Netz etliche Kommentare von Leuten, die schwierige Probleme in ihren Web-Applikationen nur dadurch lösen konnten, indem sie anhand dieser Sourcen im Debugger verfolgten, was innerhalb ASP.NET MVC2 genau passierte.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/megos.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/megos.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/megos.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/megos.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/megos.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/megos.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/megos.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/megos.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/megos.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/megos.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/megos.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/megos.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/megos.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/megos.wordpress.com/353/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=353&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://megos.wordpress.com/2011/05/05/debugging-von-asp-net-mvc2-applikationen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d144980edde2f1b80ccd246210d9ce5f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">megosbr</media:title>
		</media:content>
	</item>
		<item>
		<title>ASP.NET, EF4 und Threads: Klappt das eigentlich?</title>
		<link>http://megos.wordpress.com/2011/04/26/asp-net-ef4-und-threads-klappt-das-eigentlich/</link>
		<comments>http://megos.wordpress.com/2011/04/26/asp-net-ef4-und-threads-klappt-das-eigentlich/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 09:38:09 +0000</pubDate>
		<dc:creator>René Brunner</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[EF4]]></category>
		<category><![CDATA[MVC2]]></category>

		<guid isPermaLink="false">http://megos.wordpress.com/?p=347</guid>
		<description><![CDATA[Seit einiger Zeit arbeitete ich mich in die Welt der Programmierung von Web-Applikationen ein, mit Hilfe von ASP.NET MVC2, unter Verwendung von Entity Framework 4 (EF4) für den Datenbank-Zugriff. Es ging eine ganze Weile, bis mir auffiel, dass in allem Demo-Code und in allen Demo-Projekten wie etwa dem Nerd Dinner nirgends die Rede war von [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=347&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Seit einiger Zeit arbeitete ich mich in die Welt der Programmierung von Web-Applikationen ein, mit Hilfe von ASP.NET MVC2, unter Verwendung von Entity Framework 4 (EF4) für den Datenbank-Zugriff.</p>
<p>Es ging eine ganze Weile, bis mir auffiel, dass in allem Demo-Code und in allen Demo-Projekten wie etwa dem <a href="http://www.nerddinner.com/">Nerd Dinner</a> nirgends die Rede war von Datenkonsistenz-Problemen, die es geben kann bei Verwendung von ASP.NET und EF4. ASP.NET arbeitet per se mit Multi-Threading, und deshalb können die Datenbankzugriffe ganz schön durcheinandergehen, wenn man auf einem Web-Server eine anständige Menge an Zugriffen hat. Zudem bringt die Verwendung von EF4 mit sich, dass in einem <i>ObjectContext</i>-Objekt eine Menge Daten zwischengespeichert werden können. Die Gefahr, dass sich mehrere Nutzer meiner Web-Applikation gegenseitig ihre Änderungen überschreiben, schien mir real zu sein.</p>
<p>Heute bin ich deshalb dieser Frage auf den Grund gegangen und dabei auf eine kleine Überraschung gestossen.</p>
<p>Multi-Threading in ASP.NET findet statt auf der Ebene der Requests: 1 Request wird jeweils in einem eigenen Thread ausgeführt. In ASP.NET MVC2 werden Controllers pro Request jeweils neu erzeugt; wenn man also wie in den Samples vorgegeben einen EF4-Objekt-Kontext als normale Property der Controller-Klasse implementiert, leben diese Objekte nur recht kurz, womit sich auch das Risiko von Konflikten deutlich reduziert.</p>
<p>Nebenbei bemerkt: Solange man nicht selbst Threads erzeugt in seiner MVC-Applikation, sondern nur dem &#8222;automatischen&#8220; Threading von ASP.NET unterworfen ist, hat man also kein Problem damit, dass <i>ObjectContext</i> wie viele andere Framework-Klassen <b>nicht</b> thread-safe ist. Man darf nur nicht auf die Idee kommen, ein solches Objekt <i>static</i> zu deklarieren in seinem Controller!</p>
<p>Soweit, so gut, aber das Risiko von Konflikten sinkt damit natürlich nicht auf Null.</p>
<p>Die erwähnte Überraschung (zumindest für mich) fand sich schliesslich in <a href="http://msdn.microsoft.com/en-us/library/bb738618.aspx">diesem MSDN-Artikel</a>: Per Default prüft EF4 bei Datenveränderungen <b>nicht</b> auf irgendwelche Optimismus-Verletzungen, sondern überschreibt einfach munter mit den aktuellen Daten in den Entities.</p>
<p>Mir persönlich scheint das ein etwas fragwürdiger Default zu sein, aber zum Glück kann man ihn relativ einfach überstimmen: Auf der Ebene einzelner Properties in einem EF4-Datenmodell ändert man einfach die Eigenschaft <i>Concurrency Mode</i> weg vom Default <i>None</i> auf <i>Fixed</i>. Die korrekte Behandlung einer <i>OptimisticConcurrencyException</i>, die es dann bei <i>SaveChanges()</i> geben kann, wird z.B. in <a href="http://msdn.microsoft.com/en-us/library/bb399228.aspx">diesem MSDN-Artikel</a> erläutert. Wieso allerdings dieser Modus &#8222;fixed&#8220; heisst, hat sich mir bisher nicht erschlossen&#8230;</p>
<p>Wenn&#8217;s etwas komplizierter wird und man z.B. einen eigenen Datenzugriffs-Layer in seiner Applikation implentieren will, findet man <a href="http://dotnetslackers.com/articles/ado_net/managing-entity-framework-objectcontext-lifespan-and-scope-in-n-layered-asp-net-applications.aspx">hier</a> gute Erläuterungen zu Varianten, wie man die &#8222;Lebenszeit&#8220; von <i>ObjectContext</i>-Objekten organisieren kann.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/megos.wordpress.com/347/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/megos.wordpress.com/347/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/megos.wordpress.com/347/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/megos.wordpress.com/347/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/megos.wordpress.com/347/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/megos.wordpress.com/347/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/megos.wordpress.com/347/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/megos.wordpress.com/347/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/megos.wordpress.com/347/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/megos.wordpress.com/347/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/megos.wordpress.com/347/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/megos.wordpress.com/347/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/megos.wordpress.com/347/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/megos.wordpress.com/347/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=347&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://megos.wordpress.com/2011/04/26/asp-net-ef4-und-threads-klappt-das-eigentlich/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d144980edde2f1b80ccd246210d9ce5f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">megosbr</media:title>
		</media:content>
	</item>
		<item>
		<title>Visual Studio Refactoring und Code in .aspx</title>
		<link>http://megos.wordpress.com/2011/01/20/visual-studio-refactoring-und-code-in-aspx/</link>
		<comments>http://megos.wordpress.com/2011/01/20/visual-studio-refactoring-und-code-in-aspx/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 09:38:55 +0000</pubDate>
		<dc:creator>René Brunner</dc:creator>
				<category><![CDATA[Keine Kategorie]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://megos.wordpress.com/?p=341</guid>
		<description><![CDATA[Als ich vor ein paar Jahren die Refactoring-Befehle in Visual Studio kennenlernte, insbesondere das Rename-Kommando, hatte ich irgendwie das Gefühl, nach einem langem Aufenthalt in der Tool-Steinzeit endlich in der Moderne angekommen zu sein: Nie wieder der Horror von rein textuellem Search &#38; Replace, wenn 2 ganz verschiedene Dinge gleich heissen und man nur eines [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=341&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Als ich vor ein paar Jahren die <i>Refactoring</i>-Befehle in Visual Studio kennenlernte, insbesondere das <i>Rename</i>-Kommando, hatte ich irgendwie das Gefühl, nach einem langem Aufenthalt in der Tool-Steinzeit endlich in der Moderne angekommen zu sein: Nie wieder der Horror von rein textuellem <i>Search &amp; Replace</i>, wenn 2 ganz verschiedene Dinge gleich heissen und man nur eines davon umbenennen will.</p>
<p>Mit der Zeit denkt man gar nicht mehr so darüber nach: Ist doch selbstverständlich, den Texteditor mit dem Compiler zusammenzuschalten, der schliesslich ganz genau weiss, welche Referenz auf welches Objekt zeigt, ganz egal, wie viele Dinge rein textuell gesehen gleich heissen.</p>
<p>Als vor kurzem ein ASP.NET-MVC2-Projekt nach einem Refactoring mit Fehlern in .aspx-Files nicht mehr kompilieren wollte, dachte ich zuerst an eine Fehlbedienung meinerseits oder an einen nur sporadisch auftretenden Bug in Visual Studio 2010, aber eine Recherche heute brachte schliesslich Klarheit: Es herrscht wieder Steinzeit. Das Refactoring in VS2010 ist nicht schlau genug, bei Rename auch Code-Stücke in .aspx-Files zu erfassen.</p>
<p>Man findet dieses Problem im Internet, z.B. in <a href="http://stackoverflow.com/questions/2440575/basic-refactoring-features-e-g-rename-unavailable-when-editing-code-in-an-asp">dieser Frage</a> auf Stack Overflow, aber eine eigentliche Empörung über dieses klaffende Loch im System scheint es interessanterweise nicht zu geben. (Intellisense funktioniert auch in .aspx-Files, irgendwie, aber mit einem Fehlen jenes Features wäre Microsoft wahrscheinlich nicht durchgekommen bei der Entwickler-Gemeinde.)</p>
<p>Zum Glück gibt es Leute, welche sich solcher Probleme annehmen, und Tools wie <a href="http://www.jetbrains.com/resharper/">ReSharper</a> programmieren, welche die Welt sozusagen wieder geraderücken.</p>
<p>Allerdings droht bereits neues Ungemach: Leute scheinen sich immer wieder neue Spielarten von Syntax auszudenken, wie man am besten und elegantesten C#-Code mit HTML mischt, nicht zuletzt Microsoft selbst mit der neuen <a href="http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx">Razor View Engine</a> für ASP.NET MVC3. Und diese neuen Spielarten überfordern dann Tools wie den erwähnten ReSharper zunächst wieder, wie man etwa im <a href="http://blogs.jetbrains.com/dotnet/">Blog</a> der Hersteller-Firma nachlesen kann.</p>
<p>Das ist wohl ein nicht zu vermeidendes Problem im Zuge der rasanten Weiterentwicklung, welche die ganze .NET-Welt mitmacht&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/megos.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/megos.wordpress.com/341/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/megos.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/megos.wordpress.com/341/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/megos.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/megos.wordpress.com/341/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/megos.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/megos.wordpress.com/341/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/megos.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/megos.wordpress.com/341/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/megos.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/megos.wordpress.com/341/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/megos.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/megos.wordpress.com/341/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=megos.wordpress.com&amp;blog=3283101&amp;post=341&amp;subd=megos&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://megos.wordpress.com/2011/01/20/visual-studio-refactoring-und-code-in-aspx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d144980edde2f1b80ccd246210d9ce5f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">megosbr</media:title>
		</media:content>
	</item>
	</channel>
</rss>
