<?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>Fabse-on-Blog &#187; coding</title>
	<atom:link href="http://blog.fabse.net/category/coding/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.fabse.net</link>
	<description>Was bewegt mich; was nicht!</description>
	<lastBuildDate>Wed, 28 Jul 2010 17:20:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>BizTalk: Sending emails with attachments using a pipeline component</title>
		<link>http://blog.fabse.net/2010/06/25/biztalk-sending-emails-with-attachments-using-a-pipeline-component/</link>
		<comments>http://blog.fabse.net/2010/06/25/biztalk-sending-emails-with-attachments-using-a-pipeline-component/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 06:33:02 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[BizTalk]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/?p=456</guid>
		<description><![CDATA[There are several locations on the web where you are told how to send emails and also how to send attachments with them as well. I had a working piece of code doing exactly this but I had to redo it using a pipeline componentan instead of an orchestration. Everything is straightforward. If you had [...]<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p>There are <a href="http://www.tech-archive.net/Archive/BizTalk/microsoft.public.biztalk.general/2006-12/msg00141.html">several locations</a> on the web where you are told how to send emails and also how to send attachments with them as well.</p>
<p>I had a working piece of code doing exactly this but I had to redo it using a pipeline componentan instead of an orchestration.</p>
<p>Everything is straightforward. If you had set the context value in your orchestration like this:</p>
<p>EmailOut(SMTP.MessagePartsAttachments) = 2;</p>
<p>you would take a look in <a href="http://msdn.microsoft.com/en-us/library/smtp.messagepartsattachments%28BTS.10%29.aspx">the msdn</a> to get the values right and then translate it to the following code in your pipeline component:</p>
<p>inmsg.Context.Write(&#8220;MessagePartsAttachments&#8221;,<br />
&#8220;http://schemas.microsoft.com/BizTalk/2003/smtp-properties&#8221;, 2);</p>
<p>I did this with every context value and tested it. It worked well but there was no attachment?! But there was also no error!</p>
<p>Finding the solution took me more time then I am willing to admit&#8230;</p>
<p>If you take a sharp look in the MSDN then you might find this:</p>
<p>[SerializableAttribute]<br />
[GuidAttribute("9EE763F5-ECE7-42f6-BE97-38EA64FB7607")]<br />
[IsSensitivePropertyAttribute(false)]<br />
[PropertyGuidAttribute("9EE763F5-ECE7-42f6-BE97-38EA64FB7607")]<br />
[PropertyTypeAttribute("MessagePartsAttachments",<br />
"http://schemas.microsoft.com/BizTalk/2003/smtp-properties",<br />
<strong>"unsignedInt", "System.UInt32"</strong>)]<br />
public sealed class MessagePartsAttachments : MessageContextPropertyBase</p>
<p>I was desperate at best and tried everything and this one worked:</p>
<p>inmsg.Context.Write(&#8220;MessagePartsAttachments&#8221;,<br />
&#8220;http://schemas.microsoft.com/BizTalk/2003/smtp-properties&#8221;, <strong>(UInt32)</strong>2);</p>
<p>You cannot see any difference at all if you take a look at a suspended/tracked message but this was the cause of the missing attachments. I hope this might save you some time!</p>
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2010/06/25/biztalk-sending-emails-with-attachments-using-a-pipeline-component/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ich dachte mir gleich, dass da was faul ist!</title>
		<link>http://blog.fabse.net/2010/03/24/ich-dachte-mir-gleich-dass-da-was-faul-ist/</link>
		<comments>http://blog.fabse.net/2010/03/24/ich-dachte-mir-gleich-dass-da-was-faul-ist/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 19:01:12 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[BizTalk]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/2010/03/24/ich-dachte-mir-gleich-dass-da-was-faul-ist/</guid>
		<description><![CDATA[Die anderen Überladungen von Match() tun dann aber ihren Job richtig… --- Unterst&#252;tze mich und meinen Blog und kauf dir was Nettes (&#252;ber diesen Link)<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.fabse.net/wp-content/uploads/image33.png" rel="lightbox[453]"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.fabse.net/wp-content/uploads/image_thumb2.png" width="450" height="394" /></a> </p>
<p>Die anderen Überladungen von Match() tun dann aber ihren Job richtig…</p>
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2010/03/24/ich-dachte-mir-gleich-dass-da-was-faul-ist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Streaminhalt im Debugger</title>
		<link>http://blog.fabse.net/2010/02/17/streaminhalt-im-debugger/</link>
		<comments>http://blog.fabse.net/2010/02/17/streaminhalt-im-debugger/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 10:32:11 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[BizTalk]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Lösung]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/?p=442</guid>
		<description><![CDATA[Sitzt man mal wieder vor dem Debugger und interessiert sich, was nun eigentlich für Daten in diesem Stream stehen, dann hilft das Immediate Window. Aber selbst damit ist es mir bisher nicht unbedingt einfach gefallen. Folgendes Snippet erfüllt den Job aber als Einzeiler: File.WriteAllText("c:\\streamOut.txt", new StreamReader(meinStream).ReadToEnd()); Zu beachten ist, dass je nach Typ von meinStream [...]<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Sitzt man mal wieder vor dem Debugger und interessiert sich, was nun eigentlich für Daten in diesem Stream stehen, dann hilft das Immediate Window. Aber selbst damit ist es mir bisher nicht unbedingt einfach gefallen.</p>
<p>Folgendes Snippet erfüllt den Job aber als Einzeiler:</p>
<pre>File.WriteAllText("c:\\streamOut.txt", new StreamReader(meinStream).ReadToEnd());</pre>
<p>Zu beachten ist, dass je nach Typ von meinStream die Position anschließend zurück gesetzt werden muss oder auch, das dies gar nicht möglich ist und daher die weitere Programmausführung fehlerhaft wird.</p>
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2010/02/17/streaminhalt-im-debugger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BizTalk: Verschiedene Receives in Kombination mit Correlation Sets</title>
		<link>http://blog.fabse.net/2010/02/14/biztalk-verschiedene-receives-in-kombination-mit-correlation-sets/</link>
		<comments>http://blog.fabse.net/2010/02/14/biztalk-verschiedene-receives-in-kombination-mit-correlation-sets/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 18:38:38 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[BizTalk]]></category>
		<category><![CDATA[Lösung]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/2010/02/14/biztalk-verschiedene-receives-in-kombination-mit-correlation-sets/</guid>
		<description><![CDATA[Ausgangslage ist eine Orchestration, die eine Nachricht empfängt und auf Grundlage dieser Nachricht verschiedene Aktionen ausführt. Aus der ersten Nachricht ist auch abzuleiten, ob weitere Nachrichten empfangen werden müssen um die Aufgabe zu leisten. Ich hatte nun den Fall, dass ich neben dem schon existierenden Pfad(linker Teil der Grafik) einen zusätzlichen Fall hatte, bei dem [...]<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Ausgangslage ist eine Orchestration, die eine Nachricht empfängt und auf Grundlage dieser Nachricht verschiedene Aktionen ausführt. Aus der ersten Nachricht ist auch abzuleiten, ob weitere Nachrichten empfangen werden müssen um die Aufgabe zu leisten.</p>
<p>Ich hatte nun den Fall, dass ich neben dem schon existierenden Pfad(linker Teil der Grafik) einen zusätzlichen Fall hatte, bei dem ein Direct Receive aus der MessageBox nötig war. Kommt die Nachricht aus der MessageBox, ist (für diesen Fall) klar, dass es keine Folgenachrichten gibt.</p>
<p>Man kann eine Orchestration nun nicht nur über ein Receive-Shape starten lassen, sondern auch auch über mehrere Receives, die in einem Listen-Shape untergebracht wurden. Das hatte ich dann auch versucht.</p>
<p><a href="http://blog.fabse.net/wp-content/uploads/image32.png" rel="lightbox[441]"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.fabse.net/wp-content/uploads/image_thumb1.png" width="443" height="421" /></a> </p>
<p>Auch wenn aus logischer Sicht kein Pfad möglich ist, der vom Direct Receive zum “Receive Follower” führt, verwehrt BizTalk die Kompilierung dieser Orchestration.</p>
<p>Der Versuch, den Receive aus dem Receive Port durch einen Filter auf der MessageBox zu formulieren fruchtete ebenfalls nicht. Finales Ergebnis war, die gemeinsame Funktionalität in einer separaten Orchestration auszulagern und für den Direct Receive eine zusätzliche Orchestration zu bauen, die einen Call macht.</p>
<p>Außerdem ist die Fehlermeldung “unknown system error” auch sehr hilfreich beim Finden des eigentlichen Problems, denn eigentlich ist die Orchestration viel größer, als hier auf dem Screenshot zu sehen.</p>
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2010/02/14/biztalk-verschiedene-receives-in-kombination-mit-correlation-sets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Netter Tipp</title>
		<link>http://blog.fabse.net/2009/11/04/netter-tipp/</link>
		<comments>http://blog.fabse.net/2009/11/04/netter-tipp/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 20:31:47 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[Büroleben]]></category>
		<category><![CDATA[Erfahrungen]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/2009/11/04/netter-tipp/</guid>
		<description><![CDATA[&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Netter Tipp von Fabse.net! &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Bekommt man so Fehlermeldungen und will die googeln, dann muss man immer die lästigen 0&#215;0815-Fehlermeldungen abtippen. Aber es geht einfacher. STRG+C und man hat die Meldung in der Hand! &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Ja&#160;&#160; Nein&#160;&#160; Abbrechen&#160;&#160; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Orginaler Tipp kam von meinen Arbeitskollegen Martin! --- Unterst&#252;tze mich und meinen Blog und kauf [...]<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.fabse.net/wp-content/uploads/image31.png" rel="lightbox[432]"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.fabse.net/wp-content/uploads/image_thumb.png" width="487" height="182" /></a> </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;   <br />Netter Tipp von Fabse.net!    <br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;    <br />Bekommt man so Fehlermeldungen und will die googeln, dann muss man immer die lästigen 0&#215;0815-Fehlermeldungen abtippen. Aber es geht einfacher. STRG+C und man hat die Meldung in der Hand!    <br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;    <br />Ja&#160;&#160; Nein&#160;&#160; Abbrechen&#160;&#160; <br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Orginaler Tipp kam von meinen Arbeitskollegen Martin!</p>
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2009/11/04/netter-tipp/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Seltsamer Fehler beim Start einer Silverlight-Anwendung.</title>
		<link>http://blog.fabse.net/2009/09/09/seltsamer-fehler-beim-start-einer-silverlight-anwendung/</link>
		<comments>http://blog.fabse.net/2009/09/09/seltsamer-fehler-beim-start-einer-silverlight-anwendung/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 13:42:37 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/?p=419</guid>
		<description><![CDATA[Nach “F5” kommt erst dieses Fenster: Und dann dieses: Es handelt sich um eine Silverlight-Anwendung mit den .Net RIA Services. Bilder sind auch involviert. Der Fehler kommt, egal ob die Anwendung im Internet Explorer oder im Firefox startet, allerdings nur einmal nach einem Rebuild. Folgende Starts haben den Fehler nicht und klicke ich auf “Continue” [...]<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Nach “F5” kommt erst dieses Fenster:</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://blog.fabse.net/wp-content/uploads/image28.png" border="0" alt="image" width="423" height="172" /></p>
<p>Und dann dieses:</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ArgumentException occured: Der Kulturname &quot;uploads&quot; wird nicht unterstützt. Parametername: name" src="http://blog.fabse.net/wp-content/uploads/image29.png" border="0" alt="ArgumentException occured: Der Kulturname &quot;uploads&quot; wird nicht unterstützt. Parametername: name" width="452" height="277" /></p>
<p>Es handelt sich um eine Silverlight-Anwendung mit den .Net RIA Services. Bilder sind auch involviert. Der Fehler kommt, egal ob die Anwendung im Internet Explorer oder im Firefox startet, allerdings nur einmal nach einem Rebuild. Folgende Starts haben den Fehler nicht und klicke ich auf “Continue” funktioniert meine Anwendung auch ganz normal.</p>
<p>Ich habe schon im ganzen Projekt nach “uploads” gesucht ohne Erfolg sowie das komplette Projekt vor und nach dem ersten Start gedifft, aber auch hier keine Auffälligkeiten.</p>
<p>Ungewöhnlich ist auch, dass die Nachricht der Exception auf Deutsch ist, obwohl Visual Studio, Silverlight SDK und die .Net RIA Services auf Englisch installiert sind.</p>
<p><strong>Ich konnte das Problem bisher nicht lösen, daher die Bitte, wer was weiß, sich bei mir zu melden. Habe ich eine Lösung, werde ich ein Update schreiben.</strong></p>
<p><span id="more-419"></span></p>
<p><strong>Hier noch ein Stacktrace der Exception (Code von mir ist nicht involviert!):</strong></p>
<p style="text-align: left;">&gt;	mscorlib.dll!System.Globalization.CultureTableRecord.CultureTableRecord(string cultureName = &#8220;uploads&#8221;, bool useUserOverride) + 0x41d bytes</p>
<p style="text-align: left;">mscorlib.dll!System.Globalization.CultureTableRecord.GetCultureTableRecord(string name = &#8220;uploads&#8221;, bool useUserOverride = true) + 0xd6 bytes</p>
<p style="text-align: left;">mscorlib.dll!System.Globalization.CultureInfo.CultureInfo(string name, bool useUserOverride) + 0x2e bytes</p>
<p style="text-align: left;">System.Web.dll!System.Web.HttpServerUtility.CreateReadOnlyCultureInfo(string name = &#8220;uploads&#8221;) + 0xc9 bytes</p>
<p style="text-align: left;">System.Web.dll!System.Web.UI.Util.IsCultureName(string s) + 0&#215;49 bytes</p>
<p style="text-align: left;">System.Web.dll!System.Web.Compilation.StandardDiskBuildResultCache.FindSatelliteDirectories() + 0&#215;80 bytes</p>
<p style="text-align: left;">System.Web.dll!System.Web.Compilation.BuildManager.RegularAppRuntimeModeInitialize() + 0&#215;74 bytes</p>
<p style="text-align: left;">System.Web.dll!System.Web.Compilation.BuildManager.Initialize() + 0xf2 bytes</p>
<p style="text-align: left;">System.Web.dll!System.Web.Compilation.BuildManager.InitializeBuildManager() + 0xcd bytes</p>
<p style="text-align: left;">System.Web.dll!System.Web.HttpRuntime.HostingInit(System.Web.Hosting.HostingEnvironmentFlags hostingFlags = Default) + 0xe1 bytes</p>
<p style="text-align: left;">System.Web.dll!System.Web.Hosting.HostingEnvironment.Initialize(System.Web.Hosting.ApplicationManager appManager, System.Web.Hosting.IApplicationHost appHost, System.Web.Configuration.IConfigMapPathFactory configMapPathFactory, System.Web.Hosting.HostingEnvironmentParameters hostingParameters) + 0x26c bytes</p>
<p style="text-align: left;">[Appdomain Transition]</p>
<p style="text-align: left;">System.Web.dll!System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(string appId, System.Web.Hosting.IApplicationHost appHost, System.Web.Hosting.HostingEnvironmentParameters hostingParameters) + 0&#215;379 bytes</p>
<p style="text-align: left;">System.Web.dll!System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironmentAndReportErrors(string appId = &#8220;f2edd2c8&#8243;, System.Web.Hosting.IApplicationHost appHost, System.Web.Hosting.HostingEnvironmentParameters hostingParameters) + 0x2f bytes</p>
<p style="text-align: left;">System.Web.dll!System.Web.Hosting.ApplicationManager.GetAppDomainWithHostingEnvironment(string appId = &#8220;f2edd2c8&#8243;, System.Web.Hosting.IApplicationHost appHost, System.Web.Hosting.HostingEnvironmentParameters hostingParameters) + 0x6d bytes</p>
<p style="text-align: left;">System.Web.dll!System.Web.Hosting.ApplicationManager.CreateObjectInternal(string appId, System.Type type = {Name = &#8220;Host&#8221; FullName = &#8220;Microsoft.VisualStudio.WebHost.Host&#8221;}, System.Web.Hosting.IApplicationHost appHost, bool failIfExists = false, System.Web.Hosting.HostingEnvironmentParameters hostingParameters) + 0x3a bytes</p>
<p style="text-align: left;">System.Web.dll!System.Web.Hosting.ApplicationManager.CreateObject(string appId, System.Type type, string virtualPath, string physicalPath, bool failIfExists, bool throwOnError) + 0x8d bytes</p>
<p style="text-align: left;">System.Web.dll!System.Web.Hosting.ApplicationManager.CreateObject(string appId, System.Type type, string virtualPath, string physicalPath, bool failIfExists) + 0&#215;35 bytes</p>
<p style="text-align: left;">WebDev.WebHost.dll!Microsoft.VisualStudio.WebHost.Server.GetHost() + 0xe0 bytes</p>
<p style="text-align: left;">WebDev.WebHost.dll!Microsoft.VisualStudio.WebHost.Server.OnSocketAccept(object acceptedSocket) + 0&#215;62 bytes</p>
<p style="text-align: left;">mscorlib.dll!System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(object state) + 0x2f bytes</p>
<p style="text-align: left;">mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x6f bytes</p>
<p style="text-align: left;">mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(System.Threading._ThreadPoolWaitCallback tpWaitCallBack) + 0&#215;53 bytes</p>
<p style="text-align: left;">mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(object state) + 0&#215;59 bytes</p>
<p style="text-align: left;">
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2009/09/09/seltsamer-fehler-beim-start-einer-silverlight-anwendung/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>.Net RIA Services &#8211; kurz erkl&#228;rt</title>
		<link>http://blog.fabse.net/2009/07/27/net-ria-services-kurz-erklrt/</link>
		<comments>http://blog.fabse.net/2009/07/27/net-ria-services-kurz-erklrt/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 08:59:34 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/2009/07/27/net-ria-services-kurz-erklrt/</guid>
		<description><![CDATA[Ich hab mich etwas mit den .Net RIA Services beschäftigt und möchte nun einen groben Überblick geben. Wir stellen uns also eine 3-Schichten Architektur vor, bestehend aus Silverlight 3, ASP.net und einem quasi beliebigem Data Access Layer. Der Data Access Layer erzeugt aus einer Datenbank Objekte, welche nun in der mittleren Schicht sind (im Bild [...]<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.fabse.net/wp-content/uploads/image24.png" rel="lightbox[394]"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.fabse.net/wp-content/uploads/image-thumb9.png" width="450" height="236" /></a> </p>
<p>Ich hab mich etwas mit den .Net RIA Services beschäftigt und möchte nun einen groben Überblick geben. Wir stellen uns also eine 3-Schichten Architektur vor, bestehend aus Silverlight 3, ASP.net und einem quasi beliebigem Data Access Layer.</p>
<p>Der Data Access Layer erzeugt aus einer Datenbank Objekte, welche nun in der mittleren Schicht sind (im Bild “Order”) und bietet auch die Standard CRUD-Funktionalität. In der Regel kann man diese Objekte nicht ohne weiteres an den Client übergeben.</p>
<p>Hier kommen nun die .Net RIA Services ins Spiel und generieren in der Silverlight-Applikation eine identische Klasse und ein asynchrones Kontextobjekt, um mit der Serviceschicht zu interagieren.</p>
<p>Alles was man noch tun muss, ist in der Mittelschicht eine Serviceklasse zu schreiben, die alle Funktionen zur Verfügung stellt, die der Client nutzen können soll. Dies können die normalen CRUD-Operationen sein, spezielle Servicemethoden, die mit den Objekten interagieren oder ganz allgemein beliebige Funktionen.</p>
<p>Reichert man die Klassen durch Metadaten an, bekommt man die Validierung der Daten auf beiden Schichten “fast geschenkt”:</p>
<p>[Range(0, 120, ErrorMessage = &quot;Sprechende Fehlermeldung!&quot;)]   <br />public int? Age { get; set; }</p>
<p>Hat man dies z.B. so bei einer Person definiert, wird der Nutzer bereits beim Eingeben der Daten auf dem Client mit einer sprechenden Fehlermeldung auf seinen Fehler hingewiesen. Zusätzlich wird aber auch auf der Mittelschicht eine erneute Validierung der Daten vorgenommen. Dies ist eine sehr schöne Ausprägung des <a title="Don&#39;t Repeat Yourself" href="http://www.clean-code-developer.de/wiki/CcdRoterGrad#DontRepeatYourselfDRY">DRY-Prinzips</a>.</p>
<p>Außerdem werden alle Dateien mit dem Dateinamen *.shared.cs oder *.shared.vb in den Client kopiert, was Shared Code ermöglicht. Dies kann man nutzen, um generierte Properties anzulegen.</p>
<p>Das Ganze erleichtert den Entwicklungsprozess von viel langweiliger Arbeit und gibt einem mehr Zeit, für die wesentlichen Aspekte!</p>
<p>Weiterführende Links:</p>
<p><a href="http://videos.visitmix.com/MIX09/T40F">Präsentation auf der Mix09</a></p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabce&amp;displaylang=en">Download von Setup und Dokumentation</a></p>
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2009/07/27/net-ria-services-kurz-erklrt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>K2: SmartObject-Service umbiegen</title>
		<link>http://blog.fabse.net/2009/07/02/k2-smartobject-service-umbiegen/</link>
		<comments>http://blog.fabse.net/2009/07/02/k2-smartobject-service-umbiegen/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 09:26:10 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[Erfahrungen]]></category>
		<category><![CDATA[K2 [Blackpearl]]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/2009/07/02/k2-smartobject-service-umbiegen/</guid>
		<description><![CDATA[Nach dem ich ja vor kurzem einige schlechte Details des Produkts hervorgehoben habe, muss ich auch mal ein Lob aussprechen. Uns ist ein Server abgeraucht und der neue hat eine andere URL. Nun haben wir aber einen ServiceBroker, der von diesem Server Informationen in SmartObjects umgewandelt hat. Mein erster Gedanke war, ich muss jetzt dutzende [...]<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Nach dem ich ja vor kurzem einige <a href="http://blog.fabse.net/2009/06/30/k2-blackpearl-gotchas/">schlechte Details des Produkts</a> hervorgehoben habe, muss ich auch mal ein Lob aussprechen.</p>
<p>Uns ist ein Server abgeraucht und der neue hat eine andere URL. Nun haben wir aber einen ServiceBroker, der von diesem Server Informationen in SmartObjects umgewandelt hat.</p>
<p>Mein erster Gedanke war, ich muss jetzt dutzende von SmartObject neu anlegen oder editiert oder weiß ich was, aber es war so easy, dass man sich anstrengen muss, das in 3 Schritte auszubreiten:</p>
<ol>
<li>BrokerManagement.exe auf dem K2 Server öffnen</li>
<li>Zur ServiceInstanz navigieren</li>
<li>URL in den Eigenschaften ändern</li>
</ol>
<p>Fertig! Es dauerte keine 3 Minuten und das, obwohl ich nicht einmal wusste, wie es geht! Sehr gut!</p>
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2009/07/02/k2-smartobject-service-umbiegen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>K2 Blackpearl Gotchas</title>
		<link>http://blog.fabse.net/2009/06/30/k2-blackpearl-gotchas/</link>
		<comments>http://blog.fabse.net/2009/06/30/k2-blackpearl-gotchas/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 13:57:24 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[Erfahrungen]]></category>
		<category><![CDATA[K2 [Blackpearl]]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/2009/06/30/k2-blackpearl-gotchas/</guid>
		<description><![CDATA[Hier mal einige Erfahrungswerte aus der Entwicklung mit K2 Blackpearl in ungeordneter Reihenfolge: SmartObjects sind innerhalb von K2 und den Designern typisiert, will man aber über Code darauf zugreifen, wird jede Eigenschaft als String übergeben. Hierbei wird die auf dem Server eingestellte Kultur genutzt. Deshalb muss man bei Dezimalzahlen darauf achten, wenn man mit diesen [...]<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Hier mal einige Erfahrungswerte aus der Entwicklung mit K2 Blackpearl in ungeordneter Reihenfolge:</p>
<ul>
<li>SmartObjects sind innerhalb von K2 und den Designern typisiert, will man aber über Code darauf zugreifen, wird jede Eigenschaft als String übergeben. Hierbei wird die auf dem Server eingestellte Kultur genutzt. Deshalb muss man bei Dezimalzahlen darauf achten, wenn man mit diesen weiter rechnen will. </li>
<li>Fast alle Namen im K2-Umfeld (SmartObjects selbst, ihre Methodennamen sowie Ihre Eigenschaften, …) haben einen technischen Namen und einen Display-Name. In allen Tools wird der Display-Name angezeigt, für eigenen Code benötigt man aber den technischen Namen. </li>
<li>Der Change-Compile-Deploy-Test-Zyklus ist lang. Hier hab ich zwei Ansätze: Während der Entwicklung an einer Stelle den Folie auf die ProcessID setzen und dann auf Asynchron schalten. Dann von extern (z.B. Konsolenapplikation) die Prozess-Instanz holen und damit rumhantieren und erst wenn der Code das tut, was er soll, wird er in das Server-Event kopiert. die zweite Variante ist, Server-Events klein zu halten, in dem aus ihnen nur Code einer DLL aufgerufen wird. Diese DLL entwickelt man separat. So ist auch das Testen einfacher. </li>
<li>Ich hatte während der Entwicklung 2-3 mal das Vergnügen, dass mein kompletter Prozess auf einen älteren Stand “zurückmutierte”. Ich kann es nicht gezielt reproduzieren, aber ich glaube, es hat mit dem Öffnen mehrerer Instanzen vom Visual Studio zu tun. Komischerweise konnten sowohl SVN wie auch die eingebaute Versionierung des K2-Servers meinen letzten Stand nicht zurück holen.</li>
<li>Simple InfoPath-Formulare gehen schnell von der Hand, komplexe dauern dagegen länger als die komplette Entwicklung eines eigenen Formulars mit ASP.net. Es ist auch einfacher, das Formular-XML in einem Server-Event vorzubereiten, als die Webservices im Infopath zu nutzen.</li>
<li>SmartObjects sind langsam! Ein kurzer Test zeigte, dass jede Methode, die den SmartBoxService nutzte, jeweils rund 0,4s benötigt. Ein über einen ServiceBroker angebundenes CRM hatte sogar Zeiten von rund 0,6s. So dauert das Sammeln aller nötigen Daten für ein Formular auch schon mal 5-10s. Hantieren mit Prozessinstanzen von externem Code aus geht hingegen super schnell.</li>
</ul>
<p>Aber kennt man erst einmal alle Fallstricke, macht die Entwicklung mehr Spaß und geht auch schneller von der Hand!</p>
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2009/06/30/k2-blackpearl-gotchas/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fluent Interfaces: Sinnvoll?</title>
		<link>http://blog.fabse.net/2009/06/04/fluent-interfaces-sinnvoll/</link>
		<comments>http://blog.fabse.net/2009/06/04/fluent-interfaces-sinnvoll/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 15:31:41 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/2009/06/04/fluent-interfaces-sinnvoll/</guid>
		<description><![CDATA[Ich hatte Fluent Interfaces mal in einem Blog gelesen und hatte es seit dem auf meinem Zettel stehen, das mal genauer anzusehen. Was ist das eigentlich? Wikipedia weiß es natürlich. Sucht man bei Google danach findet man Blogs mit Einträgen von 2006/2007…sind Fluent Interfaces schon tot? Vielleicht! Einige Beispiele: IConfigurationFluent config = &#160;&#160;&#160;&#160;&#160; new ConfigurationFluent().SetColor(&#34;blue&#34;) [...]<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Ich hatte Fluent Interfaces mal in einem Blog gelesen und hatte es seit dem auf meinem Zettel stehen, das mal genauer anzusehen.</p>
<p>Was ist das eigentlich? <a title="Fluent_Interface bei Wikipedia (de)" href="http://de.wikipedia.org/wiki/Fluent_Interface">Wikipedia weiß es natürlich.</a></p>
<p>Sucht man bei Google danach findet man Blogs mit Einträgen von 2006/2007…sind Fluent Interfaces schon tot? Vielleicht!</p>
<p>Einige Beispiele:</p>
<blockquote><p>IConfigurationFluent config =      <br />&#160;&#160;&#160;&#160;&#160; new ConfigurationFluent().SetColor(&quot;blue&quot;)      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .SetHeight(1)      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .SetLength(2)      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .SetDepth(3);</p>
</blockquote>
<p>Das schreit einfach nach dem Object Initializer von C#! In etwa so:</p>
<blockquote><p>IConfiguration config =      <br />&#160;&#160;&#160;&#160;&#160; new Configuration {Color = “blue”, Height=1, Length=2, Depth=3};</p>
</blockquote>
<p>Dann spart mach sich das zusätzliche “return this” in der Implementierung.</p>
<p>Ok, dann hat <a href="http://blog.troyd.net/PermaLink,guid,5cdd4862-857a-488d-a577-c6d21b548f19.aspx">Troy Demonbreun</a> folgendes Beispiel:</p>
<blockquote><p>order     <br />&#160;&#160;&#160; .AddFreeShipping()      <br />&#160;&#160;&#160; .IncludeItem(15)      <br />&#160;&#160;&#160; .SuppressTax();</p>
</blockquote>
<p>Das sieht an sich ja ganz nett aus, allerdings hat seine Implementierung den “Fehler”, dass IncludeItem() den Kontext von Order auf OrderItem ändert. Nach meinem Verständnis von Fluent Interfaces müsste aber folgendes möglich sein (geht bei ihm nicht):</p>
<blockquote></blockquote>
<blockquote><p>order     <br />&#160;&#160;&#160; .AddFreeShipping()      <br />&#160;&#160;&#160; .IncludeItem(15).SuppressTax()      <br />&#160;&#160;&#160; .IncludeItem(4)      <br />&#160;&#160;&#160; .IncludeItem(77)      <br />&#160;&#160;&#160; .PrepareAsGift();</p>
</blockquote>
<p>Und als drittes Beispiel hab ich folgendes, leicht komplexes Konstrukt gefunden:</p>
<blockquote><p>EventComponent planningMeeting =     <br />&#160;&#160; Plan.Event(&quot;Project planning meeting&quot;).      <br />&#160;&#160;&#160;&#160;&#160; RelatedTo(planningTask).      <br />&#160;&#160;&#160;&#160;&#160; WithPriority(1).      <br />&#160;&#160;&#160;&#160;&#160; At(&quot;Head office&quot;).      <br />&#160;&#160;&#160;&#160;&#160; OrganizedBy(&quot;jane@megacorp.com&quot;, &quot;Jane Doe&quot;).      <br />&#160;&#160;&#160;&#160;&#160; StartingAt(&quot;12:00&quot;).Lasting(45).Minutes.      <br />&#160;&#160;&#160;&#160;&#160; Attendants(      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &quot;peter@megacorp.com&quot;,      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &quot;paul@megacorp.com&quot;,      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &quot;mary@contractor.com&quot;).AreRequired.      <br />&#160;&#160;&#160;&#160;&#160; Attendant(&quot;john@megacorp.com&quot;).IsOptional.      <br />&#160;&#160;&#160;&#160;&#160; Resource(&quot;Projector&quot;).IsRequired.      <br />&#160;&#160;&#160;&#160;&#160; ClassifyAs(&quot;Public&quot;).      <br />&#160;&#160;&#160;&#160;&#160; CategorizeAs(&quot;Businees&quot;, &quot;Development&quot;).      <br />&#160;&#160;&#160;&#160;&#160; Recurring.Until(2008).EverySingle.Week.On(Day.Thursday).      <br />&#160;&#160;&#160;&#160;&#160; Except.Each.Year.In(Month.July | Month.August);      <br />planningMeeting.SendInvitations();</p>
</blockquote>
<p>…hier kann ich schon etwas verstehen, warum Fluent Interfaces (=FIs) sexy sein könnten. Aber zuerst muss ich hier auch sofort wieder an Object Initializer und Collection Initializer denken (Nein, ich bau das jetzt nicht um <img src='http://blog.fabse.net/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />  ) und dann hab ich da noch einen letzten Punkt zu: Man kann FIs nur einsetzen, wenn man zu einem Zeitpunkt bereits alles weiß zu dem Objekt, was man erstellen will. Das ist an sich ja nicht schlecht, aber wie kommt denn die Liste der Attendants da rein? Doch meistens mit foreach und das geht nicht in dieser Kette von Aufrufen. </p>
<p>Ach und noch ein allerletzter Punkt: In diesem Ansatz muss ich viel Schmalz darauf verbraten, wann eine Methode Sinn macht:</p>
<blockquote><p>…Attendants( … ).Except.Minutes.WithPriority(1); //?!</p>
</blockquote>
<p><strong>Fazit:     <br /></strong>[x] Ich hab mir Fluent Interfaces angesehen    <br />[x] Ich weiß keinen guten Fall, wann das Ganze wirklich Sinn macht</p>
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2009/06/04/fluent-interfaces-sinnvoll/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Kopierte Referenz-Definition bei K2 Blackpearl</title>
		<link>http://blog.fabse.net/2009/05/05/eigenarten-von-k2-blackpearl/</link>
		<comments>http://blog.fabse.net/2009/05/05/eigenarten-von-k2-blackpearl/#comments</comments>
		<pubDate>Tue, 05 May 2009 10:10:29 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[Erfahrungen]]></category>
		<category><![CDATA[K2 [Blackpearl]]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/2009/05/05/eigenarten-von-k2-blackpearl/</guid>
		<description><![CDATA[Wenn man mit K2 arbeitet, findet man hin und wieder K2-Eigenarten vor. Die folgende hat mich schon den ganzen Tag beschäftigt. Wenn es auch nach dem 5. prüfen immer noch richtig aussieht und auch ein Kollege keinen Fehler finden kann, dann liegt es wohl daran, dass kein Fehler sichtbar ist. Hier hilft bei K2 immer, [...]<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Wenn man mit K2 arbeitet, findet man hin und wieder K2-Eigenarten vor. Die folgende hat mich schon den ganzen Tag beschäftigt.</p>
<p>Wenn es auch nach dem 5. prüfen immer noch richtig aussieht und auch ein Kollege keinen Fehler finden kann, dann liegt es wohl daran, dass kein Fehler sichtbar ist. Hier hilft bei K2 immer, einfach alles löschen und genauso neu erstellen.</p>
<p>Bei mir war es die Referenz auf ein SmartObject. Ich hatte anfangs die Parameter der Read-Methode falsch, hab aber schon Werte aus dem SmartObject in einer E-Mail verwendet. Als ich das Read dann richtig hingebogen hatte, ging’s trotzdem nicht. Lösung war, alle genutzten Felder aus der E-Mail entfernen und neu einfügen. Offenbar wird mit dem Feld zusammen auch die Definition der Referenz kopiert.</p>
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2009/05/05/eigenarten-von-k2-blackpearl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bezahltes Warten</title>
		<link>http://blog.fabse.net/2009/04/04/bezahltes-warten/</link>
		<comments>http://blog.fabse.net/2009/04/04/bezahltes-warten/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 10:24:35 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[Erfahrungen]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/2009/04/04/bezahltes-warten/</guid>
		<description><![CDATA[Ich war die letzten Wochen in einem Entwicklungsprojekt bei einem Kunden vor Ort. Die Organisationsrichtlinien sahen eine Entwicklung auf den Kunden PCs vor. Der PC, auf dem ich gearbeitet habe, war so langsam, dass das Kompilieren und Starten mindestens 2 Minuten in Anspruch nahm. In der Regel sogar 3-4 Minuten. Gefühlt hätte ich jeden Tag [...]<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Ich war die letzten Wochen in einem Entwicklungsprojekt bei einem Kunden vor Ort. Die Organisationsrichtlinien sahen eine Entwicklung auf den Kunden PCs vor.</p>
<p>Der PC, auf dem ich gearbeitet habe, war so langsam, dass das Kompilieren und Starten mindestens 2 Minuten in Anspruch nahm. In der Regel sogar 3-4 Minuten. Gefühlt hätte ich jeden Tag eine Stunde sparen können und trotzdem die selbe Arbeit tun können (Schätzungen von Kollegen gehen sogar bis 2-3 Stunden/Tag!). Es ist nicht nur die Zeit selbst, sondern auch die damit verbundene Demotivation. Die kann man gar nicht in Zahlen fassen. Ohne zu viele Zahlen Preis zu geben möchte ich folgende Rechnung angeben:</p>
<p>200 Arbeitstage/Jahr * 1h “Warten”/Arbeitstag = <strong>200h Warten pro Jahr. </strong></p>
<p>Würde man das Abwarten gedanklich ans Ende des Jahres schieben, wäre die Arbeit schon Mitte November zu Ende!</p>
<p>Oder anders betrachtet: Multipliziert man diese 200h mit dem gezahlten Stundensatz, kommt eine Summe raus, die den Kauf eines recht ausgereiften und modernen PCs locker rechtfertigt. Das ist ein gutes Beispiel, wo Sparen teurer ist als Investieren!</p>
<p>Hinweise meinerseits wurden aufgenommen, allerdings hat sich an der Situation nichts geändert. Schade eigentlich. Ich hätte die Wartezeit lieber in mehr Features und besseren Code investiert statt in sinnloses Warten, aber mir waren die Hände gebunden.</p>
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2009/04/04/bezahltes-warten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ich war auch mal ein DAU</title>
		<link>http://blog.fabse.net/2009/04/03/ich-war-auch-mal-ein-dau/</link>
		<comments>http://blog.fabse.net/2009/04/03/ich-war-auch-mal-ein-dau/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 17:04:00 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/2009/04/03/ich-war-auch-mal-ein-dau/</guid>
		<description><![CDATA[ich hab den “Ich, ein DAU”-Beitrag gelesen und hab eine ähnliche Story: Es ist schon etwas her und ich wollte – just for fun -&#160; ein Tool schreiben, welches einen Ordner rekursiv durchsucht und den Qullcode analysiert. Also nur sowas wie x Dateien enthalten y Codezeilen und z Kommentare. Den ersten Ansatz runter programmiert (vielleicht [...]<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p>ich hab den <a href="http://blogs.msdn.com/dparys/archive/2009/04/02/ich-ein-dau.aspx" target="_blank">“Ich, ein DAU”</a>-Beitrag gelesen und hab eine ähnliche Story:</p>
<p>Es ist schon etwas her und ich wollte – just for fun -&#160; ein Tool schreiben, welches einen Ordner rekursiv durchsucht und den Qullcode analysiert. Also nur sowas wie x Dateien enthalten y Codezeilen und z Kommentare.</p>
<p>Den ersten Ansatz runter programmiert (vielleicht ne halbe Stunde…) dann wollte ich es im ersten Testlauf auf seinen eigenen Source anwenden. Dumm nur, dass danach alle Dateien leer waren. Da hatte wohl jemand die Flags beim Dateiöffnen falsch gesetzt. Naja ich hatte dann keine Lust mehr und hab’s sein lassen <img src='http://blog.fabse.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2009/04/03/ich-war-auch-mal-ein-dau/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stellt die Reihenfolge von XML-Elementen implizites Wissen dar?</title>
		<link>http://blog.fabse.net/2009/03/01/stellt-die-reihenfolge-von-xml-elementen-implizites-wissen-dar/</link>
		<comments>http://blog.fabse.net/2009/03/01/stellt-die-reihenfolge-von-xml-elementen-implizites-wissen-dar/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 09:49:25 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[Erfahrungen]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/2009/03/01/stellt-die-reihenfolge-von-xml-elementen-implizites-wissen-dar/</guid>
		<description><![CDATA[Bei einem Erfahrungsaustausch in der Firma kam die Frage auf, ob die Reihenfolge von gleichen XML-Elementen implizites Wissen darstellt oder ob es nach der XML-Definition erlaubt wäre, diese Elemente zu vertauschen. Beispiel war dabei eine Person, die mehrere Telefonnummern hat: Wenn man jetzt sagt, dass die erste Telefonnummer immer die primäre Kontaktadresse ist, dann hätte [...]<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Bei einem Erfahrungsaustausch in der Firma kam die Frage auf, ob die Reihenfolge von gleichen XML-Elementen implizites Wissen darstellt oder ob es nach der XML-Definition erlaubt wäre, diese Elemente zu vertauschen.</p>
<p>Beispiel war dabei eine Person, die mehrere Telefonnummern hat:</p>
<p><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="120" alt="image" src="http://blog.fabse.net/wp-content/uploads/image15.png" width="207" border="0" /> </p>
<p>Wenn man jetzt sagt, dass die erste Telefonnummer immer die primäre Kontaktadresse ist, dann hätte die Reihenfolge der Elemente ja ein implizites Wissen.</p>
<p>Kann ich das so machen oder müsste ich es laut XML Spezifikation immer explizit gestalten:</p>
<p><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="120" alt="image" src="http://blog.fabse.net/wp-content/uploads/image16.png" width="342" border="0" /> </p>
<p>Das war die Frage. Ich persönlich denke, dass die Reihenfolge Wissen darstellt und deshalb jeder Verarbeitungsschritt diese Reihenfolge erhalten muss. Argumente der Gegenseite waren, dass ja z.B. bei XHTML &lt;div&gt; – Tags beliebig verteilt werden können im Dokument und man sie anschließend durch CSS dahin bekommt, wo sie hingehören. Gegenbeispiel ist dabei aber ein Dokument mit mehreren Textabsätzen. Würde man hier nicht allen &lt;p&gt; – Tags eine Style-direktive zuweisen, könnten die Textabsätze ja verwürfelt werden, was sicherlich nicht im Sinne des Designer war.</p>
<p>Ich hab dazu mal die <a href="http://www.w3.org/TR/2008/REC-xml-20081126/" target="_blank">XML RFC</a> konsultiert:</p>
<blockquote><p>Note that the order of attribute specifications in a start-tag or empty-element tag is not significant.</p>
</blockquote>
<p>Aha, Attribute haben also keine Reihenfolge, aber was ist mit Elementen?</p>
<blockquote><p>content particles occurring in a sequence list <em>MUST</em> each appear in the element content in the order given in the list.</p>
</blockquote>
<p>Ein XSD-Schema kann also eine Reihenfolge von Elementen vorschreiben. Dies bezieht sich aber bloß auf unterschiedliche Elementtypen. Es kann also definiert werden, dass der Vorname immer vor dem Nachnamen auftauchen muss.</p>
<p>Weiteres habe ich in der RFC aber nicht gefunden, damit ist es aber weder belegt noch wiederlegt, ob die Reihenfolge nun entscheidend ist.</p>
<p><a href="http://www.google.de/search?q=xml+order+of+elements" target="_blank">Google</a> hat zwar ein paar Treffer, aber nichts, was nun wirklich weiter hilft.</p>
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2009/03/01/stellt-die-reihenfolge-von-xml-elementen-implizites-wissen-dar/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>UDP Broadcasts mit C# versenden (extended)</title>
		<link>http://blog.fabse.net/2008/10/29/udp-broadcasts-mit-csharp-versenden-extended/</link>
		<comments>http://blog.fabse.net/2008/10/29/udp-broadcasts-mit-csharp-versenden-extended/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 20:00:50 +0000</pubDate>
		<dc:creator>Fabse</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.fabse.net/2008/10/29/udp-broadcasts-mit-c-versenden-extended/</guid>
		<description><![CDATA[Den Standardweg (Da ist übrigens ein Fehler drin: SocketOptionName.Broadcast muss auf 1 statt auf 0 gesetzt werden), wie man Broadcasts versendet, hatte auf meinem Rechner zur Folge, dass nur ein einziger Netzwerkadapter die Broadcasts versendete. Dies war nicht das, was ich wollte, denn es war auch noch ein VMWare-Adapter. Nach etwas Probieren fand ich heraus, [...]<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></description>
			<content:encoded><![CDATA[<p>Den <a href="http://dotnet-snippets.de/dns/c-broadcast-senden-SID567.aspx">Standardweg</a> (<em>Da ist übrigens ein Fehler drin: SocketOptionName.Broadcast muss auf 1 statt auf 0 gesetzt werden), </em>wie man Broadcasts versendet, hatte auf meinem Rechner zur Folge, dass nur ein einziger Netzwerkadapter die Broadcasts versendete. Dies war nicht das, was ich wollte, denn es war auch noch ein VMWare-Adapter.</p>
<p>Nach etwas Probieren fand ich heraus, dass statt <em>IPAddress.Broadcast</em> besser <em>IPAddress.Parse(&#8230;)</em> mit der richtigen Broadcast-IP für das jeweilige Netz genommen werden sollte. Ich suchte mir also das nötige Zeug von <a href="http://dotnet-snippets.de/dns/c-netzwerkinformationen-abfragen-SID197.aspx">zwei</a> <a href="http://www.codeproject.com/KB/dotnet/BroadCast.aspx">Artikeln</a> zusammen: Ich frage nun alle Netzwerkkarten ab, die IP können, kalkuliere deren Broadcast-IP und versende dann das Broadcast-Paket für jedes Netz einzeln in einer Schleife. Nun bekommen alle Netze meinen Broadcast, wie gewünscht!</p>
<p>Wer den Quelltext sehen will, sollte den Artikel weiterlesen!</p>
<p><span id="more-279"></span>
</p>
<div class="csharpcode">
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> SendBroadcastPacket(<span class="kwrd">int</span> destinationPort, <span class="kwrd">byte</span>[] content)
{
    var NetworkInfo = <span class="kwrd">new</span> ManagementObjectSearcher(<span class="str">"SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'"</span>);
    ManagementObjectCollection MOC = NetworkInfo.Get();
    <span class="kwrd">foreach</span> (ManagementObject mo <span class="kwrd">in</span> MOC)
    {
        var adapterAddresses = (<span class="kwrd">string</span>[])mo[<span class="str">"IPAddress"</span>];
        var adapterSubnetMasks = (<span class="kwrd">string</span>[])mo[<span class="str">"IPSubnet"</span>];

        <span class="kwrd">if</span> (adapterAddresses.Count() &gt; 0 &amp;&amp; adapterSubnetMasks.Count() &gt; 0)
        {
            <span class="kwrd">try</span>
            {
                IPAddress broadcastIpForAdapter = GetBroadcastAddress(IPAddress.Parse(adapterAddresses[0]),
                                                                      IPAddress.Parse(adapterSubnetMasks[0]));
                SendBroadcastPacketToBroadcastIp(broadcastIpForAdapter, destinationPort, content);
            }
            <span class="kwrd">catch</span> (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
            }
        }
    }
}

<span class="kwrd">private</span> <span class="kwrd">static</span> IPAddress GetBroadcastAddress(IPAddress ipAddress, IPAddress subnetMask)
{
    <span class="kwrd">byte</span>[] ipAdressBytes = ipAddress.GetAddressBytes();
    <span class="kwrd">byte</span>[] subnetMaskBytes = subnetMask.GetAddressBytes();
    <span class="kwrd">if</span> (ipAdressBytes.Length != subnetMaskBytes.Length)
        <span class="kwrd">throw</span> <span class="kwrd">new</span> ArgumentException(<span class="str">"Both IP address and subnet mask should be of the same length"</span>);
    var result = <span class="kwrd">new</span> <span class="kwrd">byte</span>[ipAdressBytes.Length];
    <span class="kwrd">for</span> (<span class="kwrd">int</span> i = 0; i &lt; result.Length; i++)
        result[i] = (<span class="kwrd">byte</span>)(ipAdressBytes[i] | (subnetMaskBytes[i] ^ 255));
    <span class="kwrd">return</span> <span class="kwrd">new</span> IPAddress(result);
}

<span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> SendBroadcastPacketToBroadcastIp(IPAddress broadcastIp, <span class="kwrd">int</span> destinationPort, <span class="kwrd">byte</span>[] content)
{
    Socket sock = <span class="kwrd">null</span>;
    <span class="kwrd">try</span>
    {
        var destinationEndpoint = <span class="kwrd">new</span> IPEndPoint(broadcastIp, destinationPort);
        sock = <span class="kwrd">new</span> Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
        sock.SendTo(content, destinationEndpoint);
    }
    <span class="kwrd">finally</span>
    {
        <span class="kwrd">if</span> (sock != <span class="kwrd">null</span>)
        {
            sock.Close();
        }
    }
}</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
</div>
<p><br /><br />---<br />
<a href="https://www.amazon.de/?&tag=fabsenetfabse-21">Unterst&uuml;tze mich und meinen Blog und kauf dir was Nettes (&uuml;ber diesen Link)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabse.net/2008/10/29/udp-broadcasts-mit-csharp-versenden-extended/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
