<?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/"
	>

<channel>
	<title></title>
	<atom:link href="http://www.codingfreaks.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codingfreaks.de</link>
	<description>codingfreaks Blog</description>
	<lastBuildDate>Mon, 06 Feb 2012 18:56:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>IntelliTrace zum Anfassen</title>
		<link>http://www.codingfreaks.de/2012/02/06/intellitrace-zum-anfassen/</link>
		<comments>http://www.codingfreaks.de/2012/02/06/intellitrace-zum-anfassen/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 18:55:52 +0000</pubDate>
		<dc:creator>sprinter</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Threading]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.codingfreaks.de/?p=951</guid>
		<description><![CDATA[TweetIntelliTrace ist nichts für arme Leute. Erst mit der Ultimate-Version von Visual Studio 2010 kommt man in den Genuss dieses Features. Das ist wohl auch der Grund, warum so viele Leute nicht wissen, was das eigentlich ist. codingfreaks zeigts in Aktion. Links Sample-Projektmappe Visual Studio 2010 Microsoft-Informationen zum Thema Einführung IntelliTrace ist die konsequente Weiterentwicklung [...]]]></description>
		<wfw:commentRss>http://www.codingfreaks.de/2012/02/06/intellitrace-zum-anfassen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=codingfreaks&amp;url=http%3A%2F%2Fwww.codingfreaks.de%2F2012%2F02%2F06%2Fintellitrace-zum-anfassen%2F&amp;language=de_DE&amp;category=text&amp;title=IntelliTrace+zum+Anfassen&amp;description=IntelliTrace+ist+nichts+f%C3%BCr+arme+Leute.+Erst+mit+der+Ultimate-Version+von+Visual+Studio+2010+kommt+man+in+den+Genuss+dieses+Features.+Das+ist+wohl+auch+der+Grund%2C+warum+so+viele+Leute+nicht+wissen%2C+was+das+eigentlich+ist.+codingfreaks+zeigts+in+Aktion.%0D%0A%0D%0A%0D%0ALinks%0D%0ASample-Projektmappe+Visual+Studio+2010%0D%0A%0D%0AMicrosoft-Informationen+zum+Thema%0D%0A%0D%0A%5Bjwplayer+file%3D%22http%3A%2F%2Fyoutu.be%2FCXanNMPLmHk%22%5D%0D%0AEinf%C3%BChrung%0D%0AIntelliTrace+ist+die+konsequente+Weiterentwicklung+der+durch+die+letzten+Releases+von+Visual+Studio+stetig+verbesserten+Debugging-M%C3%B6glichkeiten.+Nachdem+Features%2C+wie+bedingte+Haltepunkte%2C+Variablen%C3%BCberwachung+und+Thread-Debugging+bereits+seit+l%C3%A4ngerem+m%C3%B6glich+sind%2C+hat+Microsoft+mit+IntelliTrace+vor+allem+die+folgenden+Neuerungen+durch+IntelliTrace+geliefert%3A%0D%0A%0D%0A%09M%C3%B6glichkeit+der+Wiederherstellung+fast+jedes+Zustandes+innerhalb+der+Laufzeit+einer+Debug-Session%0D%0A%09Automatisches+Protokollieren+nebenl%C3%A4ufiger+Aktivit%C3%A4ten+und+aggregierte+Darstellung%0D%0A%09Speicherung+und+Weitergabe+einer+Debug-Session+inkl.+des+Session-States%0D%0A%0D%0AUnser+Sample%0D%0AUm+die+M%C3%B6glichkeiten+von+IntelliTrace+besser+beleuchten+zu+k%C3%B6nnen%2C+bedarf+es+schon+ein+wenig+mehr+als+einem+einfachen+HelloWorld+oder+einer+sonstwie+simpel+gehaltenen+Konsolenanwendung.+Ich+habe+daher+im+Sample+zu+diesem+Beitrag+%28siehe+oben%29+weiter+ausgeholt.+Das+Programm+dient+dazu%2C+ein+beliebiges+Bild+so+zu+analysieren%2C+dass+eine+Statistik+der+verwendeten+Farben+dabei+herauskommt.+Es+ist+in+der+Lage%2C+auszugeben%2C+welche+Farben+in+jeweils+wievielen+Pixeln+in+einem+Bitmap+verwendet+werden.%0D%0A%0D%0ADie+Aufgabe+ist+nicht+zuf%C3%A4llig+gew%C3%A4hlt.+Sie+eignet+sich+besonders+gut+zur+Parallelisierung.+Anstatt+das+Bild+einfach+nur+seriell+zu+analysieren%2C+habe+ich+es+so+implementiert%2C+dass+%C3%BCber+eine+Variable+_workers+eingestellt+werden+kann%2C+wieviele+Arbeitsrozesse+sich+die+Arbeit+teilen+sollen.+Dabei+kann+zwischen+1+und+einer+beliebigen+durch+2+teilbaren+Anzahl+von+Prozessen+gew%C3%A4hlt+werden.+Das+Schema+der+Abarbeitung+kann+man+wie+folgt+widergeben%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_955%22+align%3D%22alignnone%22+width%3D%22535%22+caption%3D%22Abb.+1%3A+Arbeitsweise+der+Software%22%5D%5B%2Fcaption%5D%0D%0A%0D%0AIch+benutze+dieses+Mal+keine+eigene+Thread-Implementierung%2C+sondern+die+Task+Parallel+Library+%28TPL%29%2C+die+seit+.NET-Framework+4.0+im+Namespace+System.Threading.Tasks+mitgeliefert+wird.+Kurz+gesagt+bietet+sie+einen+hervorragenden+Wrapper%2C+um+sich+nicht+mehr+mit+Thread%2C+ThreadPool+u.%C3%A4.+herumzuschlagen.+Erg%C3%A4nzt+um+die+n%C3%BCtzlichen+Container+aus+System.Collections.Concurrent+k%C3%B6nnen+wir+eleganter+mit+Threads+und+Concurrency+umgehen.+Also+ans+Werk%21%0D%0AMit+IntelliTrace+einsteigen%0D%0ABedenken+sollte+man%2C+dass+man+das+Folgende+nur+nachvollziehen+kann%2C+wenn+man+Inhaber+der+nicht+ganz+billigen+Ultimate-Version+von+Visual+Studio+2010+ist.+F%C3%BCr+alle+anderen+habe+ich+einen+Screencast+bereit+gestellt%2C+damit+man+mir+bei+meinem+Vorgehen+%C3%BCber+die+Schulter+sehen+kann.%0D%0A%0D%0AIntelliTrace+arbeitet+erst%2C+wenn+man+%C3%BCber+einen+Haltepunkt+in+den+Ablauf+eines+Programms+einsteigt.+Wer+sich+das+Sample+heruntergeladen+hat%2C+sollte+f%C3%BCr+das+Folgende+einen+Haltepunkt+in+Zeile+133+der+Program.cs+setzen%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+1%3A+Zeile+f%C3%BCr+den+ersten+Haltepunkt%22%5D%0D%0AcolorAtPoint%C2%A0%3D%C2%A0_bitmap.GetPixel%28x%2C%C2%A0y%29%3B%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0AIntelliTrace+arbeitet+ohne+weiteres+mit+anderen+Features%2C+wie+den+bedingten+Haltepunkten+usw.+zusammen.%0D%0A%0D%0AWenn+wir+nun+beherzt+auf+F5+dr%C3%BCcken%2C+passiert+erstmal+nicht+viel%2C+au%C3%9Fer%2C+dass+wir+irgendwann+im+Debug-Mode+landen+und+Visual+Studio+einen+Haltepunkt+bei+Zeile+133+erreicht+hat.+Es+kommt+nun+aber+z.B.+die+Frage+auf%2C+auf+welchem+Thread+wir+uns+eigentlich+befinden%3F%0D%0A%0D%0ADas+Programm+hilft+ein+wenig+und+gibt+im+Trace+in+Abh%C3%A4ngigkeit+von+der+Menge+der+eingestellten+Worker+%284+in+meinem+Fall%29+folgendes+in+der+Ausgabe+aus%3A%0D%0A%0D%0A%5Bdos%5D%0D%0A%0D%0AWorker+started+for+coordinates+600%3A0-1199%3A799+on+thread+6%0D%0AWorker+started+for+coordinates+0%3A800-599%3A1599+on+thread+13%0D%0AWorker+started+for+coordinates+600%3A800-1199%3A1599+on+thread+12%0D%0A%0D%0A%5B%2Fdos%5D%0D%0A%0D%0AWir+sehen+also%2C+dass+bisher+erst+3+von+4+Workern+gestartet+wurden.+Die+ID+des+Threads+am+Ende%C2%A0+ist+jeweils+die+Managed+Thread-ID.+In+Visual+Studio+kann+man+nun+im+Fenster+%22Debuggen-%26gt%3BFenster-%26gt%3BThreads%22+%28Strg+D%2C+T%29+einsehen%2C+welcher+Thread+gerade+was+tut%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_963%22+align%3D%22alignnone%22+width%3D%22300%22+caption%3D%22Abb.+2%3A+Thread-Fenster%22%5D%5B%2Fcaption%5D%0D%0A%0D%0AWie+man+Abb.+2+entnehmen+kann%2C+ist+der+Haltepunkt+bei+dem+managed+Thread+6+angekommen.+Dieser+ist+als+Arbeits-Thread+markiert.+Hier+k%C3%B6nnen+wir+auch+sehr+sch%C3%B6n+mappen%2C+dass+der+managed+Thread+6+zum+System-Thread+3684+geh%C3%B6rt.+Eine+enorme+Hilfe+im+Gegensatz+zu+VS-2005-Zeiten.%0D%0A%0D%0AWer+nun+ein+VS-2010-Ultimate+sein+Eigen+nennt%2C+kann+%C3%BCber+%22Debuggen-%26gt%3BFenster-%26gt%3BIntelliTrace-Ereignisse%22+%28Strg%2BD%2CV%29+in+die+IntelliTrace-Erlebniswelt+eintauchen.+Hier+der+entsprechende+Screenshot%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_964%22+align%3D%22alignnone%22+width%3D%22300%22+caption%3D%22Abb.+3%3A+IntelliTrace+in+Aktion%22%5D%5B%2Fcaption%5D%0D%0A%0D%0ADieses+Fenster+muss+zun%C3%A4chst+einmal+immer+von+oben+nach+unten+interpretiert+werden.+D.h.%2C+je+weiter+oben+sich+ein+Eintrag+befindet%2C+desto+eher+wurde+er+erzeugt.+Der+erste+Eintrag+ist+daher+immer+der+%22Debugger%22-Eintrag.+Er+markiert+den+Beginn+der+IntelliTrace-Sitzung.%0D%0A%0D%0ADas+IntelliTrace+meldet+von+sich+aus+bereits+ziemlich+viele+Einzelheiten.+Die+Meldungswut+selbst+kann+man+%C3%BCber+das+3.+Symbol+von+links+in+der+IntelliTrace-Toolbar+einstellen.+Ein+Klick+darauf+%C3%B6ffnet+die+VS-Eigenschaften-Seiten+f%C3%BCr+IntelliTrace.+Hier+ein+paar+Anmerkungen+zu+den+4+Optionsgruppen%2C+die+es+hier+gibt.%0D%0AIntelliTrace-Optionen+%22Allgemein%22%0D%0A%5Bcaption+id%3D%22attachment_965%22+align%3D%22alignnone%22+width%3D%22300%22+caption%3D%22Abb.+4%3A+IntelliTrace-Optionen+Allgemein%22%5D%5B%2Fcaption%5D%0D%0A%0D%0ASetzt+man+hier+die+Option+auf+den+zweiten+Wert%2C+wird+Visual+Studio+in+Zukunft+wesentlich+beh%C3%A4biger+im+Debug-Modus.+Das+Geheimnis+ist%2C+dass+nun+nicht+mehr+nur+Ereignisse+gefangen+und+angezeigt%2C+sondern+auch+die+sog.+Aufrufliste+verf%C3%BCgbar+sind.+Sie+zeigen+die+Historie+einer+Sitzung+gruppiert+nach+erkannten+Calls+an.+In+unserem+Beispiel+w%C3%A4re+das+zum+aktuellen+Zeitpunkt%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_966%22+align%3D%22alignnone%22+width%3D%22300%22+caption%3D%22Abb.+5%3A+Aufufliste+von+IntelliTrace%22%5D%5B%2Fcaption%5D%0D%0A%0D%0ADiese+Ansicht+zeigt+sehr+sch%C3%B6n%2C+dass+wir+uns+aktuell+in+der+Methode+CalcPoints+befinden+und+welche+Aktionen+bereits+der+aktuellen+vorrausgegangen+sind.+Der+wirklich+aktuelle+Haltepunkt+ist+durch+das+Uhren-Symbol+mit+dem+gelben+Pfeil+dargestellt.+Hat+ein+Aufruf+Ereignisse+in+der+Ereignisliste+erzeugt%2C+ist+das+blaue+return-artige+Symbol+daneben+dargestellt.%0D%0AIntelliTrace-Optionen+%22Erweitert%22%0D%0A%5Bcaption+id%3D%22attachment_967%22+align%3D%22alignnone%22+width%3D%22300%22+caption%3D%22Abb.+6%3A+IntelliTrace-Optionen+Erweitert%22%5D%5B%2Fcaption%5D%0D%0A%0D%0AHier+k%C3%B6nnen+diverse+Standardwerte%2C+wie+das+Standard-Verzeichnis+f%C3%BCr+die+Ablage+der+IntelliTrace-Protokolle%2C+Quota+usw.+eingestellt+werden.%0D%0AIntelliTrace-Optionen+%22IntelliTrace-Ereignisse%22%0D%0A%5Bcaption+id%3D%22attachment_968%22+align%3D%22alignnone%22+width%3D%22300%22+caption%3D%22Abb.+7%3A+IntelliTrace-Optionen+f%C3%BCr+Ereignisse%22%5D%5B%2Fcaption%5D%0D%0A%0D%0ADas+ist+wohl+der+interessanteste+Options-Bereich.+Hier+kann+man+ganz+gezielt+ausw%C3%A4hlen%2C+welche+Aktivit%C3%A4ten+des+Programmes+bzw.+Systems+automatisch+zu+Eintr%C3%A4gen+in+der+IntelliTrace-Ereignisliste+f%C3%BChren+sollen.+So+beh%C3%A4lt+man+bestimmte+Aktivit%C3%A4ten+im+Blick%2C+die+man+vorher+gar+nicht+bewusst+wahrgenommen+hat.%0D%0AIntelliTrace-Optionen+%22Module%22%0D%0A%5Bcaption+id%3D%22attachment_969%22+align%3D%22alignnone%22+width%3D%22300%22+caption%3D%22Abb.+8%3A+IntelliTrace-Optionen+Module%22%5D%5B%2Fcaption%5D%0D%0A%0D%0AHier+kann+man+ein-+bzw.+ausschlie%C3%9Fen+welche+Quellen+f%C3%BCr+IntelliTrace+verwendet+werden+sollen.%0D%0AZeitreise%0D%0AJetzt+kann+man+so+richtig+loslegen.+Angenommen%2C+man+m%C3%B6chte+z.B.+wissen%2C+wie+der+Status+des+Programmes+war%2C+BEVOR+der+erste+Worker-Thread+gestartet+wurde.+In+der+Ereignisliste+in+Abb.+3+erkennen+wir%2C+dass+gleich+nach+Beginn+der+Debug-Session+4+Tasks+gestartet+wurden.+Alle+4+haben+keine+explizite+managed+ID.+Das+klingt+schwer+nach+unseren+4+Workern%21+Aber+sind+sie+es+auch%3F+IntelliTrace+bringt+Klarheit.%0D%0A%0D%0AKlickt+man+nun+auf+einen+dieser+Eintr%C3%A4ge+aus+der+Quelle+%22Threading%22%2C+ver%C3%A4ndert+sich+das+Debugging-Fenster+pl%C3%B6tzlich.%0D%0A%0D%0AIm+IntelliTrace-Fenster+selbst+wird+der+angeklickte+Eintrag+nun+erweitert+dargestellt%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_970%22+align%3D%22alignnone%22+width%3D%22300%22+caption%3D%22Abb.+9%3A+IntelliTrace+nach+Klick+auf+ein+Element%22%5D%5B%2Fcaption%5D%0D%0A%0D%0AWir+sehen+nun%2C+aus+welchem+Thread+heraus+das+Ereignis+aufgerufen+wurde%2C+k%C3%B6nnen+von+hier+aus+in+verschiedene+Ansichten+verzweigen+und+bekommen+Detail-Informationen.+Das+Code-Fenster+mit+unserem+Haltepunkt+hat+sein+Aussehen+auch+ver%C3%A4ndert%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_971%22+align%3D%22alignnone%22+width%3D%22300%22+caption%3D%22Abb.+10%3A+IntelliTrace+im+Code+nach+R%C3%BCcksprung%22%5D%5B%2Fcaption%5D%0D%0A%0D%0ADer+Pointer+ist+nun+nicht+mehr+auf+unserem+Haltepunkt%2C+sondern+an+der+Stelle+im+Code%2C+die+das+Ereignis+ausgel%C3%B6st+hat%2C+das+uns+interessiert.+Jetzt+wird+alles+schon+klarer.+Das+ist+also+ein+Task.Factory.StartNew-Aufruf+aus+der+TPL%2C+der+intern+zu+einem+neuen+Thread+f%C3%BChrt.+Das+macht+Sinn.+Aber+der+wievielte+Aufruf+ist+es%3F+Wir+rufen+die+Tasks+ja+schlie%C3%9Flich+in+einer+Schleife+auf.+Hier+beginnen+nun+aber+die+Grenzen+von+IntelliTrace.+Das+Entwicklungsteam+hat+sich+dazu+entschieden%2C+nur+bestimmte+%C3%9Cbergabe-Variablen+an+Methoden-Eing%C3%A4ngen+zu+sammeln.%0D%0A%0D%0AMan+kann+das+sch%C3%B6n+im+Fenster+%22Debuggen-%26gt%3BFenster-%26gt%3BAuto%22+%28Strg%2BD%2CA%29+sehen%2C+wenn+man+den+IntelliTrace-Point+auf+das+erste+Ereignis+setzt%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_972%22+align%3D%22alignnone%22+width%3D%22300%22+caption%3D%22Abb.+11%3A+Fenster+Autos+w%C3%A4hrend+IntelliTrace%22%5D%5B%2Fcaption%5D%0D%0A%0D%0ADas+sonst+so+gespr%C3%A4chige+Fensterchen+ist+ziemlich+leer%2C+zeigt+aber+zumindest+das+Vorhandensein+von+args+als+Variable.+Es+gibt+ein+paar+Workarounds%2C+wie+z.B.+das+Festlegen+eines+Tracepoints+%28Ein+Breakpoint%2C+der+sp%C3%A4ter+mit+%22Bei+Treffer...%22+zu+einer+Raute+geswitcht+wird%29.+In+meinen+Tests+hat+das+aber+auch+nicht+zuverl%C3%A4ssig+funktioniert.%0D%0A%0D%0AHat+man+einen+IntelliTrace-Punkt+angeklickt%2C+kann+man+nun+im+Code-Fenster+auf+das+kleine+Symbol+mit+dem+Pfeil+nach+links+klicken+%28links+vom+Code%29%2C+um+den+Debugger-Kontext+auf+diesen+IntelliTrace-Punkt+umzubiegen.+Der+Debugger+selbst+%22denkt%22+ja+immer+noch%2C+wir+w%C3%BCrden+uns+f%C3%BCr+den+Haltepunkt+interessieren.%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_973%22+align%3D%22alignnone%22+width%3D%22300%22+caption%3D%22Abb.+12%3A+Debugger-Kontext+gewechselt%22%5D%5B%2Fcaption%5D%0D%0A%0D%0AJetzt+%C3%A4ndert+sich+das+IntelliTrace-Menu+am+Rand+und+man+kann+z.B.+schrittweise+vor-+und+zur%C3%BCckgehen.+%22Schrittweise%22+meint+hier+%C3%BCbrigens+IntelliTrace-Schritte%2C+die+irgendein+anderes+Symbol%2C+als+einen+Ereignis-Blitz+haben.+Ein+Klick+auf+das+Symbol+f%C3%BCr+den+Live-Modus+%28F5%29+bringt+uns+wieder+in+eine+%22normale%22+Debugger-Session.%0D%0A%0D%0AWas+haben+wir+also+bis+hierher%3F+Wir+haben+einfach+viel+mehr+Informationen+%C3%BCber+die+Historie+unserer+Anwendung.+Wir+sehen+z.B.%2C+dass+irgendwann+die+Datei+%22machine.config%22+ge%C3%B6ffnet+und+wieder+geschlossen+wurde.+Wir+sehen+jeden+Trace-Eintrag.+In+ADO.NET+w%C3%BCrden+wir+Details+zu+Readern+und+Connections+sehen.+Wir+sehen+einfach+alles+M%C3%B6gliche+im+zeitlichen+Zusammenhang.+So+etwas+ging+bisher%2C+wenn+%C3%BCberhaupt%2C+nur+mit+dem+manuellen+Loggen+und+Tracen+und+dem+m%C3%BChevollen+h%C3%A4ndischen+Aufbereiten+der+Daten+als+Timeline.+Bis+herhin+w%C3%BCrde+IntelliTrace+schon+reichen.+Aber+es+kann+noch+mehr.%0D%0A%22Kannst+Du+mal+gucken%3F%22%0D%0ANehmen+wir+mal+an%2C+wir+entdecken+ein+St%C3%BCck+Code%2C+das+vielleicht+den+Fehler+erzeugen+k%C3%B6nnte%2C+nach+dem+wir+suchen.+Wir+haben+den+Code+aber+gar+nicht+geschrieben.+Was+nun%3F+Fr%C3%BCher+h%C3%A4tte+man+wohl+auf+den+n%C3%A4chsten+gemeinsamen+Termin+mit+dem+Autor+gewartet%2C+eine+Remote-Session+aufgebaut+oder+%C3%84hnliches+versucht.%0D%0A%0D%0AHaben+beide+Entwickler+IntelliTrace%2C+kann+man+den+Status+einer+IntelliTrace-Session+speichern.+Dazu+klickt+man+im+IntelliTrace-Fenster+einfach+auf+das+Disketten-Symbol+und+speichert+die+Session+als+%2A.iTrace-Datei+ab.+Es+handelt+sich+hierbei+um+ein+Bin%C3%A4rformat.+Die+Dateien+sind+nicht+ganz+klein+%28f%C3%BCr+unser+kleines+Tool+11+MB%29%2C+was+aber+auch+logisch%2C+ist%2C+sieht+man+sich+den+Funktionsumfang+an.%0D%0A%0D%0ADie+Datei+kann+nun+auf+einem+anderen+Rechner+ge%C3%B6ffnet+werden.+Im+Standard+entsteht+erst+einmal+eine+Zusammenfassungs-Seite%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_976%22+align%3D%22alignnone%22+width%3D%22300%22+caption%3D%22Abb.+13%3A+iTrace-Datei+ge%C3%B6ffnet+im+VS%22%5D%5B%2Fcaption%5D%0D%0A%0D%0AMan+kann+nun+die+Liste+der+Threads+%C3%B6ffnen%2C+sich+die+geladenen+Module+ansehen+oder+auch+in+die+Threads+am+oberen+Rand+einsteigen.+Manche+der+Funktionen+sind+nur+dann+sinnvoll+einsetzbar%2C+wenn+das+Projekt+auch+auf+der+anderen+Maschine+vorhanden+ist%2C+da+IntelliTrace+sonst+nicht+wei%C3%9F%2C+was+es+da+laden+soll.+Ohne+Quellcode+kann+auch+IntelliTrace+wenig+machen+%3A-%29.%0D%0A%0D%0ADie+iTrace-Dateien+kann+man+wunderbar+auf+der+eigenen+Maschine+einsetzen%2C+um+bestimmte+Stati+wegzuspeichern+und+wieder+ablaufen+zu+lassen.+%C3%96ffnet+man+eine+iTrace-Dateim+sp%C3%A4ter%2C+kann+man+die+komplette+IntelliTrace-Navigation+nutzen.%0D%0AWas+noch%3F%0D%0ABis+hierhin+sollte+bereits+erkennbar+geworden+sein%2C+dass+IntelliTrace+wirklich+n%C3%BCtzlich+ist+und+das+Debugging+erheblich+erleichtert.+Es+ist+kein+Ersatz+f%C3%BCr+die+bisher+verf%C3%BCgbaren+Tools%2C+erg%C3%A4nzt+sie+aber+wirklich+gut.%0D%0A%0D%0AEin+paar+kleinere+Funktionen+habe+ich+noch+nicht+erw%C3%A4hnt.%0D%0A%0D%0ADie+Liste+der+IntelliTrace-Ereignisse+und+-Aufrufe+kann+man+z.B.+nach+Threads+filtern.+So+k%C3%B6nnen+wir+uns+z.B.+nur+auf+unseren+Thread+3684+%28nach+einem+Neustart+hat+der+Thread+bei+mir+jetzt+die+ID+7088%21%29+konzentrieren+und+alle+anderen+Worker+au%C3%9Fer+Acht+lassen%2C+wenn+wir+wissen%2C+dass+der+Fehler+irgendwo+da+auftaucht%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_977%22+align%3D%22alignnone%22+width%3D%22300%22+caption%3D%22Abb.+14%3A+IntelliTrace+auf+Threads+filtern%22%5D%5B%2Fcaption%5D%0D%0A%0D%0AL%C3%A4uft+eine+IntelliTrace-Sitzung%2C+kann+man+im+Code+jederzeit+rechts+auf+eine+Zeile+klicken+und+aus+dem+Kontextmenu+die+Option+%22In+IntelliTrace+nach+dieser+Zeile+suchen%22+oder+%22In+IntelliTrace+nach+dieser+Methode+suchen%22+ausw%C3%A4hlen.+Als+Ergebnis+wird+am+oberen+Rand+des+Visual+Studio+Codefensters+eine+Navigation+gezeigt.+Der+folgende+Screenshot+zeigt+mir+alle+Ereignisse%2C+die+mit+der+Methode+CalcPoints+zu+tun+haben%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_978%22+align%3D%22alignnone%22+width%3D%22300%22+caption%3D%22Abb.+15%3A+IntelliTrace-Navigation+im+Code%22%5D%5B%2Fcaption%5D%0D%0A%0D%0A%C3%9Cber+die+Pfeile+kann+ich+nun+vor-+und+zur%C3%BCckspringen+und+werde+immer+dorthin+im+IntelliTrace+gef%C3%BChrt%2C+wo+die+Methode+CamcPoints+eine+Rolle+spielte.%0D%0AResum%C3%A9%0D%0AIntelliTrace+ist+n%C3%BCtzlich.+Ich+hoffe%2C+dass+es+in+den+n%C3%A4chsten+Versionen+von+VS+bereits+zu+den+g%C3%BCnstigeren+Versionen+geh%C3%B6ren+wird.+Mindestens+in+die+Premium+sollte+es+die+Funktion+schon+schaffen.+MS+kann+ja+eins+der+neuen+Features+daf%C3%BCr+in+die+Ultimate+schieben%21+Hat+man+IntelliTrace+einmal+eingesetzt%2C+m%C3%B6chte+man+nicht+mehr+ohne.&amp;tags=Process%2CThreading%2CVisual+Studio%2Cblog" type="text/html" />
	</item>
		<item>
		<title>HTML-Editor in ASP.NET MVC mit Razor</title>
		<link>http://www.codingfreaks.de/2012/01/31/html-editor-in-asp-net-mvc-mit-razor/</link>
		<comments>http://www.codingfreaks.de/2012/01/31/html-editor-in-asp-net-mvc-mit-razor/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 16:39:14 +0000</pubDate>
		<dc:creator>sprinter</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://www.codingfreaks.de/?p=932</guid>
		<description><![CDATA[TweetMittlerweile ist es durchaus üblich, dass man den Benutzern eines Web-Frontends an bestimmten Stellen die Möglichkeit bietet, Inhalte nicht nur als Plain-Text, sondern formatiert anzulegen. codingfreaks zeigt, wie man das mit ASP.NET MVC und Razor als View-Engine implementiert. Vorüberlegungen Bevor wir so richtig in MVC loslegen können, gilt es erst einmal zu klären, wie wir [...]]]></description>
		<wfw:commentRss>http://www.codingfreaks.de/2012/01/31/html-editor-in-asp-net-mvc-mit-razor/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=codingfreaks&amp;url=http%3A%2F%2Fwww.codingfreaks.de%2F2012%2F01%2F31%2Fhtml-editor-in-asp-net-mvc-mit-razor%2F&amp;language=de_DE&amp;category=text&amp;title=HTML-Editor+in+ASP.NET+MVC+mit+Razor&amp;description=Mittlerweile+ist+es+durchaus+%C3%BCblich%2C+dass+man+den+Benutzern+eines+Web-Frontends+an+bestimmten+Stellen+die+M%C3%B6glichkeit+bietet%2C+Inhalte+nicht+nur+als+Plain-Text%2C+sondern+formatiert+anzulegen.+codingfreaks+zeigt%2C+wie+man+das+mit+ASP.NET+MVC+und+Razor+als+View-Engine+implementiert.%0D%0A%0D%0A%0D%0AVor%C3%BCberlegungen%0D%0ABevor+wir+so+richtig+in+MVC+loslegen+k%C3%B6nnen%2C+gilt+es+erst+einmal+zu+kl%C3%A4ren%2C+wie+wir+die+formatierte+Eingabe+%C3%BCberhaupt+realisieren+wollen.+Zum+Gl%C3%BCck+haben+sich+bereits+viele+andere+solche+Gedanken+gemacht.+Es+gibt+eine+reiche+Auswahl+an+fertigen+Bibliotheken.%0D%0A%0D%0AAls+ich+mich+entscheiden+musste%2C+habe+ich+mir+folgenden+Filter+%C3%BCberlegt%3A%0D%0A%0D%0A%09Die+einzusetzende+Komponente+muss+auf+jQuery+aufsetzen%2C+damit+ich+nicht+alles+von+vorn+implementiere.%0D%0A%09Die+Komponente+muss+kostenlos+verf%C3%BCgbar+sein.%0D%0A%09Die+Komponente+soll+erweiterbar+sein.%0D%0A%09Das+Design+der+Komponente+soll+m%C3%B6glichst+schlicht+gehalten+sein.%0D%0A%0D%0AGleich%2C+als+ich+anfing%2C+mir+Gedanken+zu+machen%2C+habe+ich+f%C3%BCr+mich+au%C3%9Ferdem+als+Ziel+festgelegt%2C+dass+ich+die+Einbindung+m%C3%B6glichst+wiederverwendbar+gestalten+m%C3%B6chte.%0D%0ADie+Komponente%0D%0ANach+einigem+Hin+und+Her+fiel+meine+Wahl+letztlich+auf+jwysiwyg+von+akzhan.+Sie+erf%C3%BCllt+alle+meine+vorgenannten+Bedingungen+und+ist+sogar+relativ+gut+%C3%BCber+plugins+und+controls+erweiterbar.%0D%0ADas+Projekt%0D%0AAlso+frisch+ans+Werk+und+eine+Demo-Site+erstellt.+Zuerst+lege+ich+mir+ein+MVC3-Projekt+in+VS+an.+Ich+belasse+alles+bei+den+Voreinstellungen+und+lege+mir+eine+Klasse+im+Ordner+Models+an%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+1%3A+Die+Model-Klasse%22%5D%0D%0A%0D%0Apublic+class+TestModel%0D%0A%7B%0D%0A%0D%0A++%5BKey%5D%0D%0A++public+long+Id+%7B+get%3B+set%3B+%7D%0D%0A%0D%0A++public+string+Title+%7B+get%3B+set%3B+%7D%0D%0A%0D%0A++public+string+Text+%7B+get%3B+set%3B+%7D%0D%0A%0D%0A%7D%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0AMit+dieser+Klasse+m%C3%B6chte+ich+weiter+verfahren.+Ihre+Eigenschaft+%22Text%22+soll+diejenige+sein%2C+die+sp%C3%A4ter+auch+HTML-formatierte+Texte+entgegen+nehmen+kann.+Also+weiter.%0D%0A%0D%0AIch+klicke+rechts+auf+den+Ordner+%22Controller%22+und+f%C3%BCge+einen+neuen+Controller+mit+folgenden+Einstellungen+hinzu%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_933%22+align%3D%22alignnone%22+width%3D%22150%22+caption%3D%22Abb.+1%3A+Controller+hinzuf%C3%BCgen%22%5D%5B%2Fcaption%5D%0D%0A%0D%0AWichtig+ist%2C+dass+man+beim+Daten-Kontext+auf+%22New+Data+context%22+klickt+und+somit+einen+neuen+Kontext+erstellt.+Das+ist+wichtig%2C+weil+ich+hier+code-first+benutze+und+daher+noch+keine+Datenquelle+existiert.%0D%0A%0D%0AHat+man+bei+der+Option+%22Template%22+wie+in+Abb.+1+zu+sehen+das+Scaffolding-Template+angelegt%2C+sollte+nun+u.a.+ein+Ordner+%22TestModels%22+unterhalb+von+%22Views%22+erscheinen.+Theoretisch+funktioniert+die+App+jetzt+bereits.+Einfach+mit+F5+starten+und+als+URL+im+Browser+%22%2FTestModels%22+anh%C3%A4ngen.%0D%0A%0D%0AKlickt+man+im+erscheinenden+Index-View+auf+%22Create+new%22+kann+man+nun+ein+neues+Element+erstellen.+Man+sieht+auch+gleich%2C+dass+MVC+uns+f%C3%BCr+die+%22Text%22-Eigenschaft+eine+ganz+normale+Textbox+raus-rendert.+Genau+das+wollen+wir+nun+%C3%A4ndern.%0D%0AEinbinden+der+JS-+und+CSS-Dateien%0D%0AZun%C3%A4chst+m%C3%BCssen+mal+die+notwendigen+Bedingungen+f%C3%BCr+den+Einsatz+unserer+Komponente+geschaffen+werden.+Nachdem+man+das+ZIP-Archiv+von+Github+geladen+und+entpackt+hat+geht+man+f%C3%BCr+die+Minimal-Anforderung%2C+die+wir+hier+zeigen%2C+wie+folgt+vor+%28am+besten+ist+es+%2C+die+Dateien+per+Drag%26amp%3BDrop+vom+Explorer+aus+direkt+ins+VS+zu+schieben%29%3A%0D%0ACSS-Dateien%0D%0A%0D%0A%09jquery.wysiwyg.css+in+%22%2FContent%2Fthemes%2Fbase%22+einf%C3%BCgen.%0D%0A%09jquery.wysiwyg.gif%26lt%3B%2Fstrong%26gt%3B+in+%22%2FContent%2Fthemes%2Fbase%22+einf%C3%BCgen.%0D%0A%0D%0AJS-Dateien%0D%0A%0D%0A%09jquery.wysiwyg.js+in+%22%2FScripts%22+einf%C3%BCgen%0D%0A%09%5Csrc%5Ccontrols%5Cdefault.js+in+%22%2FScripts%22+einf%C3%BCgen%0D%0A%0D%0AAlle+anderen+Dateien+sollten+in+der+Standard-Projektmappe+bereits+vorhanden+sein.%0D%0A%0D%0ANun+gilt+es+noch%2C+unserer+Seite+klar+zu+machen%2C+dass+es+sowas+wie+wysiwyg+auch+gibt.+Die+einfachste%2C+aber+auch+dreckigste+Variante+dies+zu+tun+ist%2C+die+_Layout.cshtml+in+%22%2FViews%2FShared%22+anzupassen.+Einfach+den+Standard-Head-Bereich+so+%C3%A4ndern%2C+dass+letztlich+folgendes+dabei+heraus+kommt%3A%0D%0A%0D%0A%5Bhtml+title%3D%22Listing+2%3A+Head-Bereich+der+_Layout.cshtml%22+highlight%3D%225%2C6%2C9%2C10%2C11%22%5D%0D%0A%0D%0A++%40ViewBag.Title%0D%0A%26lt%3Bscript+type%3D%26quot%3Btext%2Fjavascript%26quot%3B+src%3D%26quot%3B%40Url.Content%28%26quot%3B%26gt%3B%26lt%3B%2Fscript%26gt%3B%26lt%3Bscript+type%3D%26quot%3Btext%2Fjavascript%26quot%3B+src%3D%26quot%3B%40Url.Content%28%26quot%3B%26gt%3B%26lt%3B%2Fscript%26gt%3B%0D%0A%26lt%3Bscript+type%3D%26quot%3Btext%2Fjavascript%26quot%3B+src%3D%26quot%3B%40Url.Content%28%26quot%3B%26gt%3B%26lt%3B%2Fscript%26gt%3B%26lt%3Bscript+type%3D%26quot%3Btext%2Fjavascript%26quot%3B+src%3D%26quot%3B%40Url.Content%28%26quot%3B%26gt%3B%26lt%3B%2Fscript%26gt%3B%0D%0A%26lt%3Bscript+type%3D%26quot%3Btext%2Fjavascript%26quot%3B+src%3D%26quot%3B%40Url.Content%28%26quot%3B%26gt%3B%26lt%3B%2Fscript%26gt%3B%0D%0A%0D%0A%5B%2Fhtml%5D%0D%0A%0D%0A%C3%9Cbrigens%3A+Wir+werden+in+einem+der+n%C3%A4chsten+Artikel+zeigen%2C+wie+man+es+besser+machen+sollte%21+%26lt%3Bh3%26gt%3BEditor-Template%26lt%3B%2Fh3%26gt%3B+In+der+MVC-Denkweise+ist+so+ziemlich+alles+nach+Modulen+organisiert.+Das+ist+auch+gut+so%2C+denn+so+kann+es+sauber+wieder+verwendet+werden.+Das+bedeutet+in+unserem+speziellen+Einsatzfall%2C+dass+wie+zun%C3%A4chst+ein+sog.+Editor-Template+erstellen+werden.+Ziel+dieser+Datei+ist+es%2C+an+einer+Stelle+zu+kapseln%2C+wie+wir+mit+zu+formatierenden+Texten+anzeigetechnisch+verfahren+werden.+Zun%C3%A4chst+m%C3%BCssen+wir+dem+Konvention-Konzept+von+MVC+folgend+einen+Ordner+unterhalb+von+%22%2FViews%2FShared%22+anlegen+und+ihn+%22EditorTemplates%22+nennen.+Sobald+das+passiert+ist%2C+klickt+man+mit+der+rechten+Maustaste+darauf+und+w%C3%A4hlt+%22Hinzuf%C3%BCgen+-%26gt%3B+View%22.+Der+Assistent+sollte+dann+wie+folgt+eingestellt+werden%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_934%22+align%3D%22alignnone%22+width%3D%22150%22+caption%3D%22Abb.+2%3A+EditorTemplate+erzeugen%22%5D%5B%2Fcaption%5D%0D%0A%0D%0ANormalerweise+zeigt+im+Ordner+EditorTemplates+der+Name+des+Views+den+Typ+an%2C+mit+dem+der+View+direkt+umgehen+kann.+Wenn+man+also+den+View+%22DateTime%22+nennen+w%C3%BCrde%2C+w%C3%BCrde+der+View+automatisch+genommen+werden%2C+sobald+jemand+die+Zeile%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+3%3A+Beispielaufruf+f%C3%BCr+EditorTemplate+DateTime%22%5D%0D%0A%0D%0A%40Html.LabelFor%28model+%3D%26gt%3B+model.SomeDateProperty%29%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0Aschreiben+w%C3%BCrde+und+%22SomeDateProperty%22+ein+DateTime+w%C3%A4re.+Halt+%22Convention+over+Configuration%22%21+Aber+egal%2C+wie+nennen+unseren+View+irgendwie%2C+damit+er+nicht+aus+Versehen+automatisch+verwendet+wird.+Der+Inhalt+der+cshtml+ist+wirklich+extrem+simpel%3A%0D%0A%0D%0A%5Bhtml+title%3D%22Listing+4%3A+FormattedText.cshtml%22%5D%0D%0A%0D%0A%40model+string%0D%0A%26lt%3Btextarea+id%3D%26quot%3B%40ViewData%5B%26quot%3B+name%3D%26quot%3B%40ViewData%5B%26quot%3B%26gt%3B%26lt%3B%2Ftextarea%26gt%3B%0D%0A%0D%0A%5B%2Fhtml%5D%0D%0A%0D%0AWas+wir+hier+tun+ist%2C+dem+EditorTemplate+mitzuteilen%2C+dass+es+immer+mit+strings+zu+tun+haben+wird+und+dass+es+in+jedem+Fall+eine+textarea+anzeigen+soll.+Interessant+ist+%22ViewData%5B%27controlId%27%5D%22.+Dies+wird+beim+sp%C3%A4teren+Aufruf+des+Templates+noch+eine+Rolle+spielen.%0D%0ACreate-View+anpassen%0D%0ADer+n%C3%A4chste+Schritt+besteht+nun+darin%2C+endlich+mal+festzulegen%2C+dass+wir+keine+TextBox+haben+wollen%2C+sondern+etwas+mehr+Action%21+Ich+werde+das+im+Folgenden+exemplarisch+mit+dem+View+Create+innerhalb+des+Ordners+%22Views%2FTestModels%22+zeigen.+Die+Vorgehensweise+kann+dann+adaptiert+werden.+Als+Erstes+werden+wir+verhindern%2C+dass+MVC+einfach+eine+Textbox+%22malt%22.+Dazu+ist+die+Zeile%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+5%3A+Die+Razor-Zeile+vorher%22%5D%0D%0A%0D%0A%40Html.EditorFor%28model+%3D%26gt%3B+model.Text%29%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0Adurch+folgende+zu+ersetzen%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+6%3A+Die+Razor-Zeile+nachher%22%5D%0D%0A%0D%0A%40Html.EditorFor%28model+%3D%26gt%3B+model.Text%2C+%26quot%3BFormattedText%26quot%3B%2C+new+%7B+ControlId+%3D+%26quot%3BText%26quot%3B+%7D%29%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0AEs+ist+eigentlich+ganz+einfach.+Wir+f%C3%BCgen+2+Parameter+an+die+%22EditorFor%22-Methode+an+und+sagen+ihr+somit%2C+dass+sie+bitte+nicht+den+Standard-Editor+%28input%29+nehmen+soll%2C+sondern+unseren+gerade+erstellten.+Au%C3%9Ferdem+%C3%BCbermitteln+wir+unserem+FormattedText.cshtml+noch+die+Eigenschaft+%22ControlId%22+mit+ins+ViewData.+Der+Wert+dieser+Eigenschaft+sollte+immer+auch+dem+Namen+der+Eigenschaft+entsprechen%2C+damit+das+Zur%C3%BCck-Mappen+in+MVC+sp%C3%A4ter+auch+klappt.+F%C3%BChrt+man+das+Projekt+an+dieser+Stelle+aus%2C+stellt+sich+bereits+ein+erster+kleiner+Erfolg+ein.+Statt+der+einzeiligen+Textbox+vorher+erscheint+nun+wirklich+eine+mehrzeilige+textarea+im+Ergebnis.+Also+wird+unser+EditorTemplate+auf+jeden+Fall+schon+mal+ausgef%C3%BChrt.+Wir+sehen+aber+noch+keinen+HTML-Editor%2C+weil+wir+den+entsprechenden+jQuery-Aufruf%2C+den+wysiwyg+braucht%2C+nicht+abgesetzt+haben.+Das+holen+wir+nun+nach.+In+der+Create.cshtml+wird+dazu+im+oberen+Bereich+unterhalb+der+Validierungs-Scripts+von+MVC+folgendes+eingef%C3%BCgt%3A%0D%0A%0D%0A%5Bjavascript+title%3D%22Listing+7%3A+JavaScript-Block+in+Create.cshtml%22%5D%26lt%3Bscript+type%3D%26quot%3Btext%2Fjavascript%26quot%3B%26gt%3B%2F%2F+%26lt%3B%21%5BCDATA%5B%0D%0A%24%28document%29.ready%28function+%28%29+%7B%0D%0A++%24%28%26quot%3B%23Text%26quot%3B%29.wysiwyg%28%7B%0D%0A++++autoSave%3A+true%2C%0D%0A++++autoGrow%3A+true%2C%0D%0A++++initialContent%3A+%27%40Html.Raw%28Model.Text%29%27%2C%0D%0A++++controls%3A+%26quot%3Bbold%2Citalic%2Cunderline%2CstrikeThrough%2C%7C%2Cundo%2Credo%2C%7C%2Cindent%2Coutdent%2C%7C%2CinsertOrderedList%2CinsertUnorderedList%2CinsertHorizontalRule%26quot%3B%0D%0A++%7D%29%3B%0D%0A%7D%29%0D%0A%2F%2F+%5D%5D%26gt%3B%26lt%3B%2Fscript%26gt%3B%0D%0A%0D%0A%5B%2Fjavascript%5D%0D%0A%0D%0AWas+ist+hier+interessant%3F+Zun%C3%A4chst+einmal+ist+wichtig%2C+dass+%24%28%22%23Text%22%29+den+gleichen+Anker+bekommt%2C+wie+unsere+ControlId+aus+Listing+6%2C+nur+halt+mit+der+jQuery-typischen+Raute.+N%C3%A4chstens+sehr+wichtig+ist+der+Einsatz+von+%22%40Html.Raw%28Model.Text%29%22.+Model.Text+ist+einfach+der+Inhalt+der+Text-Eigenschaft+des+%C3%BCbergebenen+Modells.+Html.Raw+stellt+sicher%2C+das+das+Encoding+dabei+erhalten+bleibt%2C+damit+unser+Control+sp%C3%A4ter+nicht+Inhalte%2C+wie+%22Hallo%26lt%3Bbr%26gt%3Bmein+Name+ist+%3B%26amp%3Bgt%3B%22+anzeigt.%0D%0ACreate-Controller+anpassen%0D%0AZu+guter+Letzt+muss+nun+noch+eine+kleine+Anpassung+dem+Aufruf+von+Create+in+unserem+TestModelsController+durchgef%C3%BChrt+werden.+Die+Create-Methode+%28die+ohne+HttpPost-Attribut%21%29+muss+so+aussehen%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+8%3A+Create+in+TestModelsController+anpassen%22%5D%0D%0A%0D%0Apublic+ActionResult+Create%28%29%0D%0A%7B%0D%0A++return+View%28new+TestModel%28%29%29%3B%0D%0A%7D%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0AWir+%C3%BCbergeben+der+Create-View+nun+nicht+mehr+%22null%22+als+Model+sonder+eine+neue+Instanz+unseres+Modells.%0D%0AErster+Test%0D%0ADr%C3%BCckt+man+jetzt+F5+und+ruft+die+%22Create%22-Funktion+dann+auf%2C+sollte+wunderbarerweise+das+wysiwyg-Control+erscheinen.%0D%0A%0D%0AEine+b%C3%B6se+%C3%9Cberraschung+kommt+jedoch+auf+den+zu%2C+der+versucht%2C+nun+durch+klicken+auf+%22Create%22+wirllich+Werte+zu+sichern.+Der+Brwoser+erzeugt+die+Fehlermeldung+%22Ein+m%C3%B6glicherweise+gef%C3%A4hrlicher+Request.Form-Wert+...%22+und+verabschiedet+sich+in+einer+Web-Exception%3F%0D%0A%0D%0AWas+ist+passiert%3F+Nichts+eigentlich%2C+denn+MVC+macht+nur+das%2C+was+es+soll.+Unser+neues+Control+versucht+nun+HTML-Tags+zum+Controller+zu+senden+und+der+sagt+sich%3A+%22Na+was+hindert+den+user+denn%2C+dort+ein+kleines+b%C3%B6ses+%26lt%3Bscript%26gt%3B+reinzuschreiben%3F%22.+Und+Recht+hat+der+Controller.%0D%0A%0D%0AUm+jetzt+aber+weiter+zu+kommen%2C+m%C3%BCssen+wir+dem+Controller+seine+Paranoia+kurz+mal+abgew%C3%B6hnen.+Dazu+bekommt+die+Create-Methode+mit+dem+HttpPost-Attribut+ein+weiteres+spendiert%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+9%3A+Controller+die+Validierung+verbieten%22+highlight%3D%222%22%5D%0D%0A%0D%0A%5BHttpPost%5D%0D%0A%5BAllowHtml%5D%0D%0Apublic+ActionResult+Create%28TestModel+testmodel%29%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0AF%C3%BChrt+man+den+Code+nun+aus%2C+sollte+alles+soweit+funktionieren%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_941%22+align%3D%22alignnone%22+width%3D%22150%22+caption%3D%22Abb.+3%3A+Funktioniert%22%5D%5B%2Fcaption%5D%0D%0A%0D%0ADamit+nun+z.B.+im+Index-View+nicht+die+h%C3%A4sslichen+HTML-Tags+erscheinen+kann+man+auch+hier+Html.Raw+einsetzen%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+10%3A+Html.Raw+einsetzen%22%5D%0D%0A%0D%0A%40Html.DisplayFor%28modelItem+%3D%26gt%3B+Html.Raw%28item.Text%29%29%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0AWichtig%21%0D%0ADa+wir+nun+%C3%BCber+das+AllowHtml+%28Listing+9%29+verhindert+haben%2C+dass+MVC+automatisch+nach+b%C3%B6sartigem+Code+Ausschau+h%C3%A4lt%2C+muss+dies+unbedingt+noch+im+Controller+abgefangen+werden.+Eine+einfache+Methode+w%C3%A4re%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+11%3A+Korrigierte+Version+der+Create-Postback-Methode%22%5D%0D%0A%0D%0A%5BHttpPost%5D%0D%0A%5BAllowHtml%5D%0D%0Apublic+ActionResult+Create%28TestModel+testmodel%29%0D%0A%7B%0D%0A++if+%28ModelState.IsValid%29%0D%0A++%7B%0D%0A++++testmodel.Text+%3D+testmodel.Text.Replace%28%26quot%3B%26lt%3Bscript%26quot%3B%2C+%26quot%3B%5Bscript%26quot%3B%29.Replace%28%26quot%3B%26lt%3B%2Fscript%26quot%3B%2C+%26quot%3B%5B%2Fscript%26quot%3B%29%3B%0D%0A++++db.TestModel.Add%28testmodel%29%3B%0D%0A++++db.SaveChanges%28%29%3B%0D%0A++++return+RedirectToAction%28%26quot%3BIndex%26quot%3B%29%3B%0D%0A++%7D%0D%0A++return+View%28testmodel%29%3B%0D%0A%7D%0D%0A%5B%2Fcsharp%5D&amp;tags=ASP.NET%2CCSS%2CMVC%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Individuelle DataAnnotations bei Entity Framework</title>
		<link>http://www.codingfreaks.de/2012/01/18/individuelle-dataannotations-bei-entity-framework/</link>
		<comments>http://www.codingfreaks.de/2012/01/18/individuelle-dataannotations-bei-entity-framework/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 19:32:55 +0000</pubDate>
		<dc:creator>sprinter</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://www.codingfreaks.de/?p=921</guid>
		<description><![CDATA[TweetEntity Framework (EF) ist an sich eine super Sache. Kein Linke-Hand-rechte-Hand-Code mehr. Die Daten fließen und man kümmert sich um die Details. Allerdings hat das mit dem automatisch generierten Code den Haken, dass man ihn nun nicht mehr ohne weiteres erweitern kann. codingfreaks zeigt, wie man DataAnnotations u.a. Attribute anwenden kann, ohne dass EF in [...]]]></description>
		<wfw:commentRss>http://www.codingfreaks.de/2012/01/18/individuelle-dataannotations-bei-entity-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=codingfreaks&amp;url=http%3A%2F%2Fwww.codingfreaks.de%2F2012%2F01%2F18%2Findividuelle-dataannotations-bei-entity-framework%2F&amp;language=de_DE&amp;category=text&amp;title=Individuelle+DataAnnotations+bei+Entity+Framework&amp;description=Entity+Framework+%28EF%29+ist+an+sich+eine+super+Sache.+Kein+Linke-Hand-rechte-Hand-Code+mehr.+Die+Daten+flie%C3%9Fen+und+man+k%C3%BCmmert+sich+um+die+Details.+Allerdings+hat+das+mit+dem+automatisch+generierten+Code+den+Haken%2C+dass+man+ihn+nun+nicht+mehr+ohne+weiteres+erweitern+kann.+codingfreaks+zeigt%2C+wie+man+DataAnnotations+u.a.+Attribute+anwenden+kann%2C+ohne+dass+EF+in+seiner+Arbeit+gehindert+wird.%0D%0A%0D%0A%0D%0A%0D%0ABevor+es+hier+so+richtig+los+geht%2C+ein+kleiner+Hinweis.+Ich+gehe+davon+aus%2C+dass+der+Leser+bereits+fit+im+Umgang+mit+dem+EF+selbst+ist.+Hier+geht+es+darum%2C+die+Grenzen+von+Standard-EF+zu+erweitern.%0D%0A%0D%0A%5Bjwplayer+file%3D%22http%3A%2F%2Fyoutu.be%2FGxigGayzXEo%22%5D%0D%0ADas+Problem%0D%0ADie+Vorgehensweise+ist+immer+die+Gleiche.+Man+erstellt+sich+eine+Datenbank+%28sollte+man+eigentlich+immer+zuerst+machen%2C+trotz+code-first%29%2C+benutzt+den+EF-Designer+im+VS+und+bindet+dann+das+entstehende+Modell.+Ein+erstes+UI+ist+schnell+gestrickt+und+alles+funktioniert.+Benutzt+man+hierzu+z.B.+ASP.NET+MVC%2C+braucht+man+fast+schon+gar+nicht+mehr+zu+tippen%2C+um+die+%C3%BCblichen+CRUD-Operationen+zu+implementieren.+Einige+Entwickler+glauben+nun%2C+den+heiligen+Gral+gefunden+zu+haben.%0D%0A%0D%0AProfis+wissen%2C+dass+das+erst+der+Anfang+ist.+Woher+soll+nun+das+liebe+MVC+eigentlich+wissen%2C+wie+er+ein+Label+beschriften+soll%2C+das+f%C3%BCr+die+Eigenschaft+%22Firstname%22+zust%C3%A4ndig+ist%3F+Die+Textbox+wird+artig+implementiert+und+das+Label+zeigt+st%C3%B6rrisch+%22Firstname%22+an.+Auch+andere+Probleme%2C+wie+die+Validierung+von+Dateneingaben+sind+mit+den+Bordmitteln+nur+rudiment%C3%A4r+umgesetzt.%0D%0A%0D%0AMan+braucht+also+eine+M%C3%B6glichkeit%2C+die+durch+das+EF+generierten+Klassen+zu+erweitern.%0D%0A%0D%0AEin+Beispiel.+Wir+benutzen+die+gute+alte+AdventureWorks-Datenbank+von+MS+und+binden+sie+per+EF+in+eines+unserer+Projekte+ein.+Ziel+ist+es+nun%2C+alle+Departments+zu+verwalten+oder+vielleicht+auch+erstmal%2C+sie+anzuzeigen.+W%C3%A4hlt+man+nur+diese+Tabelle+im+EF-Assistenten+aus%2C+sieht+das+Ergebnis+im+Designer+wie+folgt+aus%3A%0D%0A%0D%0A%0D%0A%0D%0ASo+weit%2C+so+gut.+Sieht+man+sich+nun+die+zugeh%C3%B6rige+%2ADesigner.cs-Datei+an%2C+die+EF+als+Code-Behind+zur+edmx+erstellt+hat%2C+sieht+man+die+Name-Eigenschaft+inkl.+der+erweiterten+notwendigen+Elemente+so%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+1%3A+Die+durch+EF+generierte+Name-Eigenschaft%22%5D%0D%0A%0D%0A%2F%2F%2F+%26lt%3Bsummary%26gt%3B%0D%0A%2F%2F%2F+Keine+Dokumentation+f%C3%BCr+Metadaten+verf%C3%BCgbar.%0D%0A%2F%2F%2F+%26lt%3B%2Fsummary%26gt%3B%0D%0A%5BEdmScalarPropertyAttribute%28EntityKeyProperty%3Dfalse%2C+IsNullable%3Dfalse%29%5D%0D%0A%5BDataMemberAttribute%28%29%5D%0D%0Apublic+global%3A%3ASystem.String+Name%0D%0A%7B%0D%0Aget%0D%0A%7B%0D%0Areturn+_Name%3B%0D%0A%7D%0D%0Aset%0D%0A%7B%0D%0AOnNameChanging%28value%29%3B%0D%0AReportPropertyChanging%28%26quot%3BName%26quot%3B%29%3B%0D%0A_Name+%3D+StructuralObject.SetValidValue%28value%2C+false%29%3B%0D%0AReportPropertyChanged%28%26quot%3BName%26quot%3B%29%3B%0D%0AOnNameChanged%28%29%3B%0D%0A%7D%0D%0A%7D%0D%0Aprivate+global%3A%3ASystem.String+_Name%3B%0D%0Apartial+void+OnNameChanging%28global%3A%3ASystem.String+value%29%3B%0D%0Apartial+void+OnNameChanged%28%29%3B%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0AEF+macht+eine+ganze+Menge.+Es+zeigt+evtl.+WCF-Services+an%2C+dass+die+Eigenschaft+zum+Datenvertrag+geh%C3%B6rt+%28DataMemberAttribute%29%2C+INotifyPropertyChanged+wird+eingebunden+und+alle+daf%C3%BCr+notwendigen+Event-Handler+implementiert.+Super%21%0D%0A%0D%0AJetzt+m%C3%B6chten+wir+aber+daf%C3%BCr+sorgen%2C+dass+ein+sp%C3%A4reres+User-Interface+automatisch+Masken+erzeugt+und+dabei+jeweils+sinnvolle+Bezeichnungen+f%C3%BCr+Eingabe-+und+Anzeige-Felder+verwendet.+Und+das+bitte+mehrsprachig%21%0D%0A%0D%0ADas+UI%0D%0A%0D%0AIch+verzichte+in+diesem+Beispiel+mal+auf+eine+strikte+Schichten-Trennung+und+f%C3%BCge+einfach+ein+MVC-Projekt+hinzu+und+setze+dann+den+Link+direkt+auf+das+EF-Projekt%3A%0D%0A%0D%0A%0D%0A%0D%0ADurch+einen+Rechtsklick+auf+den+Controllers-Ordner+im+MVC-Projekt+und+Auswahl+von+%22Hinzuf%C3%BCgen%22+-%26gt%3B+%22Controller...%22+kommt+ein+Dialog+auf%2C+in+dem+ich+folgende+Auswahl+treffe%3A%0D%0A%0D%0A%0D%0A%0D%0ANachdem+man+einen+Namen+vergibt%2C+muss+zwingend+die+Option+%22Controller+with+read%2Fwrite...%22+ausgew%C3%A4hlt+sein.+Dahinter+steckt+letztlich+wieder+ein+T4-Mechanismus%2C+der+sp%C3%A4ter+alle+ben%C3%B6tigten+Controller-+und+View-Programmierungen+erledigt.+Wichtig+ist+au%C3%9Ferdem%2C+dass+als+Model+die+Department-Klasse+aus+dem+Entities-Projekt+gew%C3%A4hlt+wird+und+der+Context+ebenfalls+der+aus+diesem+Projekt+ist.+Achtung%3A+Damit+dieser+Schritt+funktioniert%2C+m%C3%BCssen+alle+Einstellungen+der+Web.config+richtig+gesetzt+sein%2C+d.h.%2C+die+connectionStrings+der+Web.config+m%C3%BCssen+bereits+richtig+eingerichtet+sein.+Au%C3%9Ferdem+muss+ein+erfolgreicher+Build+der+Web-Anwendung+erfolgt+sein.+Sonst+hagelt+es+Fehler.%0D%0A%0D%0AWenn+alles+geklappt+hat%2C+sollte+der+Projektbaum+jetzt+so+aussehen%3A%0D%0A%0D%0A%0D%0A%0D%0ADas+Projekt+kann+man+nun+ausf%C3%BChren+und+die+Bedienung+klappt+tats%C3%A4chlich.+NOT-NULL-Werte+der+Datenbank+werden+%C3%BCbrigens+bereits+unterst%C3%BCtzt.+Nach+dem+Start+der+Anwendung+sieht+man+zun%C3%A4chst+einen+Browser+mit+einer+URL+%C3%A1+la+%22http%3A%2F%2Flocalhost%3A2331%2F%22.+Um+nun+in+die+Liste+der+Departments+zu+gelangen%2C+gibt+man+hinter+dem+Slash+einfach+per+Hand+ein+%22Departments%22+ein%2C+also%3A%0D%0A%0D%0A%0D%0A%0D%0Aund+dr%C3%BCckt+Enter.+Wer+nun+einen+Serverfehler+erh%C3%A4lt%2C+der+hat+wahrscheinlich+das+alte+Entity-Referenz-Problem.+Es+hat+mit+dem+Einbinden+der+Entity-Framework-DLL+System.Data.Entity+in+die+Web.config+des+MVC-Projektes+zu+tun.+Also+die+web.config+%C3%B6ffnen+und+unterhalb+des+Tags+%26lt%3Bcompilation%26gt%3B+die+Liste+der+%26lt%3Badd+assembly...%26gt%3B+um+folgendes+Element+erweitern%3A%0D%0A%0D%0A%5Bxml+title%3D%22Listing+2%3A+Problem+mit+System.Data.Entity+beheben%22%5D%0D%0A%0D%0A%26lt%3Bcode%26gt%3B%26lt%3Badd+assembly%3D%26lt%3B%2Fcode%26gt%3B%26lt%3Bcode%26gt%3B%26quot%3BSystem.Data.Entity%2C+Version%3D4.0.0.0%2C+Culture%3Dneutral%2C+PublicKeyToken%3Db77a5c561934e089%26quot%3B%26lt%3B%2Fcode%26gt%3B+%26lt%3Bcode%26gt%3B%2F%26gt%3B%26lt%3B%2Fcode%26gt%3B%0D%0A%0D%0A%5B%2Fxml%5D%0D%0A%0D%0AEine+weitere+relativ+unn%C3%B6tige+H%C3%BCrde+der+MS-Jungs.+Wenn+mans+aber+erstmal+wei%C3%9F%2C+nervt+es+nur+noch+und+f%C3%BChrt+nicht+gleich+zu+Frustration+%3A-%29.+Hier+noch+einmal+der+Standard-%26lt%3Bcompilation%26gt%3B-Bereich+komplett+%28befindet+sich+innerhalb+der+%26lt%3Bsystem.web%26gt%3B-Tags%21%29%3A%0D%0A%0D%0A%5Bxml+title%3D%22Listing+3%3A+Einbindung+compilation-Tag%22%5D%0D%0A%0D%0A%26lt%3Bcompilation%26gt%3B%0D%0A%26lt%3Bassemblies%26gt%3B%0D%0A%26lt%3Badd+assembly%3D%26quot%3BSystem.Data.Entity%2C+Version%3D4.0.0.0%2C+Culture%3Dneutral%2C+PublicKeyToken%3Db77a5c561934e089%26quot%3B+%2F%26gt%3B%0D%0A%26lt%3B%2Fassemblies%26gt%3B%0D%0A%26lt%3B%2Fcompilation%26gt%3B%0D%0A%0D%0A%5B%2Fxml%5D%0D%0A%0D%0AJetzt+sollte+man+bei+Eingabe+von+%22Departments%22+in+der+URL+die+Liste+der+Departments+sehen.+Ein+Klick+auf+%22Details%22+sollte+nun+etwa+Folgendes+ergeben%3A%0D%0A%0D%0A%0D%0A%0D%0AIch+habe+gleich+mal+gr%C3%BCn+markiert%2C+was+uns+nun+st%C3%B6rt.+Wir+m%C3%B6chten+also%2C+dass+die+Labels+automatisch+die+richtigen+Werte+anzeigen.+Sieht+man+sich+einmal+den+Inhalt+der+Datei+Details.cshtml+im+MVC-Projekt+im+Ordner+Departments+an%2C+so+merkt+man%2C+dass+eigentlich+alles+f%C3%BCr+diese+Automatik+vorhanden+ist.+Hier+einmal+das+Razor%2C+das+letztlich+verantwortlich+f%C3%BCr+den+HTML-Aufbau+ist.+Ich+habe+bereits+einige+%C3%84nderungen+vorgenommen%2C+sodass+die+Labels+nicht+fix+codiert+sind%2C+sondern+sich+aus+den+Attributen+der+Eigenschaften+ergeben%3A%0D%0A%0D%0A%5Bhtml+title%3D%22Listing+5%3A+Angepasstes+Razor+des+Details-View%22%5D%0D%0A%0D%0A%26lt%3Bfieldset%26gt%3B%0D%0A%26lt%3Blegend%26gt%3BDepartment%26lt%3B%2Flegend%26gt%3B%0D%0A%26lt%3Bdiv%26gt%3B%40Html.LabelFor%28model+%3D%26gt%3B+model.Name%29%26lt%3B%2Fdiv%26gt%3B%0D%0A%26lt%3Bdiv%26gt%3B%40Html.DisplayFor%28model+%3D%26gt%3B+model.Name%29%26lt%3B%2Fdiv%26gt%3B%0D%0A%26lt%3Bdiv%26gt%3B%40Html.LabelFor%28model+%3D%26gt%3B+model.GroupName%29%26lt%3B%2Fdiv%26gt%3B%0D%0A%26lt%3Bdiv%26gt%3B%40Html.DisplayFor%28model+%3D%26gt%3B+model.GroupName%29%26lt%3B%2Fdiv%26gt%3B%0D%0A%26lt%3Bdiv%26gt%3B%40Html.LabelFor%28model+%3D%26gt%3B+model.ModifiedDate%29%26lt%3B%2Fdiv%26gt%3B%0D%0A%26lt%3Bdiv%26gt%3B%40Html.DisplayFor%28model+%3D%26gt%3B+model.ModifiedDate%29%26lt%3B%2Fdiv%26gt%3B%0D%0A%26lt%3B%2Ffieldset%26gt%3B%0D%0A%0D%0A%5B%2Fhtml%5D%0D%0A%0D%0A%40Html.LabelFor%28%29+pr%C3%BCft+intern%2C+ob+eine+Eigenschaft+das+DisplayAttribute+aus+den+DataAnnotations+besitzt+und+wertet+es+aus.+Im+Moment+bringt+das+aber+nichts%2C+weil+wir+keine+M%C3%B6glichkeit+haben%2C+das+DisplayAttribut+%C3%BCber+die+Eigenschaft+zu+setzen%2C+die+EF+f%C3%BCr+uns+generiert+hat.%0D%0AWas+k%C3%B6nnen+wir+tun%3F%0D%0AZun%C3%A4chst+einmal%2C+ist+zu+kl%C3%A4ren%2C+was+wir+nicht+tun+k%C3%B6nnen%21+Wir+k%C3%B6nnen+hier+keinen+Nutzen+aus+der+Tatsache+ziehen%2C+dass+EF+immer+partielle+Klassen+generiert.+Wir+k%C3%B6nnen+%C3%BCber+diesen+Mechanismus+jetzt+zwar+weiteren+Code+zu+einer+EF-generierten+Klasse+hinzuf%C3%BCgen.+Wir+k%C3%B6nnen+aber+nicht+einfach+irgendwelche+generierten+Elemente+%22anreichern%22.%0D%0A%0D%0AWir+haben+nun+mehrere+M%C3%B6glichkeiten.+Variante+1+ist%2C+dass+wir+das+T4+des+EntityFrameworks+komplett+so+anpassen%2C+dass+es+uns+aufgrund+eigener+Logik+immer+die+richtigen+Attribute+mit+den+richtigen+Werten+%C3%BCber+die+Klassen+und+Eigenschaften+schreibt.+Das+ist+ziemlich+komplex+und+fehleranf%C3%A4llig.%0D%0A%0D%0AVariante+2+ist+da+schon+bedeutend+%C3%BCbersichtlicher.+Sie+basiert+auf+einem+Attribut%2C+das+ebenfalls+in+den+DataAnnotations+vorgesehen+ist%3A+MetadataTypeAttribute.%0D%0AMetadataTypeAttribute%0D%0ADieses+Attribut+ist+genau+f%C3%BCr+den+Einsatzzweck+gedacht%2C+der+uns+hier+vorschwebt.+Man+%C3%BCbergibt+ihm+einfach+den+Typ+einer+Klasse%2C+in+der+unter+Ber%C3%BCcksichtigung+gewisser+Konventionen+angegeben+wird%2C+wie+die+EF-generierten+Eigenschaften+mit+Metadataten+zu+versehen+sind.%0D%0A%0D%0AUnsere+Department-Klasse+m%C3%BCsste+dem+Muster+entsprechend+so+dekoriert+werden%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+6%3A+Einsatz+von+MetadataType%22%5D%0D%0A%0D%0A%5BMetadataType%28typeof%28DepartmentMetadata%29%29%5D%0D%0Apublic+partial+class+Department+%3A+EntityObject%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0AWas+aber+soll+DeparmentMetadata+sein%3F+Ganz+einfach%3A+Eine+Klasse%2C+die+wir+schreiben+m%C3%BCssen.+Sie+k%C3%B6nnte+z.B.+wie+folgt+aussehen%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+7%3A+MetadataType-Zieltyp+als+Klasse+definieren%22%5D%0D%0A%0D%0Apublic+class+DepartmentMetadata%0D%0A%7B%0D%0A%0D%0A%5BDisplay%28Name+%3D+%26quot%3BBezeichnung%26quot%3B%29%5D%0D%0Apublic+string+Label%3B%0D%0A%0D%0A%7D%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0AWir+erstellen+also+eine+ganz+einfache+Klasse+mit+%C3%B6ffentlichen+Member-Variablen.+Der+Member-Variablen+verpassen+wir+nun+das+oder+die+Attribute%2C+die+wir+eigentlich+der+EF-generierten+Klasse+geben+wollten.+MetadataType+verlinkt+nun+beide+Klassen+so%2C+dass+zum+Schluss+das+gew%C3%BCnschte+Ergebnis+erzeugt+wird.%0D%0AEF+muss+angepasst+werden%0D%0ADie+Erkenntnis+ist+schon+mal+ein+wichtiger+Schritt.+Wir+m%C3%BCssen+aber+immer+noch+daf%C3%BCr+sorgen%2C+dass+uns+der+EF-Assistent+bei+jedem+neuen+Generierungs-Lauf+die+MetadataType-Attribute+%C3%BCber+die+Klassen+schreibt.+Das+bedeutet%2C+wir+m%C3%BCssen+ein+wenig+T4+anpassen.%0D%0A%0D%0AUm+dies+bequem+tun+zu+k%C3%B6nnen%2C+%C3%BCberreden+wir+als+erstes+den+EF-Designer+dazu%2C+die+T4-Datei+nicht+mehr+im+Projekt+zu+verstecken%2C+sondern+sie+uns+zur+Verf%C3%BCgung+zu+stellen.+Das+geht+so%3A%0D%0A%0D%0A%09Doppelklick+auf+die+edmx-Datei+im+Entities-Projekt.%0D%0A%09Rechtsklick+auf+einen+freien+Bereich+im+EF-Designer.%0D%0A%09Klick+auf+%22Neues+Codegenerierungselement+hinzuf%C3%BCgen...%22.%0D%0A%09Auswahl+von+%22ADO.NET+EntityObject+Generator%22.%0D%0A%09Als+Dateiname+den+gleichen+verwenden%2C+der+bereits+beim+ersten+Assistentenlauf+des+EF+verwendet+wurde.%0D%0A%09Klick+auf+OK.+%28Sollte+VS+fragen%2C+ob+es+%C3%BCberschreiben+soll%2C+dann+mit+Ja+antworten%29.%0D%0A%09%28%2A.tt-Datei+wird+nun+angezeigt%29.%0D%0A%09Anklicken+der+edmx-Datei+im+Projektmappen-Explorer.%0D%0A%09In+den+Eigenschaften+%28F4%29+unter+%22Benutzerdefiniertes+Tool%22+den+Eintrag+l%C3%B6schen.%0D%0A%0D%0ADas+Ergebnis+sollte+im+Projektmappen-Explorer+wie+folgt+aussehen%3A%0D%0A%0D%0A%0D%0A%0D%0AUnser+Standard-EDMX+generiert+also+keine+Klassen+mehr%2C+sondern+%C3%BCberl%C3%A4sst+dies+dem+neuen+T4-Skript.+Wenn+man+alles+richtig+gemacht+hat%2C+sollte+das+Projekt+immer+noch+komplett+builden+und+alles+l%C3%A4uft%2C+wie+bisher+auch.%0D%0A%0D%0ANun+geht+es+ans+Eingemachte%21+Wir+f%C3%BCgen+dem+Entities-Projekt+einen+Verweis+auf+die+System.ComponentModel.DataAnnotations.dll+hinzu.%0D%0A%0D%0AEin+Doppelklick+auf+die+tt-Datei+erm%C3%B6glicht+uns+das+%C3%84ndern+des+Skripts.+Als+erstes+m%C3%BCssen+wir+den+Teil+finden%2C+in+dem+die+Namespaces+in+die+cs-Datei+geschrieben+werden.+Er+endet+bei+der+Standard-T4-Vorlage+in+Zeile+67.+Hier+f%C3%BCgen+wir+nun+ein+weiteres+using+ein%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+8%3A+using-Zeile+in+T4+erg%C3%A4nzen%22%5D%0D%0A%0D%0Ausing+System.ComponentModel.DataAnnotations%3B%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0AWeiter+geht+es+auf+Zeile+319+des+T4.+In+der+N%C3%A4he+m%C3%BCsste+folgender+Block+stehen%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+9%3A+Originalzeile+in+T4-Skript%22%5D%0D%0A%0D%0A%26lt%3B%23%3DAccessibility.ForType%28entity%29%23%26gt%3B+%26lt%3B%23%3Dcode.SpaceAfter%28code.AbstractOption%28entity%29%29%23%26gt%3Bpartial+class+%26lt%3B%23%3Dcode.Escape%28entity%29%23%26gt%3B+%3A+%26lt%3B%23%3DBaseTypeName%28entity%2C+code%29%23%26gt%3B%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0AWir+m%C3%BCssen+nun+eine+Zeile+dar%C3%BCber+einf%C3%BCgen%2C+sodass+Folgendes+stehen+bleibt%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+10%3A+T4-Zeile+um+ein+Attribut+erg%C3%A4nzt%22%5D%0D%0A%0D%0A%5BMetadataType%28typeof%28%26lt%3B%23%3Dcode.Escape%28entity%29%23%26gt%3BMetadata%29%29%5D%0D%0A%26lt%3B%23%3DAccessibility.ForType%28entity%29%23%26gt%3B+%26lt%3B%23%3Dcode.SpaceAfter%28code.AbstractOption%28entity%29%29%23%26gt%3Bpartial+class+%26lt%3B%23%3Dcode.Escape%28entity%29%23%26gt%3B+%3A+%26lt%3B%23%3DBaseTypeName%28entity%2C+code%29%23%26gt%3B%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0AWenn+wir+nun+die+T4+speichern+und+das+Entities-Projekt+erstellen%2C+bekommen+wir+den+Compiler-Fehler%2C+dass+der+Typ+%22DepartmentMetadata+nicht+gefunden+wurde.+Das+ist+gut%2C+denn+es+zeigt+uns%2C+dass+die+%C3%84nderung+am+T4+auf+die+Ergebnis-Klasse+Department+durchgeschlagen+hat.+Sie+hat+nun+dieses+Attribut%2C+nur+dass+wir+ihm+die+Metadaten-Klasse+halt+nicht+gegeben+haben.+Das+kommt+jetzt+zum+Schluss.%0D%0AMetadaten-Klasse+hinzuf%C3%BCgen%0D%0ADem+Entites-Projekt+wird+eine+neue+Klasse+mit+dem+Namen+DepartmentMetadata+hinzugef%C3%BCgt.+Diese+wird+wie+folgt+angepasst%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+11%3A+Metadaten-Klasse+f%C3%BCr+das+Department%22%5D%0D%0A%0D%0Apublic+class+DepartmentMetadata%0D%0A%7B%0D%0A%0D%0A%5BDisplay%28Name+%3D+%26quot%3BBezeichnung%26quot%3B%29%5D%0D%0Apublic+string+Name%3B%0D%0A%0D%0A%7D%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0ADas+Ergebnis+beim+n%C3%A4chsten+Testlauf+im+Browser+sieht+im+Details-Bereich+wie+folgt+aus%3A%0D%0A%0D%0A%0D%0A%0D%0AGenau+das+wollten+wir+erreichen%21+Ohne+dass+man+an+allzuviele+%C3%84nderungen+am+Original-T4+machen+muss%2C+hat+man+nun+immer+einen+Link+zu+einer+Klasse%2C+die+die+Anreicherung+mit+den+erforderlichen+Attributen+vornimmt.%0D%0A%0D%0ADer+Pferdefuss+an+der+Sache+ist+nat%C3%BCrlich%2C+dass+man+nun+jeder+durch+EF+generierten+Klasse+eine+entsprechende+Gegenklasse+geben+muss%2C+damit+das+Projekt+kompiliert.+Das+ist+jedoch+zum+einen+zu+verschmerzen%2C+da+man+in+solchen+Projekten+tats%C3%A4chlich+immer+oder+nie+eine+Attributierung+braucht.+Zum+anderen+k%C3%B6nnte+man+durch+etwas+flei%C3%9Figeres+Anpassen+des+T4+immer+eine+solche+Klasse+generieren+lassen.%0D%0A%0D%0ADas+T4+kann+man+sich+nach+erfolgter+%C3%84nderung+irgendwo+abspeichern+und+es+immer+wieder+verwenden.+Ganz+Flei%C3%9Fige+Zeitgenossen+werden+es+wom%C3%B6glich+sogar+als+Extension+f%C3%BCr+den+Neu-Dialog+im+VS+entwerfen.%0D%0A%0D%0AIm+Webcast+zu+diesem+Artikel+wird+die+gesamte+Prozedur+einmal+komplett+durchgespielt.%0D%0A%0D%0AHier+noch+das+Projekt+im+VS2010-Format+zum+Download+%28bitte+daran+denken%2C+die+web.config+anzupassen%21%29%3A+Download+EfAnnotationsSample.zip.&amp;tags=ASP.NET%2CC%23%2CEntity+Framework%2CMVC%2CTools%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Vom Erfolg der Faulheit</title>
		<link>http://www.codingfreaks.de/2012/01/08/vom-erfolg-der-faulheit/</link>
		<comments>http://www.codingfreaks.de/2012/01/08/vom-erfolg-der-faulheit/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 10:50:05 +0000</pubDate>
		<dc:creator>sprinter</dc:creator>
				<category><![CDATA[CSV rules]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://www.codingfreaks.de/?p=915</guid>
		<description><![CDATA[TweetDer Titel dieses Kapitels mag zunächst den Einen oder Anderen in eine ungewollte Richtung schweifen lassen. Schreiben möchte ich darüber, wie die Faulheit weniger zunächst zu Coolnis und dann zum Leiden anderer werden kann, wie die aktuelle Entwicklung zeigt. Es ist noch nicht ganz ein Jahr her, da habe ich einem meiner Kunden die Vorzüge [...]]]></description>
		<wfw:commentRss>http://www.codingfreaks.de/2012/01/08/vom-erfolg-der-faulheit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=codingfreaks&amp;url=http%3A%2F%2Fwww.codingfreaks.de%2F2012%2F01%2F08%2Fvom-erfolg-der-faulheit%2F&amp;language=de_DE&amp;category=text&amp;title=Vom+Erfolg+der+Faulheit&amp;description=Der+Titel+dieses+Kapitels+mag+zun%C3%A4chst+den+Einen+oder+Anderen+in+eine+ungewollte+Richtung+schweifen+lassen.+Schreiben+m%C3%B6chte+ich+dar%C3%BCber%2C+wie+die+Faulheit+weniger+zun%C3%A4chst+zu+Coolnis+und+dann+zum+Leiden+anderer+werden+kann%2C+wie+die+aktuelle+Entwicklung+zeigt.%0D%0A%0D%0A%0D%0A%0D%0AEs+ist+noch+nicht+ganz+ein+Jahr+her%2C+da+habe+ich+einem+meiner+Kunden+die+Vorz%C3%BCge+und+die+Eleganz+von+Microsoft+Silverlight+n%C3%A4her+zu+bringen+versucht.+Nicht%2C+dass+das+nicht+schon+schwer+genug+gewesen+w%C3%A4re%21+Wie+grenzt+man+das+neue+Unget%C3%BCm+denn+nun+von+Flash+ab%3F+Was+bringt+es+dem+Kunden+genau%3F+Wie+sieht+es+denn+mit+der+Zukunftssicherheit+aus%3F+Gerade+die+letzte+Frage+konnte+man+als+Microsoft-J%C3%BCnger+eigentlich+mit+einem+s%C3%BCffisanten+L%C3%A4cheln+beantworten%3A+%E2%80%9EKein+Problem%21+Microsoft+wird+doch+nicht+alle+seine+Kunden+und+vor+allem+Entwickler+abschrecken%21+Das+haben+die+fr%C3%BCher+mal+gemacht%2C+aber+die+sind+inzwischen+schlauer+geworden%21%E2%80%9C.%0D%0A%0D%0AOK.+Der+Kunde+war+irgendwann+sturmreif+argumentiert+und+lie%C3%9F+sich+auf+das+Spielchen+ein.+Alles+schien+perfekt+zu+werden.+Auch+die+Ergebnisse+haben+ihm+ein+seliges+L%C3%A4cheln+und+die+Anerkennung+durch+seine+Vorgesetzten+eingebracht%2C+wobei+Letzteres+deutlich+h%C3%B6her+zu+priorisieren+ist.%0D%0A%0D%0AZeitsprung%0D%0A%0D%0AEs+passiert+etwas+merkw%C3%BCrdiges+in+der+Welt+der+Betriebssysteme.+Selbst+der+letzte+Voll-Noob+wei%C3%9F+jetzt%2C+dass+es+neben+Microsoft+noch+einen+anderen+Anbieter+von+Betriebssystemen+gibt%3A+Apple.+Nachdem+Lt.+Dan+sein+Geld+aus+der+Schrimpps-Kutter-Industrie+in+diesen+%E2%80%9EObst%E2%80%9C-Lieferanten+gesteckt+hatte%2C+%C3%BCbernahm+dort+ein+neuer+charismatischer+Schicksalslenker+erneut+das+Ruder+und+sah+die+Zeit+gekommen%2C+da+man+Leuten%2C+die+bisher+strikt+dagegen+waren%2C+ein+10+Jahre+altes+Nokia+auf+einem+Firmengel%C3%A4nde+zuzulassen+die+Mund+mit+Wischgesten+und+Apps+w%C3%A4ssrig+machen+konnte.%0D%0A%0D%0ADamit+das+Ganze+aber+so+richtig+flutscht%2C+musste+erstmal+die+technische+Basis+des+eigenen+Betriebssystems+aufgem%C3%B6belt+werden+und+man+brachte+ein+niegelnagelneues+MacOS+heraus.+Super+sache+soweit%2C+denn+Intel+war+pl%C3%B6tzlich+mit+dabei+%28immer+eine+gute+Idee%29+und+vor+allem+konnte+man+pl%C3%B6tzlich+mit+ein+wenig+HTML+und+JavaScript+kleine+Erweiterungen+f%C3%BCr+den+Desktop+zaubern.%0D%0A%0D%0ADas+war+dann+f%C3%BCr+eine+kurze+Zeit+in+aller+Munde.+Irgendwelche+Fr%C3%BCh-%C3%9Cbernehmer+%28oder+wie+%C3%BCbersetzt+man+early+adopters%3F%29+waren+gleich+zur+Stelle+und+hatten+bereits+zur+Presse-Erkl%C3%A4rung+L%C3%B6sungen+am+Start.+Super+Sache+eigentlich%2C+aber+verschwunden+war+es+auch+ganz+schnell+wieder+und+keiner+sprach+mehr+davon.%0D%0A%0D%0AWas+aber+steckte+dahinter%3F+Meiner+Meinung+nach+gaaanz+einfach+Faulheit+oder+Zeitdruck+bei+Apple.+Die+hatten+ganz+einfach+keine+Zeit+oder+keinen+Bock+darauf%2C+eine+weitere+API+aufzustellen+und+zu+dokumentieren+und+haben+das+gemacht%2C+was+jedem+App-Programmierer+anderer+Firmen+bei+Todesstrafe+verboten+ist.+Sie+haben+einfach+einen+halbtransparenten+Browser+gebaut+und+zeigen+den+auf+ihrem+Desktop+an.+Der+wird+sch%C3%B6n+eingesperrt%2C+damit+die+Bildchen+von+Oma+nicht+pl%C3%B6tzlich+Wandertag+bekommen+und+fertig.%0D%0A%0D%0AEigentlich+h%C3%A4tte+man+das+damals+schon+verdammen+m%C3%BCssen%2C+aber+die+Funktion+war+so+unwichtig%2C+dass+jeder+nur+dachte%2C+ach+die+lassen+wir+mal+machen.%0D%0A%0D%0AZeitsprung%0D%0A%0D%0AIrgendeiner+konnte+seinen+Mund+nicht+halten.+Es+war+wohl+letztlich+Bob+Muglia%2C+der+sich+verplapperte+und+irgendeinem+Korrespondenten+sagte%2C+das+Silverlight+wohl+durch+HTML+und+JavaScript+ersetzt+wird.+Aber+es+war+nicht+Bob%C2%A0+allein.+Jeder+der+sich+die+Preview+des+neuen+Visual+Studio+nicht+nur+herunter-+sondern+auch+reinzog+wurde+bei+jedem+Versuch%2C+ein+neues+Projekt+zu+erstellen+immer+gleich+standardm%C3%A4%C3%9Fig+in+die+HTML-Ecke+gedr%C3%A4ngt.+Nachtigall%2C+ick+h%C3%B6r+Dir+trapsen%21%0D%0A%0D%0AWas+aber+soll+das+ganze+Gequatsche%3F+Was+soll+das+hei%C3%9Fen%2C+Silverlight+k%C3%B6nnte+durch+HTML+ersetzt+werden%3F+Ich+dachte+dar%C3%BCber+nach+und+das+Ganze+eine+sch%C3%B6ne+Weile+lang.+Inzwischen+riefen+die+Kunden+an+%28es+war+nicht+nur+einer+gewesen%29+und+waren+nerv%C3%B6s+wegen+Meldungen%2C+die+mich+L%C3%BCgen+straften.%0D%0A%0D%0AZun%C3%A4chst+dachte+ich+an+eine+perfide+Verschw%C3%B6rung+der+Leute+vom+Windows-Team+bei+Microsoft+%28die+dunkle+Seite%29%2C+die+den+Development-Jungs+%28helle+Seite%29+h%C3%A4misch+grinsend+eins+reinw%C3%BCrgten.+Diese+Vorstellung+tr%C3%B6stete+mich+eine+Weile%2C+weil+man+da+ja+dann+in+eine+Art+Rebellion+zusammen+mit+den+coolen+Leuten+treten+k%C3%B6nnte.+Irgendwie+wollte+diese+Vision+aber+keinen+rechten+Sinn+ergeben%2C+weil+auch+die+guten+Jedi+bei+MS+anfingen%2C+immer+mehr+HTML-Kram+zu+bloggen.+Was+war+nur+los%3F%0D%0A%0D%0AUnd+dann+traf+mich+die+Erkenntnis+mal+wieder.+Sie+adaptieren+letztlich+nur+den+Apple-Workaround.+Nat%C3%BCrlich%21+Keine+APIs+mehr+getrennt+f%C3%BCr+Client-+und+Web-Entwickler%21+Kein+bl%C3%B6des+Trennen+mehr+von+Mobil-+und+Desktop-Apps%21+Wir+machen+es+einfach+falsch+herum+aber+sparen+eine+Menge+Kohle%21%0D%0A%0D%0AIch+glaube+kaum%2C+dass+ein+vern%C3%BCnftiger+Mensch+bei+MS+wirklich+glaubt%2C+dass+jenseits+der+%E2%80%9EIch-browse-meine-lokalen-Fotos-und-schiebe-sie-auf-Facebook%E2%80%9C-Apps+irgendeiner+auch+nur+den+Funken+einer+Idee+hat%2C+wie+man+Anwendungen+vom+Kaliber+Photoshop%2C+SQL+Server+Management+Studio%2C+ACDSee+oder+Word+vern%C3%BCnftig+in+Metro+unterbringen+soll.+Auch+schert+es+bei+den+Windows-Marketing-Trolls+keinen+Einzigen%2C+wie+man+als+Entwickler+auf+die+Oktilliarden+von+Screen-Gr%C3%B6%C3%9Fen+eingehen+soll%2C+ohne+dass+die+Icons+aussehen%2C+als+h%C3%A4tte+einer+mit+dem+Hammer+oben+drauf+gehauen.%0D%0A%0D%0ADas+ist+denen+egal%2C+weil+sie+100+Designer+haben%2C+die+ihnen+f%C3%BCr+ihre+Pr%C3%A4sis+und+Beispiel-Webseiten+schnell+mal+ein+schickes+Design+verpassen.+Weil+es+ihnen+egal+sein+kann%2C+welches+Tab+ein+Kunde+denn+nun+wirklich+einsetzt.+Sie+k%C3%B6nnen+coole+Sachen+bauen+und+hinterlassen+uns+dann+wieder+mit+einem+schalen+Gef%C3%BChl+im+Magen%2C+dass+die+eigene+App+irgendwie+nicht+so+fluffig+ist%2C+wie+die+von+MS.%0D%0AUnd+Silverlight%3F+Jetzt+ist+Version+5+rausgekommen.+Amazon+bietet+inzwischen+95+Titel+dazu+an.+Jede+MIX-Konferenz+war+voll+von+Demos+und+Gro%C3%9Fkundenprojekten.+Und+trotzdem+wird+es+auslaufen.+Die+Gro%C3%9Fkunden+werden+unterst%C3%BCtzt.+Neue+B%C3%BCcher+werden+erscheinen.+Und+die+Geldmaschine+l%C3%A4uft+von+Neuem+an.+Dass+das+Eine+mit+dem+anderen+%C3%BCberhaupt+nichts+zu+tun+hat%2C+spielt+bei+der+Diskussion+keine+Rolle.%0D%0ASilverlight+bringt+ein+Security-Konzept+mit%2C+ist+quasi+eine+virtuelle+Maschine+f%C3%BCr+Apps.+Es+basiert+nativ+auf+Vektoren+und+kann+super+skalieren.+Wir+wissen+als+Entwickler+immer+genau%2C+was+unsere+App+vorfindet.+HTML+ist+nur+ein+Standard%2C+keine+Technologie%21+Ich+behaupte%2C+dass+der+Einsatz+von+HTML+und+JavaScript+au%C3%9Ferhalb+eines+Browsers+per+se+ein+Missbrauchen+einer+Idee+darstellt.%0D%0A%0D%0AStackoverflow+soll+schon+mal+Speicher+kaufen%2C+denn+die+Foren+werden+voll+sein+von+Fragen+nach+Performance+und+Zugriff+auf+lokale+Ressourcen.+Es+wird+Tonnen+von+nuget-Plugins+hageln%2C+die+irgendwie+das+Verhalten+herstellen%2C+was+Silverlight+eigentlich+schon+eingebaut+hatte.+Ja+gut%2C+es+wird+WinRT+als+Schnittstelle+geben.+Und+dann%3F+Ich+denke%2C+dass+es+vor+allem+tausend+L%C3%B6cher+in+die+Windows-Security+schie%C3%9Fen+wird%2C+wenn+es+all+das+leisten+wird%2C+was+Silverlight+schon+kann.%0D%0A%0D%0AWas+bleibt+also+%C3%BCbrig%3F+Die+Erkenntnis%2C+dass+nicht+immer+alles+seinen+richtigen+Weg+geht.+Ich+werde+auch+diese+Pille+schlucken+m%C3%BCssen.+Ich+k%C3%B6nnte+auch+ins+Java-Lager+wechseln+und+mir+den+dort+verzapften+Stuss+antun.+Viel+besser+wird+es+da+aber+auch+nicht.+Vielleicht%2C+wenn+ich+mal+einen%C2%A0+K%C3%BChlschrank+programmieren+soll%2C+mal+sehen.+Jedenfalls+muss+man+wahrscheinlich+einfach+seine+Ideale+von+der+IT%2C+wie+sie+sein+sollte+ablegen.+Solche+Dinge+bei%C3%9Fen+sich+immer+mit+BWL%2C+Marketing+und+Mainstream+und+Letztere+haben+von+Natur+aus+die+langen+Hebel%21&amp;tags=CSV+rules%2CSilverlight%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Entitiy Framework und WCF in SOA-Projekten</title>
		<link>http://www.codingfreaks.de/2011/12/30/entitiy-framework-und-wcf-in-soa-projekten/</link>
		<comments>http://www.codingfreaks.de/2011/12/30/entitiy-framework-und-wcf-in-soa-projekten/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 17:11:25 +0000</pubDate>
		<dc:creator>sprinter</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://www.codingfreaks.de/?p=870</guid>
		<description><![CDATA[TweetJeder möchte heute service-orientierte Anwendungen entwickeln. Gerade Microsoft hat sich auf die Fahnen geschrieben, Entwickler bei dieser Aufgabe zu unterstützen. Alles ist angeblich ganz einfach. Wenn man es dann aber wirklich machen muss, stolpert man andauernd. codingfreaks versucht, ein wenig Licht ins Dunkel zu bringen. Vorbemerkungen Jeder, der sich ernsthaft mit service-orientierten Architekturen auseinander setzt, [...]]]></description>
		<wfw:commentRss>http://www.codingfreaks.de/2011/12/30/entitiy-framework-und-wcf-in-soa-projekten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://www.codingfreaks.de/files/videos/ef_soa.mp4" length="9240576" type="video/mp4" />
<enclosure url="http://www.codingfreaks.de/files/videos/ef_ste_bug.mp4" length="10297168" type="video/mp4" />
<enclosure url="http://www.codingfreaks.de/files/videos/ef_poco.mp4" length="5969193" type="video/mp4" />
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=codingfreaks&amp;url=http%3A%2F%2Fwww.codingfreaks.de%2F2011%2F12%2F30%2Fentitiy-framework-und-wcf-in-soa-projekten%2F&amp;language=de_DE&amp;category=text&amp;title=Entitiy+Framework+und+WCF+in+SOA-Projekten&amp;description=Jeder+m%C3%B6chte+heute+service-orientierte+Anwendungen+entwickeln.+Gerade+Microsoft+hat+sich+auf+die+Fahnen+geschrieben%2C+Entwickler+bei+dieser+Aufgabe+zu+unterst%C3%BCtzen.+Alles+ist+angeblich+ganz+einfach.+Wenn+man+es+dann+aber+wirklich+machen+muss%2C+stolpert+man+andauernd.+codingfreaks+versucht%2C+ein+wenig+Licht+ins+Dunkel+zu+bringen.%0D%0A%0D%0A%0D%0AVorbemerkungen%0D%0AJeder%2C+der+sich+ernsthaft+mit+service-orientierten+Architekturen+auseinander+setzt%2C+wird+im+.NET-Bereich+fr%C3%BCher+oder+sp%C3%A4ter+%C3%BCber+die+Stichworte+Entitiy+Framework+%28EF%29+und+WCF+stolpern.+Dabei+handelt+es+sich+zwar+um+2+unterschiedliche+Technologien%2C+das+Zusammenspiel+der+beiden+ist+jedoch+u.U.+extrem+wichtig.+EF+ist+der+objektrelationale+Mapper+%28ORM%29%2C+der+letztlich+den+Zugriff+auf+in+relationalen+Datenbanken+gespeicherten+Daten+kapselt+und+WCF+ist+die+Technologie%2C+um+diese+Daten+per+Service+nach+au%C3%9Fen+zugreifbar+zu+machen.%0D%0A%0D%0ADas+Szenario+ist+letztlich+immer+das+gleiche.+Irgendwo+liegen+Daten+meist+in+Form+relationaler+Datenbanken+herum.+Diese+muss+man+erst+einmal+programmatisch+abgreifen+und+somit+codeseitig+verf%C3%BCgbar+machen.+Dazu+sind+in+den+vergangenen+Jahren+diverse+Technologien+entwickelt+worden.+Angefangen+hat+alles+mit+Direktzugriffen+per+ADO+und+sp%C3%A4ter+ADO.NET.+Es+gab+bereits+fr%C3%BCh+Techniken%2C+um+Datenbank-Inhalte+weitgehend+automatisiert+zu+laden+und+im+Code+verf%C3%BCgbar+zu+machen+%28z.B.+typisierte+Datasets%29.+So+richtig+wollte+das+aber+nicht+performen+und+viele+professionelle+Anwender+schreckten+vor+dem+Einsatz+dieser+black+boxes+eher+zur%C3%BCck.%0D%0ADaten+handeln%0D%0ADie+rasche+Entwicklung+der+Programmiersprachen+und+Frameworks+brachte+dann+die+M%C3%B6glichkeit%2C+Code+intelligenter+werden+zu+lassen.+Die+Zeit+der+ORM+brach+an.+Aus+der+Java-Welt+schwappten+erste+Ideen%2C+wie+Hibernate+in+Richtung+.NET+%C3%BCber.+Die+Idee+ist%2C+ein+Mapping+von+Code-Bestandteilen+zu+Datenbank-Inhalten+durchzuf%C3%BChren.+So+gibt+man+also+beispielsweise+an%2C+dass+eine+Klasse+%22Person%22+Daten+aus+einer+Datenbanktabelle+%22Personen%22+laden+soll.+Der+ORM+k%C3%BCmmert+sich+dann+um+die+notwendigen+SQL-Befehle.%0D%0A%0D%0ADas+ORM-Modell+klappt+ganz+gut%2C+hat+aber+einige+Nachteile.+Das+ORM+war+z.B.+nie+fester+Bestandteil+des+.NET-Frameworks.+Man+musste+DLLs+mitliefern+und+vor+allem+in+der+richtigen+Version+vorhalten.+Wer+schon+einmal+das+bin-Verzeichnis+einer+ActiveRecord-Installation+gesehen+hat%2C+wei%C3%9F%2C+dass+der+.NET-Einfachheitsgedanke+hier+irgendwie+nicht+gegriffen+hat.%0D%0A%0D%0AMicrosoft+hatte+schlie%C3%9Flich+ein+Einsehen+und+brachte+Entity+Framework+als+ersten+echten+Haus-ORM+an+den+Start.+Nach+einigen+Evolutions-Stufen+ist+nun+ein+Stand+erreicht+%28Version+4%29%2C+der+ernst+genommen+werden+muss.+Die+Idee+ist+hier%2C+dass+der+Zugriffscode+aus+SQL-Sicht+immer+noch+in+einer+DLL+liegt%2C+die+allerdings+Bestandteil+des+Frameworks+selbst+ist.+Tools+im+Visual+Studio+erzeugen+den+Klassen-Code+entweder+komplett+selbst%2C+nachdem+sie+eine+Datenbank+analysiert+haben+oder+man+erstellt+erst+Entit%C3%A4ten+und+erzeugt+daraus+dann+Datenbanken.+codingfreaks+neigt%2C+wie+in+anderen+Artikeln+bereits+beschrieben%2C+dazu%2C+von+der+zweiten+Strategie+abzuraten.%0D%0ADaten+verf%C3%BCgbar+machen%0D%0AMit+SOA+hat+das+bisher+geschrieben+noch+%C3%BCberhaupt+nichts+zu+tun.+Microsoft+hat+mit+der+Windows+Communication+Foundation+%28WCF%29+letztlich+nur+eine+Bereinigung+seiner+teils+konfusen+Remoting-+und+Service-Technologien+eingef%C3%BChrt%2C+dies+aber+mit+durchschlagendem+Erfolg.+WCF+bringt+standardkonforme+Dienste+in+die+.NET-Welt%2C+die+sauber+programmiert+und+leicht+konfiguriert+werden+k%C3%B6nnen.+Dadurch+ergibt+sich+zwar+noch+lange+nicht+SOA%2C+es+wird+aber+endlich+m%C3%B6glich%2C+SOA-konforme+Anwendungen+mit+Microsoft-Mitteln+zu+entwickeln.%0D%0A%0D%0AIch+werde+hier+jetzt+keinen+Abriss+zu+SOA+verfassen.+Zum+einen+sollte+man+dieses+Thema+eher+in+Buchform+konsumieren+%28soabooks.com%29.+Zum+anderen+glaube+ich+inzwischen%2C+dass+SOA+zwar+f%C3%BCr+viele+Menschen+unterschiedliche+Bedeutungen+hat%2C+letztlich+aber+so+ziemlich+alle+das+gleiche+Ziel+haben.+Abbsilund+1+soll+zeigen%2C+was+ich+damit+meine.%0D%0A%0D%0A%5Bcaption+id%3D%22%22+align%3D%22alignnone%22+width%3D%22551%22+caption%3D%22Abb.+1%3A+So+stellen+wir+uns+SOA+vor%22%5D%5B%2Fcaption%5D%0D%0A%0D%0AIrgendwo+liegen+also+Daten+vor%2C+die+wir+per+EF+codeseitig+zugreifbar+machen.+Dann+erzeugen+wir+WCF-Komponenten%2C+die+diese+Daten+nutzen.+Die+WCF+stellt+dann+Endpunkte+nach+%22drau%C3%9Fen%22+zur+Verf%C3%BCgung.+Fertig%21%0D%0A%0D%0AMan+stellt+sich+also+vor%2C+dass+eine+Klasse+%22Employee%22+aus+einer+Tabelle+%22Employees%22+geladen+per+WCF+%C3%BCber+Systemgrenzen+transportiert+wird.+Wir+erhalten+also+von+einem+Webservice+einen+Employee%2C+bearbeiten+ihn+und+schreiben+ihn+zur%C3%BCck+und+fertig.+Nur+das+es+halt+so+einfach+nicht+ist%21%0D%0ADie+Probleme%0D%0AZun%C3%A4chst+einmal+sind+EF-Objekte+nicht+einfach+nur+Klassen%2C+sondern+eben+Klassen+mit+einer+gewissen+Logik.+Sie+erben+von+Klassen+des+Entity+Frameworks+und+k%C3%B6nnen+weitaus+mehr%2C+als+nur+die+Daten+einer+Tabelle+zur+repr%C3%A4sentieren.+Das+f%C3%BChrt+aus+Sicht+von+SOA+zu+dem+Problem%2C+dass+keine+Unabh%C3%A4ngigkeit+von+der+verwendeten+Technologie+mehr+da+ist.+W%C3%BCrde+in+Abb.+1+rechts+vom+grauen+Kasten+eine+Java-Anwendung+auf+unseren+Employee+zugreifen+w%C3%BCrde+sie+teilweise+unsinnige+Elemente+erhalten+und+aus+w%C3%A4re+es+mit+der+sch%C3%B6nen+SOA-Welt.%0D%0A%0D%0AAu%C3%9Ferdem+ist+service-seitig+das+Objekt%2C+das+man+clientseitig+erh%C3%A4lt+nicht+genau+das+gleiche%2C+was+service-seitig+aus+der+Datenbank+erzeugt+wurde.+Zwischen+Service+und+Client+werden+vielmehr+Proxy-Objekte+ausgetauscht%2C+weil+wir+ja+vom+Client+aus+nicht+direkt+in+den+Speicher+des+Services+lesen+und+schreiben+k%C3%B6nnen+%28zum+Gl%C3%BCck%29.+Also+arbeitet+WCF+mit+Serialisierung+%28Abb.+2%29.%0D%0A%0D%0A%5Bcaption+id%3D%22%22+align%3D%22alignnone%22+width%3D%22542%22+caption%3D%22Abb.+2%3A+Proxy-Klassen+durch+Serialisierung%22%5D%5B%2Fcaption%5D%0D%0A%0D%0A%22GetEmployee%22+ist+hier+eine+Service-Methode%2C+die+scheinbar+einfach+einen+Employee+liefert.+Es+ist+aber+eine+Serialisierung+notwendig+%28gestrichelte+Linie%29%2C+um+die+Daten+eines+Employee+zum+Client+zu+transportieren.+WCF+macht+es+inzwischen+so+einfach%2C+Dienste+zu+programmieren%2C+dass+wir+oft+vergessen%2C+dass+diese+Serialisierung+erfolgt.+Aber+sie+ist+da%2C+nur+dass+WCF+beim+Einrichten+eines+Dienstverweises+die+entsprechende+Klasse+f%C3%BCr+uns+erstellt.%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_874%22+align%3D%22alignnone%22+width%3D%22150%22+caption%3D%22Abb.+3%3A+Reference.cs+enth%C3%A4lt+Proxy-Definition%22%5D%5B%2Fcaption%5D%0D%0A%0D%0AHat+man+einen+Dienstverweis+zu+einem+Projekt+hinzugef%C3%BCgt+und+schaltet+man+in+diesem+Client-Projekt+die+Option+zur+Anzeige+aller+Dateien+an%2C+sieht+man+unterhalb+des+Dienstverweises+die+Datei+Reference.cs+%28Abb.+3%29.+Sie+enth%C3%A4lt+die+client-seitige+Definition+der+Proxy-Klasse.+Gegen+diese+Datei+arbeiten+wir+im+Client-Projekt.+Nicht+gegen+das+Original+aus+dem+Entity+Framework%21%0D%0A%0D%0ADie+Vorstellung%2C+dass+WCF+uns+auf+wundersame+Weise+Datenbank-Objekte+des+EF+einfach+durchschiebt%2C+wir+diese+dann+einfach+auf+einem+anderen+Rechner+ver%C3%A4ndern+und+wieder+speichern+ist+also+Unsinn.+Diese+Feststellung+ist+ungemein+wichtig%2C+wie+wir+sp%C3%A4ter+noch+sehen+werden.%0D%0ADie+Idee+der+POCOs%0D%0AMicrosoft+hat+schnell+erkannt%2C+dass+es+ganz+sinnvoll+sein+k%C3%B6nnte%2C+Entwicklern+die+M%C3%B6glichkeit+zu+geben%2C+anstelle+der+relativ+schwergewichtigen+EF-Objekte+einfache+POCOs+%28plain+old+CLR+object%29+zu+%C3%BCbertragen.+Ein+POCO+zeichnet+sich+dadurch+aus%2C+dass+es+zum+einen+direkt+von+Object+erbt+und+zum+anderen+keine+magischen+Datentypen+nutzt%2C+sondern+alles+mit+Standard-Datentypen+umsetzt.+Ein+POCO+hat+also+die+Macht%2C+.NET-Klassen+wirklich+SOA-artig+als+Standard-Objekte+verf%C3%BCgbar+zu+machen.%0D%0A%0D%0ADamit+das+Ganze+nun+nicht+in+einem+weiteren+komplexen+Mapping-Layer+endet%2C+der+aus+EF-Objekten+POCOs+generiert%2C+hat+man+die+T4-Idee+%28die+letztlich+auch+hinter+EF+steckt%29+einfach+angewendet+und+dem+EF-Designer+die+Option%2C+einzustellen%2C+dass+nicht+die+Standard-EF-Klassen%2C+sondern+andere+Ausgaben+erzeugt+werden.+Ich+habe+das+Ganze+mal+in+dem+folgenden+Webcast+dargestellt%3A%0D%0A%0D%0A%5Bjwplayer+file%3D%22http%3A%2F%2Fwww.codingfreaks.de%2Ffiles%2Fvideos%2Fef_poco.mp4%22%5D%0D%0A%0D%0AEs+ist+also+wirklich+nicht+schwierig%2C+einzustellen%2C+was+genau+EF+f%C3%BCr+uns+erzeugen+soll.+Die+Magie+liegt+hier+bei+T4.%0D%0APOCOs+sind+nicht+das+richtige%0D%0ADie+POCOs+sind+in+letzter+Zeit+in+aller+Munde%2C+l%C3%B6sen+aber+unser+SOA-Problem+nicht.+Sie+sind+deshalb+so+beliebt%2C+weil+immer+mehr+Anwendungen+einfach+nur+Daten+lesen+wollen.+Das+hat+mit+dem+wachsenden+Interesse+an+Web-Anwendungen+zu+tun.+Es+ist+mittlerweise+state+of+the+art%2C+eine+Webseite+per+AJAX+und+JSON+mit+Daten+zu+versorgen.+Anstatt+nun+komplexe+Datenzugriffe+in+PHP+zu+erzeugen%2C+wird+genau+dies+dem+EF+%C3%BCberantwortet+und+die+Webseite+greift+bequem+%C3%BCber+REST-Schnittstellen+auf+die+Ergebnisse+zu.+Daf%C3%BCr+sind+POCOs+perfekt.%0D%0A%0D%0ASie+bringen+einen+aber+zum+Verzweifeln%2C+wenn+man+eine+einfache+M%C3%B6glichkeit+sucht%2C+die+ausgelieferten+Entit%C3%A4ten+wieder+zu+empfangen+und+so%2C+wie+sie+kommen%2C+in+der+Datenbank+zu+speichern.+Genau+hier+helfen+uns+nun+die+sog.+self-tracking-entities+%28STE%29+weiter.+Sie+sind+erstmal+nichts+anderes%2C+als+eine+weitere+Codegenierungs-Strategie.%0D%0ASTE%0D%0ASTEs+sind+selbst+auch+POCOs.+Sie+erben+von+Object%2C+implementieren+aber+zus%C3%A4tzliche+2+Interfaces%3A+INotifyPropertyChanged+und+IObjectWithChangeTracker.%0D%0A%0D%0AWas+aber+bringen+uns+die+STE+genau%3F+Letztlich+arbeiten+auch+sie+mit+Proxy-Klassen.+Der+Unterschied+ist%2C+dass+die+Entit%C3%A4ten+neue+Methoden+und+M%C3%B6glichkeiten+mitbringen.+Vereinfacht+gesagt+erkennen+STEs+sich+anhand+ihrer+Eigenschaft+selbst+wieder+und+erm%C3%B6glichen+somit+den+bidrektionalen+Umgang+mit+der+Datenbank+%C3%BCber+EF.%0D%0A%0D%0ABevor+wir+uns+aber+dem+Einsatz+zuwenden%2C+soll+der+folgende+Webcast+zeigen%2C+wie+ein+grunds%C3%A4tzliches+und+sehr+%C3%A4rgerliches+Problem+der+STEs+gel%C3%B6st+werden+kann%2C+das+auftritt%2C+wenn+man+die+deutsche+Version+des+Visual+Studios+einsetzt.+Der+folgende+Webcast+verdeutlicht+das+Problem+und+zeigt+die+L%C3%B6sung+auf%3A%0D%0A%0D%0A%5Bjwplayer+file%3D%22http%3A%2F%2Fwww.codingfreaks.de%2Ffiles%2Fvideos%2Fef_ste_bug.mp4%22%5D%0D%0A%0D%0ADieser+Fehler+ist+wirklich+peinlich+und+h%C3%A4tte+auf+keinen+Fall+vorkommen+d%C3%BCrfen%2C+aber+es+ist+mal+wieder+ein+Beleg+f%C3%BCr+die+alte+Weisheit%2C+dass+man+als+Entwickler+eigentlich+immer+die+Original-Sprache+der+Tools+verwenden+sollte.%0D%0A%0D%0AWie+dem+auch+sei%2C+wir+haben+nun+die+STEs+erfolgreich+eingebunden.+Aber+was+bringt+das+nun+genau%3F+Listing+1+zeigt+den+Einsatz+exemplarisch.%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+1%3A+STEs+im+Einsatz%22%5D%0D%0A%0D%0Ausing+%28var+ctx+%3D+new+AdventureWorksEntities%28%29%29%0D%0A%7B%0D%0A++++var+adr+%3D+ctx.Addresses.FirstOrDefault%28%29%3B%0D%0A++++Console.WriteLine%28adr.AddressLine1%29%3B%0D%0A++++adr.StartTracking%28%29%3B%0D%0A++++adr.AddressLine1+%2B%3D+%26quot%3B2%26quot%3B%3B%0D%0A++++ctx.Addresses.ApplyChanges%28adr%29%3B%0D%0A++++ctx.SaveChanges%28%29%3B%0D%0A++++Console.WriteLine%28adr.ChangeTracker.ChangeTrackingEnabled%29%3B%0D%0A++++adr.StopTracking%28%29%3B%0D%0A%7D%0D%0A%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0ADie+Entit%C3%A4ten+k%C3%B6nnen+per+StartTracking-Methode+angewiesen+werden%2C+%C3%84nderungen+an+sich+selbst+automatisch+zu+sammeln.+Die+Schnittstelle+INotifyPropertyChanged+hilft+den+STEs+hier+aus.+ApplyChanges+wiederum+ist+eine+Methode%2C+die+auf+Entit%C3%A4ts-Mengen+angewendet+werden+kann.+Sie+nimmt+ein+Objekt+vom+gleichen+Typ%2C+wie+die+Entit%C3%A4tsmenge+entgegen+und+wird+nun+anhand+des+Entit%C3%A4ts-Schl%C3%BCssels+nachsehen%2C+ob+es+das+der+Methode+%C3%BCbergebene+Element+bereits+gibt.+Wenn+ja%2C+wird+ein+Update+durchgef%C3%BChrt.+Wenn+nein%2C+dann+ein+Insert.%0D%0A%0D%0ADas+ist+genau+die+Technik%2C+die+wir+f%C3%BCr+unseren+SOA-Einsatz+brauchen.%0D%0A%0D%0ADie+n%C3%A4chsten+Schritte+zeigen+nun%2C+wie+man+STEs+wirklich+produktiv+in+eigenen+Umgebungen+aufsetzen+kann.+Die+Komplexit%C3%A4t+der+im+Folgenden+gezeigten+Schritte+r%C3%BChrt+daher%2C+dass+wir+nicht+einfach+nur+STE+dazu+nehmen.+Wir+wollen+vielmehr+bereits+eine+praktikable+Struktur+aufbauen+inkl.+Diensten+usw.%0D%0ASOA+mit+EF+und+WCF%0D%0AF%C3%BCr+diejenigen%2C+die+am+liebsten+erst+einen+Webcast+ansehen%2C+hier+die+Inhalte+in+Videoform%3A%0D%0A%0D%0A%5Bjwplayer+file%3D%22http%3A%2F%2Fwww.codingfreaks.de%2Ffiles%2Fvideos%2Fef_soa.mp4%22%5D%0D%0A%0D%0ADie+folgende+Auflistung+zeigt+die+Projektschritte+noch+einmal+in+einer+Schritt-f%C3%BCr-Schritt-Anleitung+auf%3A%0D%0A%0D%0A%09Leeres+Solution-Projekt+erstellen.%0D%0A%09Projekt+vom+Typ+DLL+hinzuf%C3%BCgen+%28Model.csproj%29.%0D%0A%09Class1.cs+entfernen.%0D%0A%09In+Model.csproj+ein+ADO.NET-Entity-Model+hinzuf%C3%BCgen.%0D%0A%09Im+Entity-Designer+%C3%BCber+%22Neues+Codegenierungselement+hinzuf%C3%BCgen...%22+STE+erzeugen.%0D%0A%09Nacheinander+die+beiden+%2A.tt-Dateien+im+Projektmappen-Explorer+anklicken+und+in+den+Eigenschaften+unter+%22Benutzerdefiniertes+Tool%22+den+Eintrag+%22TextTemplatingFileGenerator%22+entfernen.%0D%0A%09Alle+Elemente+unterhalb+der+beiden+%2A.tt-Dateien+entfernen.%0D%0A%09Neues+Projekt+vom+Typ+DLL+der+Solution+hinzuf%C3%BCgen+%28Entities.csproj%29%0D%0A%09Class1.cs+entfernen%0D%0A%09Verweis+auf+System.Runtime.Serialization+hinzuf%C3%BCgen.%0D%0A%09Dem+Projekt+%C3%BCber+%22Vorhandenes+Element+hinzuf%C3%BCgen...%22+einen+Link+auf+die+Model.tt+aus+dem+Projekt+%22Model.csproj%22+hinzuf%C3%BCgen.+Darauf+achten%2C+im+Hinzuf%C3%BCgen-Dialog+%22Als+Linkhinzuf%C3%BCgen...%22+zu+benuzen.%0D%0A%09Neues+Projekt+vom+Typ+%22WCF-Dienstanwendung%22+der+Solution+hinzuf%C3%BCgen+%28Service.csproj%29%0D%0A%09Dem+Projekt+Verweise+auf+System.Data.Entity%2C+Model.csproj+und+Entities.csproj+hinzuf%C3%BCgen.%0D%0A%09In+der+Datei+web.config+den+kompletten+Schl%C3%BCssel+%22connectionStrings%22+aus+der+App.config+des+Projektes+Model.csproj+einf%C3%BCgen.%0D%0A%09Analog+zu+Schritt+11+dem+Projekt+einen+Link+auf+die+Datei+%2A.Context.tt+aus+dem+Ordner+von+Model.csproj+hinzuf%C3%BCgen.%0D%0A%09Den+neu+erzeugten+Link+im+Projektmappen-Explorer+anklicken+und+im+Eigenschaften-Fenster+unter+%22Namespace+des+benutzerdefinierten+Tools%22+den+Namespace+des+Projektes+Entities.csproj+eintragen.%0D%0A%09Service-Methoden+wie+gewohnt+erzeugen.%0D%0A%09Neues+Projekt+vom+Typ+%22Konsolenanwendung%22+der+Solution+hinzuf%C3%BCgen+%28ConsoleUI.csproj%29.%0D%0A%09Einen+Verweis+auf+Entities.csproj+hinzuf%C3%BCgen.%0D%0A%09Einen+Dienstverweis+auf+Service.csproj+hinzuf%C3%BCgen.%0D%0A%0D%0AJedes+unterstrichene+Element+der+Liste+kennzeichnet+das+Hinzuf%C3%BCgen+eines+neuen+Projektes.%0D%0A%0D%0ADas+Entities-Projekt+ist+zum+Zwecke+der+sauberen+Kapselung+vorhanden.+Es+erlaubt+uns+das+Setzen+eines+Verweises+im+UI%2C+ohne+dass+wir+die+Trennung+der+Schichten+aufheben+w%C3%BCrden.%0D%0A%0D%0AWer+anstelle+der+WCF-Dienstanwendung+aus+Schritt+12+eine+Dienstbibliothek+einsetzen+m%C3%B6chte%2C+wird+auf+Schwierigkeiten+sto%C3%9Fen.+Das+h%C3%A4ngt+damit+zusammen%2C+dass+eine+WCF-Dienstanwendung+Probleme+hat%2C+die+Metadaten+der+in+einem+anderen+Projekt+liegenden+EF-Designer-Dateien+zu+laden.+Zur+L%C3%B6sung+muss+der+ConnectionString+hier+manuell+beim+Erzeugen+des+Contexts+%C3%BCbergeben+werden.%0D%0A%0D%0ADas+komplette+Visual-Studio-Projekt+kann+hier+heruntergeladen+werden%3A+SoaSample.zip&amp;tags=C%23%2CEntity+Framework%2CFramework%2COOP%2CSOA%2CVisual+Studio%2CWCF%2Cblog" type="text/html" />
	</item>
		<item>
		<title>CLR im SQL Server nutzen (Teil 2)</title>
		<link>http://www.codingfreaks.de/2011/12/20/clr-im-sql-server-nutzen-teil-2/</link>
		<comments>http://www.codingfreaks.de/2011/12/20/clr-im-sql-server-nutzen-teil-2/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 18:33:35 +0000</pubDate>
		<dc:creator>sprinter</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.codingfreaks.de/?p=850</guid>
		<description><![CDATA[TweetDer erste Artikel dieser Reihe kratzte nur an der Oberfläche und inzwischen sind auch wieder Neuerungen in diesem Bereich hinzu gekommen. In diesem Teil der Serie beschäftigen wir uns mit ein paar Besonderheiten bei der Arbeit mit SQL CLR gerade im Hinblick auf Sicherheit und Konfiguration. Teil 1 Was hat sich getan? Seit unserem letzten [...]]]></description>
		<wfw:commentRss>http://www.codingfreaks.de/2011/12/20/clr-im-sql-server-nutzen-teil-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=codingfreaks&amp;url=http%3A%2F%2Fwww.codingfreaks.de%2F2011%2F12%2F20%2Fclr-im-sql-server-nutzen-teil-2%2F&amp;language=de_DE&amp;category=text&amp;title=CLR+im+SQL+Server+nutzen+%28Teil+2%29&amp;description=Der+erste+Artikel+dieser+Reihe+kratzte+nur+an+der+Oberfl%C3%A4che+und+inzwischen+sind+auch+wieder+Neuerungen+in+diesem+Bereich+hinzu+gekommen.+In+diesem+Teil+der+Serie+besch%C3%A4ftigen+wir+uns+mit+ein+paar+Besonderheiten+bei+der+Arbeit+mit+SQL+CLR+gerade+im+Hinblick+auf+Sicherheit+und+Konfiguration.%0D%0A%0D%0ATeil+1%0D%0A%0D%0AWas+hat+sich+getan%3F%0D%0ASeit+unserem+letzten+Artikel+ist+ja+bereits+ein+neuer+SQL-Server+%282008+R2%29+und+ein+neues+Visual+Studio+%282010%29+heraus+gekommen.+Wichtig+hierbei+ist+zun%C3%A4chst+erstmal+nur%2C+dass+der+SQL-Server+nach+wie+vor+maximal+bis+.NET+Framework+3.5+mitspielt.+Beim+Anlegen+der+VS-Projekte+sollte+man+also+aufpassen%2C+dass+diese+Framework-Version+als+Ziel+angegeben+wird.%0D%0A%0D%0AIn+einem+aktuellen+Visual+Studio+f%C3%A4llt+es+au%C3%9Ferdem+teils+schwer%2C+sich+f%C3%BCr+die+richtige+Projektvorlage+zu+entscheiden%2C+da+im+Bereich+%22Datenbank%22+nun+wesentlich+mehr+Vielfalt+herrscht%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_854%22+align%3D%22alignnone%22+width%3D%22150%22+caption%3D%22Abb.+1%3A+Screenshot+Projekt-Vorlagen%22%5D%5B%2Fcaption%5D%0D%0A%0D%0ADer+richtige+Projekttyp+hei%C3%9Ft+nun+etwas+holprig+%22Visual+C%23+SQL+CLR-Datenbankprojekt%22.+Die+vielen+neuen+Projekttypen+sind+haupts%C3%A4chlich+dazu+da%2C+dass+man+als+stolzer+Inhaber+eines+Visual+Studio+nun+kein+SQL+Server+Management+Studio+mehr+braucht%2C+um+seine+Datenbank+zu+erstellen.%0D%0A%0D%0ASo+gesehen%2C+hat+sich+also+mit+anderen+Worten+erstmal+nicht+viel+ver%C3%A4ndert%2C+da+3.5+immer+noch+unser+Basis-Framework+ist.+Mit+Denali+%28SQL-Server-Update%29+wird+sich+wom%C3%B6glich+mehr+%C3%A4ndern.%0D%0ANicht+alles+ist+so+einfach%2C+wie+ein+Hash%21%0D%0AIm+ersten+Teil+haben+wir+eine+Hash-Funktion+erstellt.+Das+ist+zwar+f%C3%BCr+einen+ersten+Einstieg+sehr+hilfreich%2C+hinkt+aber+deshalb+ein+wenig%2C+weil+wie+hier+keine+Sicherheits-Features+tangieren.+Das+aber+ist+wesentlich%2C+um+ein+paar+Stolpersteine+zu+umschiffen.%0D%0A%0D%0AUnser+neues+Beispiel+soll+etwas+tiefer+in+die+Materie+gehen.+Wir+m%C3%B6chten+in+eine+Funktion+erstellen%2C+die+es+erlaubt%2C+durch+Angabe+eines+Dateipfades+den+Inhalt+der+Datei+als+Bin%C3%A4rdaten+auszulesen.+Das+kann+sehr+n%C3%BCtzlich+sein%2C+wenn+man+z.B.+varbinary-Felder+mit+Daten+versorgen+m%C3%B6chte.%0D%0A%0D%0ADas+Neue+daran+ist+nun%2C+dass+der+SQL-Server%2C+um+solche+Funktionen+durchf%C3%BChren+zu+k%C3%B6nnen%2C+erh%C3%B6hte+Rechte+ben%C3%B6tigt.+Darauf+m%C3%BCssen+wir+nun+R%C3%BCcksicht+nehmen.%0D%0ASicherheits-Stufen%0D%0ASQL+CLR+kann+in+3+Sicherheitsstufen+laufen%3A%0D%0A%0D%0A%09Sicher+%28SAFE%29%0D%0A%09Extern+%28EXTERNAL_ACCESS%29%0D%0A%09Unicher+%28UNSAFE%29%0D%0A%0D%0ADie+Standard-Sicherheitsstufe%2C+die+durch+das+Visual+Studio+vorgew%C3%A4hlt+wird%2C+ist+Sicher.+Will+man+die+Sicherheitsstufe+f%C3%BCr+das+eigene+Projekt+%C3%A4ndern%2C+kann+man+dies+in+den+Eigenschaften+des+Projektes+unter+%22Datenbank%22+erledigen%3A%0D%0A%0D%0A%5Bcaption+id%3D%22attachment_856%22+align%3D%22alignnone%22+width%3D%22150%22+caption%3D%22Abb.+2%3A+Sicherheitsstufe+%C3%A4ndern%22%5D%5B%2Fcaption%5D%0D%0A%0D%0ADies+sorgt+daf%C3%BCr%2C+dass+VS+beim+Bereitstellen+bzw.+Debuggen+die+richtige+Stufe+%C3%BCbergibt.+Wird+n%C3%A4mlich+unser+Projekt+bereit+gestellt%2C+f%C3%BChrt+VS+letztlich+Folgendes+TSQL+auf+dem+SQL-Server+aus%3A%0D%0A%0D%0A%5Bsql+title%3D%22Listing+1%3A+Bereitstellung+einer+CLR-Assembly%22%5DCREATE+ASSEMBLY+%7BASSEMBLYNAME%7D+from+%27%7BASSEMBLYPFAD%7D%27+WITH+PERMISSION_SET+%3D+SAFE%7CEXTERNAL_ACCESS%7CUNSAFE%5B%2Fsql%5D%0D%0A%0D%0AWill+man+%C3%BCbrigens+einen+%C3%9Cberblick+%C3%BCber+alle+installierten+CLR-Assemblies+einer+SQL-Server-Instanz+haben%2C+bietet+sich+folgendes+an%3A%0D%0A%0D%0A%5Bsql+title%3D%22Listing+2%3A+CLR-Assemblies+auflisten%22%5DSELECT+%2A+FROM+SYS.assemblies%3B%5B%2Fsql%5D%0D%0A%0D%0AAber+zur%C3%BCck+zur+Sicherheit%3A+Damit+man+z.B.+auf+externe+Ressourcen%2C+wie+Dateien+im+Dateisystem+%C3%BCberhaupt+zugreifen+darf%2C+muss+mindestens+%22EXTERNAL_ACCESS%22+definiert+sein.+Doch+das+reicht+nicht%21%0D%0A%0D%0AVersucht+man%2C+eine+so+manipulierte+Projektmappe+auf+dem+SQL-Server+bereit+zu+stellen%2C+wird+es+eine+Fehlermeldung+geben.+Diese+hat+2+Gr%C3%BCnde%3A%0D%0A%0D%0A%09Unsere+Assembly+ist+nicht+signiert.%0D%0A%09Der+Datenbank+fehlt+das+TRUSTWORTHY-Recht.%0D%0A%0D%0ADie+erste+der+beiden+Bedingungen+ist+einem+gestandenen+.NET-Entwickler+noch+relativ+eing%C3%A4ngig.+EXTERNAL_ACCESS+kann+potenziell+Schaden+auf+dem+SQL-Server+anrichten+und+somit+ist+klar%2C+warum+der+SQL-Server+hier+nach+einer+signierten+Assembly+verlangt.+Eine+normale+SNK-Signierung+%28ohne+Kennwort%29+reicht+%C3%BCnrigens+aus.%0D%0A%0D%0ADen+zweiten+Grund+f%C3%BCr+unser+Scheitern+werden+nur+SQL-DBAs+logisch+finden.+Man+muss+halt+wissen%2C+dass+jede+SQL-Server-Datenbank+ein+TRUSTWORTHY-Attribute+besitzt%2C+das+explizit+auf+%22ON%22+gesetzt+werden+muss%3A%0D%0A%0D%0A%5Bsql+title%3D%22Listing+3%3A+TRUSTWORTHY+einschalten%22%5DALTER+DATABASE+%7BDBNAME%7D+SET+TRUSTWORTHY+ON%5B%2Fsql%5D%0D%0A%0D%0AUm+dies+zu+tun%2C+muss+man+in+der+sysadmin-Rolle+sein.+Dies+trifft+ebenfalls+zu%2C+wenn+man+Listing+1+mit+einem+anderen+Level+als+SAFE+ausf%C3%BChren+m%C3%B6chte.%0D%0ADas+neue+Sample%0D%0ASo+ger%C3%BCstet+k%C3%B6nnen+wir+uns+nun+an+unser+neues+Beispiel+wagen.+Hier+der+Code+einer+CLR-Skalar-Funktion%2C+die+unsere+Anforderungen+erf%C3%BCllt%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+4%3A+Sample-Code%22%5D%0D%0Apublic+partial+class+UserDefinedFunctions%0D%0A%7B%0D%0A++++%2F%2F%2F+%26lt%3Bsummary%26gt%3B%0D%0A++++%2F%2F%2F+Converts+the+content+of+a+file+into+a+byte-array+which+can+by+filled+into+a+varbinary-column.%0D%0A++++%2F%2F%2F+%26lt%3B%2Fsummary%26gt%3B%0D%0A++++%2F%2F%2F+%26lt%3Bremarks%26gt%3B%0D%0A++++%2F%2F%2F+%26lt%3Bpara%26gt%3B%0D%0A++++%2F%2F%2F+For+using+this%2C+you+have+to+ensure%2C+that+following+settings+where+made%3A%0D%0A++++%2F%2F%2F+%26lt%3B%2Fpara%26gt%3B%0D%0A++++%2F%2F%2F+%26lt%3Blist+type%3D%26quot%3Bbullet%26quot%3B%26gt%3B%0D%0A++++%2F%2F%2F+%26lt%3Bitem%26gt%3BSP_CONFIGURE+%27clr+enable%27%2C+1%26lt%3B%2Fitem%26gt%3B%0D%0A++++%2F%2F%2F+%26lt%3Bitem%26gt%3BRECONFIGURE%26lt%3B%2Fitem%26gt%3B%0D%0A++++%2F%2F%2F+%26lt%3Bitem%26gt%3BALTER+DATABASE+%7BYOURDBNAME%7D+SET+TRUSTWORTHY+ON%26lt%3B%2Fitem%26gt%3B%0D%0A++++%2F%2F%2F+%26lt%3B%2Flist%26gt%3B%0D%0A++++%2F%2F%2F+%26lt%3Bpara%26gt%3BThis+assembly+has+to+be+signed+and+in+properties+there+has+to+by+security-level+%26quot%3BExternal%26quot%3B.%26lt%3B%2Fpara%26gt%3B%0D%0A++++%2F%2F%2F+%26lt%3B%2Fremarks%26gt%3B%0D%0A++++%2F%2F%2F+%26lt%3Bparam+name%3D%26quot%3BimagePath%26quot%3B%26gt%3BThe+complete+URI+of+the+file+in+the+local+file+system.%26lt%3B%2Fparam%26gt%3B%0D%0A++++%2F%2F%2F+%26lt%3Breturns%26gt%3BThe+contents+as+a+SqlBytes-type.%26lt%3B%2Freturns%26gt%3B%0D%0A++++%5BMicrosoft.SqlServer.Server.SqlFunction%5D%0D%0A++++public+static+SqlBytes+GetImageBytes%28SqlString+imagePath%29%0D%0A++++%7B%0D%0A++++++++SqlBytes+retVal+%3D+null%3B%0D%0A++++++++string+fileName+%3D+imagePath.ToString%28%29%3B%0D%0A++++++++if+%28%21File.Exists%28fileName%29%29%0D%0A++++++++++++throw+new+FileNotFoundException%28%26quot%3BFile+not+found%21%26quot%3B%2C+fileName%29%3B%0D%0A++++++++try%0D%0A++++++++%7B%0D%0A++++++++++++retVal+%3D+new+SqlBytes%28File.ReadAllBytes%28fileName%29%29%3B%0D%0A++++++++%7D%0D%0A++++++++catch%0D%0A++++++++%7B%0D%0A++++++++++++throw%3B%0D%0A++++++++%7D%0D%0A++++++++return+retVal%3B%0D%0A++++%7D%0D%0A%7D%3B%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0AHier+ist+eigentlich+nichts+Spannendes+versteckt.+Einzig+der+SQL-Datentyp+SqlBytes+k%C3%B6nnte+von+Interesse+sein%2C+da+es+hier+einen+kleinen+Stolperstein+gibt.+Wer+sich+die+verf%C3%BCgbaren+Datentypen+ansieht%2C+wird+schnell+SqlBinary+finden+und+wom%C3%B6glich+meinen%2C+dieser+w%C3%A4re+f%C3%BCr+Felder+vom+Typ+varbinary+gedacht.+Letztere+werden+oft+verwendet%2C+um+Bilder+zu+speichern%2C+da+sie+mit+der+Gr%C3%B6%C3%9Fenangabe+%22max%22+wesentlich+flexibler%2C+als+binary+sind%2C+das+auf+8000+Bytes+beschr%C3%A4nkt+ist.+SqlBinary+ist+jedoch+f%C3%BCr+binary+gedacht%2C+w%C3%A4hrend+SqlBytes+eine+Ansammlung+von+Bytes+meint%2C+die+beliebig+gro%C3%9F+sein+kann+%28im+Rahmen+des+SQL-Servers+nat%C3%BCrlich%29.+Eine+vollst%C3%A4ndige+Liste+der+Typ-Mappings+findet+man+hier.%0D%0A%0D%0ADer+Rest+ist+offensichtlicher+.NET-Code+und+wir+k%C3%B6nnen+die+Solution+nun+ver%C3%B6ffentlichen.+Wichtig+hierbei+ist+eigentlich+nur%2C+dass+die+oben+beschriebenen+Vorbedingungen+auf+SQL-Server-+und+Visual-Studio-Seite+alle+erf%C3%BCllt+sind.+Im+Visual+Studio+kann+man+nun+%C3%BCber+den+Menupunkt+%22Erstellen%22+und+dort+%22Projekt+ver%C3%B6ffentlichen%22+die+%C3%9Cbertragung+auf+die+zu+Beginn+ausgew%C3%A4hlte+SQL-Verbindung+starten.%0D%0A%0D%0ADie+Nutzung+ist+auch+hier+denkbar+einfach%3A%0D%0A%0D%0A%5Bsql+title%3D%22Listing+5%3A+Tabelle+anlegen+und+Test-Eintrag+erstellen%22%5D%0D%0ASP_CONFIGURE+%26quot%3Bclr_enable%26quot%3B%2C+1%0D%0ARECONFIGURE%0D%0AALTER+DATABASE+%7BDBNAME%7D+SET+TRUSTWORTHY+ON%0D%0AGO%0D%0AUSE+%7BDBNAME%7D%0D%0AGO%0D%0ACREATE+TABLE+%5BPictures%5D%0D%0A%28%5BImageData%5D+%5Bvarbinary%5D%28max%29+NULL%29+%0D%0AON+%5BPRIMARY%5D%0D%0AGO%0D%0AINSERT+INTO+Pictures+%28ImageData%29+VALUES+%28GetImageBytes%28%27C%3A%5Ctemp%5Ctest.jpg%27%29%29%3B%0D%0A%5B%2Fsql%5D%0D%0AAusblick%0D%0AIn+einem+Folge-Artikel+m%C3%B6chte+ich+Performance-Gesichtspunkte+der+Nutzung+von+.NET+CLR+im+SQL-Server+beleuchten.&amp;tags=C%23%2CSQL%2CSQL+Server%2CVisual+Studio%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Zufalls-Foreign-Key in SQL Server</title>
		<link>http://www.codingfreaks.de/2011/12/01/zufalls-foreign-key-in-sql-server/</link>
		<comments>http://www.codingfreaks.de/2011/12/01/zufalls-foreign-key-in-sql-server/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 13:53:56 +0000</pubDate>
		<dc:creator>sprinter</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.codingfreaks.de/?p=838</guid>
		<description><![CDATA[TweetManchmal schreibt das Leben einem Blogger die Artikel in die Hände. Eben gerade hatte ich bei einem Kunden das Problem, dass zum Betanken einer normalisierten Datenbank mit Beispieldaten die FK-Werte bekannt sein müssten, um die Parent-Tabellen mit Werten zu versehen. Daher habe ich mir eine UDF gebaut, die das für mich erledigt. Wichtig! Mein Ansatz [...]]]></description>
		<wfw:commentRss>http://www.codingfreaks.de/2011/12/01/zufalls-foreign-key-in-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=codingfreaks&amp;url=http%3A%2F%2Fwww.codingfreaks.de%2F2011%2F12%2F01%2Fzufalls-foreign-key-in-sql-server%2F&amp;language=de_DE&amp;category=text&amp;title=Zufalls-Foreign-Key+in+SQL+Server&amp;description=Manchmal+schreibt+das+Leben+einem+Blogger+die+Artikel+in+die+H%C3%A4nde.+Eben+gerade+hatte+ich+bei+einem+Kunden+das+Problem%2C+dass+zum+Betanken+einer+normalisierten+Datenbank+mit+Beispieldaten+die+FK-Werte+bekannt+sein+m%C3%BCssten%2C+um+die+Parent-Tabellen+mit+Werten+zu+versehen.+Daher+habe+ich+mir+eine+UDF+gebaut%2C+die+das+f%C3%BCr+mich+erledigt.%0D%0A%0D%0A%0D%0A%0D%0AWichtig%21+Mein+Ansatz+funktioniert+nur+dann%2C+wenn+das+Feld+%22Id%22+in+der+Zieltabelle+vorhanden+ist+und+dieses+per+AutoIncrement+l%C3%BCckelnlos+bef%C3%BCllt+wird%21%21%21+Das+Feld+kann+man+gern+umbenennen%2C+die+andere+Bedingung+ist+einfach+Konvention%21%0D%0A%0D%0AAngenommen%2C+man+hat+eine+das+folgende+Konstrukt+im+SQL-Server+erstellt%3A%0D%0A%0D%0A%0D%0A%0D%0AJetzt+m%C3%B6chte+man+seine+Arbeit+ein%C2%A0+wenig+testen+und+entwirft+ein+Script%2C+dass+zun%C3%A4chst+einmal+1000+Adressen+in+Addresses+schiebt.+Nun+m%C3%B6chte+man+1000+Personen+in+Persons+bef%C3%B6rdern+und+stellt+fest%2C+dass+das+nicht+so+einfach+geht%2C+weil+man+ja+nicht+wei%C3%9F%2C+welche+IDs+aus+Addresses+man+verwenden+kann.%0D%0A%0D%0AF%C3%BCr+solche+F%C3%A4lle+habe+ich+nun+eine+Stored+Procedure%2C+die+mit+folgendem+Script+in+eine+beliebige+eigene+Datenbank+eingebaut+werden+kann%3A%0D%0A%0D%0A%5Bsql%5D%0D%0ACREATE+PROCEDURE+%5Bdbo%5D.%5BGetRandomId%5D%0D%0A%40TableName+NVARCHAR%28200%29%2C%0D%0A%40Result+BIGINT+OUT%0D%0AAS%0D%0ADECLARE+%40maxVal+bigint%3B%0D%0ADECLARE+%40minVal+bigint%3B%0D%0ADECLARE+%40sqlMax+NVARCHAR%28max%29%3B%0D%0ADECLARE+%40sqlMin+NVARCHAR%28max%29%3B%0D%0ADECLARE+%40params+nvarchar%284000%29%3B%0D%0ABEGIN%0D%0ASET+%40sqlMax+%3D+%27SELECT+%40max+%3D+MAX%28ID%29+FROM+%27+%2B+%40TableName+%2B+%27%3B%27%3B%0D%0ASET+%40sqlMin+%3D+%27SELECT+%40min+%3D+MIN%28ID%29+FROM+%27+%2B+%40TableName+%2B+%27%3B%27%3B%0D%0A%0D%0ASET+%40params+%3D+%27%40max+BIGINT+OUT%27%3B%0D%0AEXEC+sp_executesql+%40sqlMax%2C+%40params%2C+%40max+%3D+%40maxVal+OUTPUT%3B%0D%0ASET+%40params+%3D+%27%40min+BIGINT+OUT%27%3B%0D%0AEXEC+sp_executesql+%40sqlMin%2C+%40params%2C+%40min+%3D+%40minVal+OUTPUT%3B%0D%0A%0D%0ASET+%40Result+%3D+CONVERT%28BIGINT%2C+%40minVal+%2B+%28%28%40maxVal+-+%40minVal+-+1%29+%2A+RAND%28%29+%2B+1%29%2C+0%29%0D%0AEND%0D%0A%5B%2Fsql%5D%0D%0A%0D%0ADie+Prozedur+kann+%C3%BCber%0D%0A%0D%0A%5Bsql%5D%0D%0ADECLARE+%40RC+int%0D%0ADECLARE+%40TableName+nvarchar%28200%29+%3D+%27Addresses%27%0D%0ADECLARE+%40Result+bigint%0D%0AEXECUTE+%40RC+%3D+%5BAccessTest%5D.%5Bdbo%5D.%5BGetRandomId%5D%0D%0A%40TableName%0D%0A%2C%40random%0D%0A%2C%40Result+OUTPUT%3B%0D%0APRINT+%40Result%0D%0A%5B%2Fsql%5D%0D%0A%0D%0Aaufgerufen+werden.%0D%0AEine+benutzerdefinierte+Funktion+kommt+leider+nicht+in+Betracht%2C+weil+sie+nur+deterministische+Elemente+enthalten+darf+und+wir+einige+nicht-deterministische+%28RAND%28%29%2C+EXEC%29+einsetzen.&amp;tags=SQL%2CSQL+Server%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Tool für MSDN-Abonnements</title>
		<link>http://www.codingfreaks.de/2011/11/28/tool-fur-msdn-abonnements/</link>
		<comments>http://www.codingfreaks.de/2011/11/28/tool-fur-msdn-abonnements/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 21:23:51 +0000</pubDate>
		<dc:creator>sprinter</dc:creator>
				<category><![CDATA[codingfreaks]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.codingfreaks.de/?p=827</guid>
		<description><![CDATA[TweetIch habe mich schon oft darüber geärgert, dass man als MSDN-Abonement eher schlecht auf seine Keys zugreifen kann. Entweder, man bemüht die nicht immer schnelle Subscription-Seite der MSDN oder man lädt sich die Software-Schlüssel als XML herunter und sucht darin per Strg + F. Damit das in Zukunft etwas angenehmer von statten geht, hat codingfreaks [...]]]></description>
		<wfw:commentRss>http://www.codingfreaks.de/2011/11/28/tool-fur-msdn-abonnements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=codingfreaks&amp;url=http%3A%2F%2Fwww.codingfreaks.de%2F2011%2F11%2F28%2Ftool-fur-msdn-abonnements%2F&amp;language=de_DE&amp;category=text&amp;title=Tool+f%C3%BCr+MSDN-Abonnements&amp;description=Ich+habe+mich+schon+oft+dar%C3%BCber+ge%C3%A4rgert%2C+dass+man+als+MSDN-Abonement+eher+schlecht+auf+seine+Keys+zugreifen+kann.+Entweder%2C+man+bem%C3%BCht+die+nicht+immer+schnelle+Subscription-Seite+der+MSDN+oder+man+l%C3%A4dt+sich+die+Software-Schl%C3%BCssel+als+XML+herunter+und+sucht+darin+per+Strg+%2B+F.+Damit+das+in+Zukunft+etwas+angenehmer+von+statten+geht%2C+hat+codingfreaks+eine+kleine+App+geschrieben.%0D%0A%0D%0ADownload+MSDNKeys_1_0_1_28.zip%0D%0AVorbemerkungen%0D%0AAls+jahrelanger+MSDN-Abonnent+war+ich+es+einfach+leid%2C+immer+wieder+die+gleichen+Arbeitsschritte+zu+unternehmen%2C+um+an+meine+Keys+f%C3%BCr+Windows%2C+Office+usw.+heran+zu+kommen.+Pl%C3%B6tzlich+stellte+ich+mir+die+Frage%2C+warum+ich+mir+als+Programmierer+eigentlich+nicht+einfach+selbst+ein+kleines+Tool+schreibe+und+zack%2C+hier+bin+ich+nun.%0D%0AMSDNKeys%0D%0A%C3%9Cber+die+Sch%C3%B6nheit+des+Namens+k%C3%B6nnte+man+sicherlich+streiten+aber+ich+hatte+einfach+keine+Lust%2C+eine+halbe+Marketing-Aktion+zu+starten.%0D%0A%0D%0ADas+Tool+braucht+nicht+installiert+zu+werden%2C+l%C3%A4uft+auch+vom+USB-Stick+und+basiert+auf+dem+.NET-Framework+4.0.+Einfach+die+EXE-Datei+starten%2C+%C3%BCber+%22%C3%96ffnen%22+eine+keys.xml+von+MSDN+ausw%C3%A4hlen+und+dann+bequem+browsen.%0D%0A%0D%0AWir+haben+das+meiste+bereits+in+Deutsch+und+Englisch+%C3%BCbersetzt.+Rest+kommt+bald.%0D%0A%0D%0AAls+kleines+Zusatz-Gimmick+haben+wir+eine+Schnellsuche+nach+Anwendungs-Namen+am+oberen+Ende+untergebracht.+Links+erscheinen+immer+die+Produkte%2C+rechts+oben+eine+Liste+der+f%C3%BCr+das+links+markierte+Produkt+verf%C3%BCgbaren+Keys+und+darunter+der+eigentliche+Key+zum+Rauskopieren%3A%0D%0A%0D%0A%0D%0A%0D%0ABeim+n%C3%A4chsten+Programmstart+merkt+sich+das+Programm+die+zuletzt+ge%C3%B6ffnete+Datei+und+versucht%2C+sie+wieder+zu+benutzen.%0D%0AHintergrund+zur+Technik%0D%0AWir+w%C3%A4ren+ja+nicht+codingfreaks%2C+wenn+wir+nicht+ein+wenig+ins+Detail+zur+verwendeten+Technik+gehen+w%C3%BCrden.+Das+Tool+basiert+auf+WPF+%28Windows+Presentation+Foundation%29+und+nutzt+das+MVVM-Entwurfsmuster+%28model-view-viewmodel%29+%C3%BCber+das+MvvmLight-Framework.+Intern+ist+das+Tools+als+2-Schicht-Architektur+umgesetzt.+Neben+dem+WPF-UI+gibt+es+noch+einen+Logik-Layer%2C+der+sich+darum+k%C3%BCmmert%2C+die+XML-Dateien+einzulesen+und+auf+ein+kleines+Objektmodell+zu+mappen.+Wir+haben+vor+allem+auf+die+strikte+Einhaltung+von+Entwurfsmustern+geeinigt+und+wollen+uns+selbst+auch+zeigen%2C+dass+man+sauber+mehrschichtige+Apps+mit+WPF+und+MVVM+schreiben+kann.%0D%0A%0D%0AWir+hoffen%2C+ein+n%C3%BCtzliches+Tool+geschaffen+zu+haben+und+w%C3%BCnschen+viel+Spa%C3%9F%21&amp;tags=Tools%2Cblog" type="text/html" />
	</item>
		<item>
		<title>T4 für WMI-Zugriff</title>
		<link>http://www.codingfreaks.de/2011/11/22/t4-fur-wmi-zugriff/</link>
		<comments>http://www.codingfreaks.de/2011/11/22/t4-fur-wmi-zugriff/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 17:17:33 +0000</pubDate>
		<dc:creator>sprinter</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Projekt]]></category>
		<category><![CDATA[T4]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.codingfreaks.de/?p=818</guid>
		<description><![CDATA[TweetJeder, der schon einmal auf WMI (Windows Management Instrumentation) zugreifen musste, wird wahrscheinlich, wie ich auch, mit gemischten Gefühlen aus diesem Todo herausgegangen sein. Zum einen ist es echt gut, dass es WMI und den .NET-Namespace System.Management überhaupt gibt, andererseits ist die Programmierung sehr aufwendig. Download WMI-T4 UPDATE Wie ich gerade in Erfahrung gebracht habe, [...]]]></description>
		<wfw:commentRss>http://www.codingfreaks.de/2011/11/22/t4-fur-wmi-zugriff/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=codingfreaks&amp;url=http%3A%2F%2Fwww.codingfreaks.de%2F2011%2F11%2F22%2Ft4-fur-wmi-zugriff%2F&amp;language=de_DE&amp;category=text&amp;title=T4+f%C3%BCr+WMI-Zugriff&amp;description=Jeder%2C+der+schon+einmal+auf+WMI+%28Windows+Management+Instrumentation%29+zugreifen+musste%2C+wird+wahrscheinlich%2C+wie+ich+auch%2C+mit+gemischten+Gef%C3%BChlen+aus+diesem+Todo+herausgegangen+sein.+Zum+einen+ist+es+echt+gut%2C+dass+es+WMI+und+den+.NET-Namespace+System.Management+%C3%BCberhaupt+gibt%2C+andererseits+ist+die+Programmierung+sehr+aufwendig.%0D%0A%0D%0A%0D%0A%0D%0ADownload+WMI-T4%0D%0AUPDATE%0D%0AWie+ich+gerade+in+Erfahrung+gebracht+habe%2C+hat+Microsoft+ein+Tool+in+Visual+Studio-Installationen+integriert%3A+Mgmtclassgen.exe.+Der+Geier+wei%C3%9F%2C+warum+sie+darum+so+ein+Geheimnis+machen.+Meiner+Meinung+nach+h%C3%A4tte+da+ein+Kontext-Menueintrag+im+Servereintrag+einiges+an+dummer+Arbeit+ersparen+k%C3%B6nnen.+Aber+hinterher+ist+man+immer+schlauer.+F%C3%BCr+manche+Einsatzgebiete+wird+mein+T4+aber+vielleicht+nach+wie+vor+mehr+Sinn+oder+Eleganz+mitbringen.+Seht+es+Euch+trotzdem+an+%3A-%29.%0D%0AEinleitung+in+WMI.NET%0D%0AWMI+ist+eine+nicht+auf+.NET+beschr%C3%A4nkte+Windows-API-Schicht%2C+die+es+jedem+Entwickler+erlaubt%2C+auf+bestimmte+Informationen+zuzugreifen.+Hierbei+handelt+es+sich+um+Hardware-Informationen%2C+Infos+zu+gestarteten+Diensten%2C+zu+installierter+Software+usw.+WMI+ist+letztlich+ein+Wrapper%2C+der+es+erleichtert%2C+auf+diese+normalerweise+per+Win-API+verf%C3%BCgbaren+Informationen+zuzugreifen.%0D%0A%0D%0AAus+.NET-Sicht+wird+WMI+nochmals+im+Namespace+System.Management+gekapselt.+Hier+werden+die+WMI-Zugriffe+durchgef%C3%BChrt.+In+Richtung+.NET-Programm+werden+dann+aber+.NET-Klassen+und+-Typen+bereit+gestellt.%0D%0A%0D%0AEine+typische+WMI-Abfrage+im+klassischen+.NET-Stil+sieht+wie+Listing+1+aus%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+1%3A+Klassische+Abfrage+auf+WMI%22%5D%0D%0Avar+searcher+%3D+new+ManagementObjectSearcher%28%26quot%3BSELECT+%2A+FROM+Win32_NetworkAdapter%26quot%3B%29%3B%0D%0Aforeach+%28var+nic+in+searcher.Get%28%29%29%0D%0A++++Console.WriteLine%28nic%5B%26quot%3BMACAddress%26quot%3B%5D%29%3B%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0ADas+Ergebnis+ist+eine+Konsolen-Ausgabe%2C+die+pro+Zeile+die+MAC-Adresse+einer+Netzwerkkarte+ausgibt.%0D%0A%0D%0ANeben+Win32_NetworkAdapter+gibt+es+noch+weitere+429+WMI-Klassen.+Ich+habe+hier+eine+komplette+Liste+aller+WMI-Klassen+als+Text-Datei+bereit+gestellt.+Jede+WMI-Klasse+bietet+ihr+ganz+eigenes+Set+an+Eigenschaften+an.+Um+alle+Eigenschaften+einer+Klasse+zu+durchlaufen%2C+kann+man+die+Eigenschaft+%22Properties%22+nutzen%2C+um+heraus+zu+bekommen%2C+was+man+anstelle+von+MACAddress+im+Listing+1+noch+so+alles+abfragen+k%C3%B6nnte.+Je+nach+Betriebssystem-Umgebung+kann+sich+diese+Liste+erweitern.%0D%0ADer+bequeme+Weg%0D%0ASo+weit%2C+so+gut.+Was+aber+ist+daran+verbesserungsw%C3%BCrdig%3F+Ganz+einfach%21+Es+ist+nicht+ganz+.NET.+Als+.NET-Entwickler+h%C3%A4tte+ich+eine+Klasse+mit+Namen+Win32NetworkAdapter+erwartet%2C+die+mir+Eigenschaften+bietet.+Hier+aber+bekomme+ich+durch+die+Methode+Get%28%29+des+ManagementObjectSearchers+ein+Objekt+vom+Typ+ManagementBaseObject.+Dieser+Typ+ist+generisch+f%C3%BCr+alle+Ger%C3%A4teklassen.+Und+genau+hier+liegt+das+Problem+f%C3%BCr+einen+.NET-Entwickler.+Es+wirkt+einfach+unsch%C3%B6n%2C+wenn+man+nicht+einfach+%22nic.MACAddress%22+schreiben+kann.%0D%0A%0D%0AUnd+schon+war+die+neue+Idee+f%C3%BCr+codingfreaks+geboren%2C+denn+genau+f%C3%BCr+solche+Szenarien+wurde+eine+Technologie+f%C3%BCr+das+Studio+entwickelt%3A+T4.+T4+ist+letztlich+Code%2C+der+selbst+Code+generiert+und+so+habe+ich+mich+entschlossen+ein+T4+f%C3%BCr+die+erzeugung+spezifischer+WMI-Klassen+zu+schreiben.%0D%0ADas+WMI-T4%0D%0ADas+T4+kann+als+ganz+normale+Datei+geladen+und+in+ein+Projekt+kopiert+werden%3A%0D%0A%0D%0A%0D%0A%0D%0ADas+T4+braucht+au%C3%9Ferdem+eine+ganz+normale+Textdatei+mit+dem+Namen+%22Classes.txt%22+im+Projekt.+Diese+Textdatei+steuert+sp%C3%A4ter+die+Code-Generierung+und+beinhaltet+sp%C3%A4ter+pro+Zeile+den+Namen+einer+WMI-Klasse+aus+der+oben+verlinkten+ClassesComplete.txt.+Hier+ein+Beispiel%3A%0D%0A%0D%0A%5Bshell%5D%0D%0A+Win32_VideoController%0D%0A+Win32_DiskDrive%0D%0A+Win32_NetworkAdapter%0D%0A+%5B%2Fshell%5D%0D%0A%0D%0ADiese+Einstellung+w%C3%BCrde+das+T4+anweisen%2C+Klassen+f%C3%BCr+3+WMI-Klassen+zu+erzeugen.+Sobald+man+das+Projekt+startet+oder+per+Rechtsklick+auf+die+tt-Datei+im+VS+auf+%22Benutzerdefiniertes+Tool+ausf%C3%BChren%22+klickt%2C+wird+als+angeh%C3%A4ngte+Datei+an+die+WmiHelper.tt+die+WmiHelper.cs+erzeugt%3A%0D%0A%0D%0A%0D%0A%0D%0ADiese+Datei+enth%C3%A4lt+den+durch+das+T4+generierten+Code+und+steht+nun+im+Programm+zur+Verf%C3%BCgung.+Ich+kann+also+den+Code+aus+Listing+1+nun+wie+folgt+schreiben%3A%0D%0A%0D%0A%5Bcsharp+title%3D%22Listing+2%3A+WMI-Zugriff+mit+dem+T4-Code%22%5D%0D%0Aforeach+%28var+netWorkCard+in+WmiHelper.Win32NetworkAdapters%29%0D%0A++++Console.WriteLine%28netWorkCard.MACAddress%29%3B%0D%0A%5B%2Fcsharp%5D%0D%0A%0D%0ADas+sieht+schon+eher+nach+.NET+aus.+Mit+anderen+Worten%3A+Man+braucht+nur+2+Text-Dateien+in+das+Projekt+einbinden+und+dann+in+der+Classes.txt+festlegen%2C+gegen+welche+WMI-Klassen+man+programmieren+m%C3%B6chte.+Den+Rest+erledigt+das+T4+und+man+kann+die+statische+Klasse+WmiHelper+nutzen%2C+um+auf+WMI+zuzugreifen.%0D%0A%0D%0ADas+T4+steht+zur+freien+Verf%C3%BCgung+und+kann+gern+angepasst+werden.+Sch%C3%B6n+w%C3%A4re+es%2C+wenn+Ihr+den+Header-Hinweis+auf+uns+drin+lassen+w%C3%BCrdet%2C+aber+kontrollieren+k%C3%B6nnen+wir+es+sowieso+nicht.+Also+macht%2C+wie+Ihr+wollt+%3A-%29.&amp;tags=C%23%2CProjekt%2CT4%2CTools%2CVisual+Studio%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Ständiger Fehler in WcfTestClient</title>
		<link>http://www.codingfreaks.de/2011/11/16/standiger-fehler-in-wcftestclient/</link>
		<comments>http://www.codingfreaks.de/2011/11/16/standiger-fehler-in-wcftestclient/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 11:19:23 +0000</pubDate>
		<dc:creator>sprinter</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Errors]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://www.codingfreaks.de/?p=811</guid>
		<description><![CDATA[TweetSeit einiger Zeit habe ich beim Starten eines WCF-Projektes aus dem Visual Studio heraus immer wieder eine Fehlermeldung die IMetadataExchange-Bereitstellung betreffend erhalten. Nach langer und verzweifelter Suche habe ich dieses Problem nun gelöst. Erstmal zum Fehler an sich. Ich erstelle einen ganz normalen WCF-Dienst mit der Visual-Studio-Projektvorlage und drücke gleich als erstes F5. Es startet, [...]]]></description>
		<wfw:commentRss>http://www.codingfreaks.de/2011/11/16/standiger-fehler-in-wcftestclient/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=codingfreaks&amp;url=http%3A%2F%2Fwww.codingfreaks.de%2F2011%2F11%2F16%2Fstandiger-fehler-in-wcftestclient%2F&amp;language=de_DE&amp;category=text&amp;title=St%C3%A4ndiger+Fehler+in+WcfTestClient&amp;description=Seit+einiger+Zeit+habe+ich+beim+Starten+eines+WCF-Projektes+aus+dem+Visual+Studio+heraus+immer+wieder+eine+Fehlermeldung+die+IMetadataExchange-Bereitstellung+betreffend+erhalten.+Nach+langer+und+verzweifelter+Suche+habe+ich+dieses+Problem+nun+gel%C3%B6st.%0D%0A%0D%0AErstmal+zum+Fehler+an+sich.+Ich+erstelle+einen+ganz+normalen+WCF-Dienst+mit+der+Visual-Studio-Projektvorlage+und+dr%C3%BCcke+gleich+als+erstes+F5.+Es+startet%2C+wie+erwartet%2C+der+WcfTestClient%2C+nur+dass+nun+als+erstes+folgendes+Fehlerfenster+erscheint%3A%0D%0A%0D%0A%0D%0A%0D%0A%22Der+Vertrag+%27IMetatadataExchange%27+in+der+Clientkonfiguration...%22.+Was+soll+mir+das+sagen%3F+Nach+einigem+googeln+und+probieren+tauchte+irgendwann+das+Stichwort+%22Azure%22+auf.+Ich+hatte+tats%C3%A4chlich+das+Azure+SDK+auf+meiner+Maschine+installiert+und+nun+ist+das+Problem%2C+dass+dies+eine+%C3%84nderung+an+der+machine.config+vornimmt.+Der+folgende+Abschnitt+ist+auf+meinem+Rechner+dazu+gekommen%3A%0D%0A%0D%0A%5Bxml%5D%0D%0A%26lt%3Bclient%26gt%3B%0D%0A%26lt%3Bendpoint+address%3D%26quot%3B%26quot%3B+binding%3D%26quot%3BnetTcpRelayBinding%26quot%3B+contract%3D%26quot%3BIMetadataExchange%26quot%3B%0D%0Aname%3D%26quot%3Bsb%26quot%3B+%2F%26gt%3B%0D%0A%26lt%3Bmetadata%26gt%3B%0D%0A%26lt%3BpolicyImporters%26gt%3B%0D%0A%26lt%3Bextension+type%3D%26quot%3BSystem.ServiceModel.Channels.ContextBindingElementImporter%2C+System.ServiceModel%2C+Version%3D4.0.0.0%2C+Culture%3Dneutral%2C+PublicKeyToken%3Db77a5c561934e089%2C+processorArchitecture%3DMSIL%26quot%3B+%2F%26gt%3B%0D%0A%26lt%3Bextension+type%3D%26quot%3BMicrosoft.ServiceBus.Description.TcpRelayTransportBindingElementImporter%2C+Microsoft.ServiceBus%2C+Version%3D1.0.0.0%2C+Culture%3Dneutral%2C+PublicKeyToken%3D31bf3856ad364e35%26quot%3B+%2F%26gt%3B%0D%0A%26lt%3Bextension+type%3D%26quot%3BMicrosoft.ServiceBus.Description.HttpRelayTransportBindingElementImporter%2C+Microsoft.ServiceBus%2C+Version%3D1.0.0.0%2C+Culture%3Dneutral%2C+PublicKeyToken%3D31bf3856ad364e35%26quot%3B+%2F%26gt%3B%0D%0A%26lt%3Bextension+type%3D%26quot%3BMicrosoft.ServiceBus.Description.OnewayRelayTransportBindingElementImporter%2C+Microsoft.ServiceBus%2C+Version%3D1.0.0.0%2C+Culture%3Dneutral%2C+PublicKeyToken%3D31bf3856ad364e35%26quot%3B+%2F%26gt%3B%0D%0A%26lt%3B%2FpolicyImporters%26gt%3B%0D%0A%26lt%3BwsdlImporters%26gt%3B%0D%0A%26lt%3Bextension+type%3D%26quot%3BSystem.ServiceModel.Channels.ContextBindingElementImporter%2C+System.ServiceModel%2C+Version%3D4.0.0.0%2C+Culture%3Dneutral%2C+PublicKeyToken%3Db77a5c561934e089%2C+processorArchitecture%3DMSIL%26quot%3B+%2F%26gt%3B%0D%0A%26lt%3Bextension+type%3D%26quot%3BMicrosoft.ServiceBus.Description.StandardRelayBindingImporter%2C+Microsoft.ServiceBus%2C+Version%3D1.0.0.0%2C+Culture%3Dneutral%2C+PublicKeyToken%3D31bf3856ad364e35%26quot%3B+%2F%26gt%3B%0D%0A%26lt%3Bextension+type%3D%26quot%3BMicrosoft.ServiceBus.Description.TcpRelayTransportBindingElementImporter%2C+Microsoft.ServiceBus%2C+Version%3D1.0.0.0%2C+Culture%3Dneutral%2C+PublicKeyToken%3D31bf3856ad364e35%26quot%3B+%2F%26gt%3B%0D%0A%26lt%3Bextension+type%3D%26quot%3BMicrosoft.ServiceBus.Description.HttpRelayTransportBindingElementImporter%2C+Microsoft.ServiceBus%2C+Version%3D1.0.0.0%2C+Culture%3Dneutral%2C+PublicKeyToken%3D31bf3856ad364e35%26quot%3B+%2F%26gt%3B%0D%0A%26lt%3Bextension+type%3D%26quot%3BMicrosoft.ServiceBus.Description.OnewayRelayTransportBindingElementImporter%2C+Microsoft.ServiceBus%2C+Version%3D1.0.0.0%2C+Culture%3Dneutral%2C+PublicKeyToken%3D31bf3856ad364e35%26quot%3B+%2F%26gt%3B%0D%0A%26lt%3B%2FwsdlImporters%26gt%3B%0D%0A%26lt%3B%2Fmetadata%26gt%3B%0D%0A%26lt%3B%2Fclient%26gt%3B%0D%0A%5B%2Fxml%5D%0D%0A%0D%0AAha%21+Azure+biegt+also+die+IMetadataExchange-Services+auf+netTcpRelayBinding+um.+Damit+kann+mein+wsHttp-basierter+Ansatz+nat%C3%BCrlich+nicht+viel+anfangen.+Meine+L%C3%B6sung+ist+nun+relativ+simpel.+Ich+kommentiere+den+kompletten+%26lt%3Bclient%26gt%3B-Block+aus%2C+indem+ich+vor+%26lt%3Bclient%26gt%3B+ein+%22%26lt%3B%21--%22+und+hinter+%26lt%3B%2Fclient%26gt%3B+%22--%26gt%3B%22+setze.%0D%0AMan+muss+nur+daran+denken%2C+die+%C3%84nderungen+ggf.+auch+in+den+anderen+machine.configs+vorzunehmen.+Die+Ordner+sind+ggf%3A%0D%0A%0D%0A%0D%0A%0D%0AFramework%0D%0AOrdner%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A2.0%0D%0A%25WINDIR%25%5CMicrosoft.NET%5CFramework%5Cv2.0.50727%5CCONFIG%0D%0A%0D%0A%0D%0A4.0%0D%0A%25WINDIR%25%5CMicrosoft.NET%5CFramework%5Cv4.0.30319%5CConfig%0D%0A%0D%0A%0D%0A%0D%0AInsgesamt+gesehen+hinterl%C3%A4sst+die+Vorgehensweise+des+Setups+einen+eher+faden+Beigeschmack.+Sowas+sollte+MS+eigentlich+besser+k%C3%B6nnen+und+ich+w%C3%BCrde+es+gar+nicht+weiter+erw%C3%A4hnen%2C+wenn+MS+selbst+nicht+immer+wieder+proklamieren+w%C3%BCrde%2C+dass+man+beim+Setup+nur+in+dringenden+F%C3%A4llen+an+solchen+Stellen+eingreifen+sollte.&amp;tags=C%23%2CTools%2CVisual+Studio%2CWCF%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>

