<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.1" -->
<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/"
	>

<channel>
	<title>Darkleo's Blog</title>
	<link>http://www.darkleo.com/blog</link>
	<description>Ein Schatz, der seinen Besitzer überallhin begleitet.</description>
	<pubDate>Tue, 06 May 2008 10:42:05 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.1</generator>
	<language>en</language>
			<item>
		<title>ASP.NET Monitoring</title>
		<link>http://www.darkleo.com/blog/2008/04/29/aspnet-monitoring/</link>
		<comments>http://www.darkleo.com/blog/2008/04/29/aspnet-monitoring/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 15:25:08 +0000</pubDate>
		<dc:creator>darkleo</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[Frameworks]]></category>

		<guid isPermaLink="false">http://www.darkleo.com/blog/2008/04/29/aspnet-monitoring/</guid>
		<description><![CDATA[Wäre es nicht einfach Klasse eigene ASP.NET Anwendungem im Detail in Echtzeit zu monitoren?
Mit monitoren ist gemeint, zu sehen wie performant die Anwendung ist (beobachten) um bei Problemen in das System eingreifen zu können (reagieren).
Ich stelle dieses Framework zum Testen zur Verfügung.
Funktionsweise:
Metricsobjekte: Sammeln von Informationen über das Verhalten von ASP.NET Application.
Storeobjekte sind in Metrics instanziert [...]]]></description>
			<content:encoded><![CDATA[<p>Wäre es nicht einfach Klasse eigene ASP.NET Anwendungem im Detail in Echtzeit zu monitoren?<br />
Mit monitoren ist gemeint, zu sehen wie performant die Anwendung ist (beobachten) um bei Problemen in das System eingreifen zu können (reagieren).</p>
<p><strong>Ich stelle </strong><strong>dieses Framework </strong><strong>zum Testen zur Verfügung.</strong></p>
<p><strong>Funktionsweise:<br />
</strong><em>Metricsobjekte</em>: Sammeln von Informationen über das Verhalten von ASP.NET Application.<br />
<em>Storeobjekte</em> sind in Metrics instanziert und bilden die Speicher- und Ladeschicht.<br />
<em>Stateinstanzen</em> prüfen ob Performanceprobleme im System vorhanden sind, Reaktionen darauf muss jeder selbst (web.config) einstellen oder ausprogrammieren.<br />
Dafür gibt es Responder/Container oder auch die direkte Ansprache des Providers oder des Module-interfaces.<br />
<em>IPerformanceProvider</em> ist das FacadenInterface über welches das Do.NET Pla Framework angesprochen werden kann.</p>
<p>Wieso habe ich das erwähnt? Weiß ich selbst nicht!<br />
Es sind Interfaces die jeder selbst implementieren kann aber nicht muss, denn das Framework hat schon eine eigene ProviderGruppe: "PerformanceCounter".<br />
Zum Reagieren gibt es den ResponderDefault der einfach eine Exception wirft.</p>
<p>Das Framework wird über ein HttpModul angeschlossen.</p>
<p><font color="#0000ff" size="2">&lt;</font><font color="#a31515" size="2">httpModules</font><font color="#0000ff" size="2">&gt;<br />
</font><font color="#0000ff" size="2">   &lt;</font><font color="#a31515" size="2">add</font><font color="#0000ff" size="2"> </font><font color="#ff0000" size="2">name</font><font color="#0000ff" size="2">=</font><font size="2">"</font><font color="#0000ff" size="2">PlaModule</font><font size="2">"</font><font color="#0000ff" size="2"> </font><font color="#ff0000" size="2">type</font><font color="#0000ff" size="2">=</font><font size="2">"</font><font color="#0000ff" size="2">Do.NET.Pla.PlaModule, Do.NET.Pla</font><font size="2">"</font><font color="#0000ff" size="2">/&gt;</font></p>
<p><font color="#0000ff" size="2"><font color="#000000" size="3"> Und die Provider müssen bekannt gegeben werden.</font> </font></p>
<p><font color="#0000ff" size="2">&lt;<font color="#a31515" size="2">section</font><font color="#0000ff" size="2"> </font><font color="#ff0000" size="2">name</font><font color="#0000ff" size="2">=</font><font size="2">"</font><font color="#0000ff" size="2">performanceConfiguration</font><font size="2">"</font><font color="#0000ff" size="2"> </font><font color="#ff0000" size="2">type</font><font color="#0000ff" size="2">=</font><font size="2">"</font><font color="#0000ff" size="2">Do.NET.Pla.Configuration.PerformanceConfiguration</font><font size="2">"</font><font color="#0000ff" size="2">/&gt;</font></font></p>
<p><font color="#0000ff" size="2"><br />
</font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;<font color="#a31515" size="2">performanceConfiguration </font><font color="#ff0000" size="2">enabled</font><font color="#0000ff" size="2">=</font><font size="2">"</font><font color="#0000ff" size="2">true</font><font size="2">" </font><font color="#ff0000" size="2">providerGroup</font><font color="#0000ff" size="2">=</font><font size="2">"</font><font color="#0000ff" size="2">PerformanceCounter oder Custom</font><font size="2">" </font><font color="#ff0000" size="2">applicationName</font><font color="#0000ff" size="2"> =</font><font size="2">"</font><font color="#0000ff" size="2">Portal.Pla</font><font size="2">"</font><font color="#0000ff" size="2">&gt;<br />
</font></font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;/<font color="#a31515">performanceConfiguration</font>&gt;</font></font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2"><img src="http://www.darkleo.com/blog/wp-content/uploads/2008/04/pc.png" alt="pc.png" /><font color="#0000ff" size="2"> </font></font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font color="#000000">Für Reaktionsmöglichkeiten per Web.config</font></font><font color="#0000ff" size="2"><br />
<font color="#0000ff" size="2">&lt;<font color="#a31515" size="2">add</font><font color="#0000ff" size="2"> </font><font color="#ff0000" size="2">name</font><font color="#0000ff" size="2">=</font><font size="2">"</font><font color="#0000ff" size="2">_default.*</font><font size="2">"<br />
</font><font color="#ff0000" size="2">enabled</font><font color="#0000ff" size="2">=</font><font size="2">"</font><font color="#0000ff" size="2">true</font><font size="2">"<br />
</font><font color="#ff0000" size="2">isCriticalPerformance</font><font color="#0000ff" size="2">=</font><font size="2">"</font><font color="#0000ff" size="2">true</font><font size="2">"<br />
</font><font color="#ff0000" size="2">criticalResponder</font><font color="#0000ff" size="2">=</font><font size="2">"</font><font color="#0000ff" size="2">PlaWeb.Extend.RedirectResponder, PlaWeb.Extend, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</font><font size="2">"<br />
</font><font color="#ff0000" size="2">description</font><font color="#0000ff" size="2">=</font><font size="2">"</font><font color="#0000ff" size="2">Wartungsarbeiten von 2008-2009</font><font size="2">"<br />
</font><font color="#ff0000" size="2">freezeStartDate</font><font color="#0000ff" size="2">=</font><font size="2">"</font><font color="#0000ff" size="2">01.01.2008 00:00</font><font size="2">"<br />
</font><font color="#ff0000" size="2">freezeEndDate</font><font color="#0000ff" size="2">=</font><font size="2">"</font><font color="#0000ff" size="2">01.01.2009 00:00</font><font size="2">"<br />
</font><font color="#ff0000" size="2">any</font><font color="#0000ff" size="2">=</font><font size="2">"</font><font color="#0000ff" size="2">sonstige parameter optional</font><font size="2">"</font><font color="#0000ff" size="2">/&gt;<br />
&lt;!--</font><font color="#008000" size="2">criticalResponder="Do.NET.Pla.PerformanceCriticalResponderDefault"</font><font color="#0000ff" size="2">--&gt;<br />
</font></font></font></font></font></p>
<p><font size="2"><font size="2"><font size="2"><font size="2"><font color="#000000"><em>"_default.*"</em> gibt an, dass die _default.* Seite in allen Contexten überprüft werden soll und bei Eingabe von isCriticalPerformance==true die Reaktionsinstanz erzeugen soll.<br />
</font></font></font></font></font></p>
<p><font size="2"><font size="2"><font color="#000000" size="2">Die Custom Responder Klasse sieht so aus:</font></font></font></p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2">public<font color="#000000" size="2"> </font><font color="#0000ff" size="2">class</font><font color="#000000" size="2"> </font><font color="#2b91af" size="2">RedirectResponder</font><font color="#000000" size="2"> : </font><font color="#2b91af" size="2">PerformanceCriticalResponderBase<br />
</font><font size="2">{<br />
</font><font color="#0000ff" size="2">public</font><font size="2"> </font><font color="#0000ff" size="2">override</font><font size="2"> </font><font color="#0000ff" size="2">void</font><font size="2"> CallBackCriticalPerformance(</font><font color="#0000ff" size="2">object</font><font size="2"> sender, </font><font color="#2b91af" size="2">EventArgs</font><font size="2"> e)<br />
{<br />
</font><font color="#2b91af" size="2">IPerformanceState</font><font size="2"> state = (</font><font color="#2b91af" size="2">IPerformanceState</font><font size="2">)sender;<br />
</font><font color="#2b91af" size="2">HttpContext</font><font size="2">.Current.Session[</font><font color="#a31515" size="2">"_lasterror"</font><font size="2">] = state;<br />
</font><font color="#2b91af" size="2">HttpContext</font><font size="2">.Current.Response.Redirect(</font><font color="#a31515" size="2">"~/Error.aspx"</font><font size="2">, </font><font color="#0000ff" size="2">true</font><font size="2">);</font><font color="#008000" size="2">//endresponse<br />
</font><font size="2">}<br />
}</font></font></font></p>
<p><font size="2"><font color="#000000" size="2">et voila</font></font></p>
<p>Würde mich freuen, wenn jemand Feedback gibt ob es Probleme gibt.</p>
<p>Im Sample ist der StateProvider auf die Web.config -&gt; WebService-Klasse angesetzt. Somit können die Seiten zusätzlich zur web.config über einen WebService gesteuert werden. (z.b. ab* für About.None oder alle Seiten die mit ab anfangen.)</p>
<p><font color="#0000ff" size="2"><font color="#0000ff" size="2">[<a href="http://www.do-dotnet.de/upload/download/folien/do-dotnet.de_asp.net_monitoring.ppt" target="_blank" title="ASP.NET Monitoring">Vortragsfolien</a>] [<a href="http://www.do-dotnet.de/upload/download/folien/ASP.NET_Monitoring_Sample.zip">Sample Project</a>]</font></font></p>
<p><font color="#0000ff" size="2">Happy monitoring!!!</font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.darkleo.com/blog/2008/04/29/aspnet-monitoring/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ASP.NET Anzahl der Benutzer auf der Seite ausgeben.</title>
		<link>http://www.darkleo.com/blog/2008/04/23/aspnet-anzahl-der-benutzer-auf-der-seite-ausgeben/</link>
		<comments>http://www.darkleo.com/blog/2008/04/23/aspnet-anzahl-der-benutzer-auf-der-seite-ausgeben/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 13:06:03 +0000</pubDate>
		<dc:creator>darkleo</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://www.darkleo.com/blog/2008/04/23/aspnet-anzahl-der-benutzer-auf-der-seite-ausgeben/</guid>
		<description><![CDATA[Hab versucht die Anzahl der Benutzer auf der Seite festzustellen und habe nichts passendes gefunden. Wie immer, wenn etwas nicht da ist, wird versucht sich selbst am Schnellsten und Besten zu helfen  
Wäre auch klasse wenn ich nicht unbedingt auf der MasterPage Code verteile, also machen wir uns ein cooles HttpModule welches und auf [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://www.do-dotnet.de"><img border="0" align="right" src="http://www.darkleo.com/blog/wp-content/uploads/2008/04/do-dotnet-80x25.jpg" alt="do-dotnet-80x25.jpg" /></a>Hab versucht die Anzahl der Benutzer auf der Seite festzustellen und habe nichts passendes gefunden. Wie immer, wenn etwas nicht da ist, wird versucht sich selbst am Schnellsten und Besten zu helfen <img src='http://www.darkleo.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Wäre auch klasse wenn ich nicht unbedingt auf der MasterPage Code verteile, also machen wir uns ein cooles HttpModule welches und auf die Frage "wieviele Benutzer sind auf der ASP.NET Webseite?" eine Antwort liefert.</p>
<p><font size="2">Label1.Text = </font><font size="2" color="#0000ff">string</font><font size="2">.Format(</font><font size="2" color="#a31515">"Es sind {0} Benutzer auf der Webseite."</font><font size="2">,<br />
                                     Do.NET.Web.</font><font size="2" color="#2b91af">CurrentUserModule</font><font size="2">.Count);</font></p>
<p><font size="2">So binden wir das HttpModule zu unserer Webseite an und damit ist es schon Verfügbar.<br />
</font><font size="2"><font size="2" color="#008000">&lt;httpModules&gt;<br />
   &lt;add name="CurrentUserModule" type="Do.NET.Web.CurrentUserModule, Do.NET.Web"/&gt;<br />
&lt;/httpModules&gt;</font></font></p>
<p><font size="2"><font size="2" color="#008000"> </font></font><font size="2"><font size="2" color="#008000"><font color="#000000">Funktioniert nur wenn Session eingeschaltet ist, da das HttpModule sich an den Sessions orientiert.<br />
</font></font></font><font size="2"><font size="2" color="#008000"><font size="2" color="#008000">Beispiel Session Config:<br />
&lt;system.web&gt;<br />
    &lt;sessionState mode="InProc" cookieless="UseUri" timeout="30"/&gt;</font></font></font></p>
<p><font size="2"><font size="2"><font size="2" color="#000000">Wie mit Hilfe von HttpModulen die gesamte ASP.NET Webapplication in Echtzeit gemonitort werden kann, wird auf dem .NET User Group Dortmund "<strong>Do.Net</strong>" Treffen am 25.04.08 vorgestellt.  Mit Monitoring ist überwachen und reagieren gemeint .</font></font></font></p>
<p><font size="2">Weitere Infos dazu auf <a target="_blank" href="http://www.do-dotnet.de">www.do-dotnet.de</a>.</font></p>
<p><font size="2"><font size="2" color="#008000"><font size="2" color="#008000"><a href="http://www.darkleo.com/blog/wp-content/uploads/2008/04/donetweb.zip" title="donetweb.zip">Download donetweb Solution</a><br />
</font></font></font><font size="2"><font size="2" color="#008000"><font size="2" color="#008000"><a href="http://www.darkleo.com/blog/wp-content/uploads/2008/04/currentusermodule.cs" title="currentusermodule.cs">currentusermodule.cs</a></font></font></font></p>
<p><font size="2" color="#000000">Ein anderer Ansatz mit MembershipProvidern wird hier beschrieben: <a href="http://aspnet.4guysfromrolla.com/articles/041608-1.aspx">http://aspnet.4guysfromrolla.com/articles/041608-1.aspx</a></font></p>
<p align="center"><script type="text/javascript"><!--
google_ad_client = "pub-7251294127490724";
//468x60, Erstellt 14.11.07
google_ad_slot = "1956959577";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.darkleo.com/blog/2008/04/23/aspnet-anzahl-der-benutzer-auf-der-seite-ausgeben/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Afterlaunch war letzte Woche, nächste Woche .NET User Group Dortmund :)</title>
		<link>http://www.darkleo.com/blog/2008/04/14/afterlaunch-war-letzte-woche-nachste-woche-net-user-group-dortmund/</link>
		<comments>http://www.darkleo.com/blog/2008/04/14/afterlaunch-war-letzte-woche-nachste-woche-net-user-group-dortmund/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 11:00:20 +0000</pubDate>
		<dc:creator>darkleo</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[User Group]]></category>

		<category><![CDATA[VisualStudio]]></category>

		<guid isPermaLink="false">http://www.darkleo.com/blog/2008/04/14/afterlaunch-war-letzte-woche-nachste-woche-net-user-group-dortmund/</guid>
		<description><![CDATA[Der Tag verging,
und halb betrunken
ist Saltan ins Bett gesunken ...
Ich war dort, trank Met und Bier,
naß ward nur der Schnauzbart mir.
[Puschkin]
Die Afterlaunch Veranstaltung ist sehr interessant gewesen, vor allem auch das Thema "Visual Studio 2008 - Tipps und Tricks für die Praxis"von Roland Weigelt von der User Group Bonn www.bonn-to-code.net.
Auf der .NET User Group Dortmund findet auch ein [...]]]></description>
			<content:encoded><![CDATA[<p>Der Tag verging,<br />
und halb betrunken<br />
ist Saltan ins Bett gesunken ...<br />
Ich war dort, trank Met und Bier,<br />
naß ward nur der Schnauzbart mir.<br />
[Puschkin]</p>
<p>Die <a target="_blank" href="http://www.afterlaunch.de">Afterlaunch</a> Veranstaltung ist sehr interessant gewesen, vor allem auch das Thema "Visual Studio 2008 - Tipps und Tricks für die Praxis"von <a target="_blank" href="http://www.roland-weigelt.de/">Roland Weigelt</a> von der User Group Bonn <a href="http://www.bonn-to-code.net/">www.bonn-to-code.net</a>.</p>
<p>Auf der .NET User Group Dortmund findet auch ein Vortrag über "Tipps und Tricks in Visual Studio 2008" statt, wer afterlaunch verpasst hat, kann sich auf <strong><a target="_blank" href="http://do-dotnet.de">Do-DotNet.de</a></strong> Webseite für das Treffen am 25.04 anmelden und für alle die da waren, es findet eine vertiefung in die Tipps und Tricks statt also <a target="_blank" href="http://do-dotnet.de">Anmelden</a> lohnt sich. <img src='http://www.darkleo.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Die Teilnahme an den Treffen ist kostenlos, es gibt auch keine formale Mitgliedschaft.</p>
<p>Weitere Information findet ihr hier: <a target="_blank" href="http://www.do-dotnet.de">http://www.do-dotnet.de</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.darkleo.com/blog/2008/04/14/afterlaunch-war-letzte-woche-nachste-woche-net-user-group-dortmund/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Das nächste Treffen der Dortmunder User Group Do-DotNet</title>
		<link>http://www.darkleo.com/blog/2008/04/10/das-nachste-treffen-der-dortmunder-user-group-do-dotnet/</link>
		<comments>http://www.darkleo.com/blog/2008/04/10/das-nachste-treffen-der-dortmunder-user-group-do-dotnet/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 14:23:26 +0000</pubDate>
		<dc:creator>darkleo</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[User Group]]></category>

		<category><![CDATA[VisualStudio]]></category>

		<guid isPermaLink="false">http://www.darkleo.com/blog/2008/04/10/das-nachste-treffen-der-dortmunder-user-group-do-dotnet/</guid>
		<description><![CDATA[Es gibt das nächste Treffen im April (Fr. 25.04.2008 18-20 Uhr) einfach formlos über www.do-dotnet.de anmelden.
Die geplanten Themen:

Tipps und Tricks rund um das Visual Studio 
Es werden die kleinen und versteckten Helfer in Visual Studio zu schnellerem Arbeiten vorgestellt.
ASP .NET Monitoring
Paul Mizel zeigt wie es durch PerformanceCounter möglich ist eigene WebAnwendungen zu Monitoren.
Danach gibt es eine Überraschung  [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://do-dotnet.de" title="Do-DotNet"><img border="0" align="right" src="http://www.darkleo.com/blog/wp-content/uploads/2008/04/wb_preview.jpg" alt="wb_preview.jpg" /></a>Es gibt das <strong><font size="2">nächste Treffen</font></strong> im April (Fr. 25.04.2008 18-20 Uhr) einfach formlos über <a target="_blank" href="http://www.do-dotnet.de">www.do-dotnet.de</a> anmelden.</p>
<p>Die geplanten Themen:</p>
<ul>
<li><strong>Tipps und Tricks rund um das Visual Studio <br />
</strong>Es werden die kleinen und versteckten Helfer in Visual Studio zu schnellerem Arbeiten vorgestellt.</li>
<li><strong>ASP .NET Monitoring</strong><br />
Paul Mizel zeigt wie es durch PerformanceCounter möglich ist eigene WebAnwendungen zu Monitoren.</li>
<li><strong>Danach gibt es eine Überraschung <img src='http://www.darkleo.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></li>
</ul>
<p>Die Teilnahme an den Treffen ist kostenlos, es gibt auch keine formale Mitgliedschaft.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.darkleo.com/blog/2008/04/10/das-nachste-treffen-der-dortmunder-user-group-do-dotnet/feed/</wfw:commentRss>
		</item>
		<item>
		<title>WCSF - PageFlow Suspend and Resume by UserID</title>
		<link>http://www.darkleo.com/blog/2008/04/01/wcsf-pageflow-suspend-and-resume-by-userid/</link>
		<comments>http://www.darkleo.com/blog/2008/04/01/wcsf-pageflow-suspend-and-resume-by-userid/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 11:22:45 +0000</pubDate>
		<dc:creator>darkleo</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[WCSF]]></category>

		<guid isPermaLink="false">http://www.darkleo.com/blog/2008/04/01/wcsf-pageflow-suspend-and-resume-by-userid/</guid>
		<description><![CDATA[Die Aufgabe ist es die Arbeitsabläufe zu speichern um später weiter zu arbeiten und vielleicht auch weiter zu delegieren.
Wir speichern jeden Vorgang mit dem Benutzernamen ab dazu erstellen wir UserCorrelationTokenProvider was wir später über die Web.config noch bekannt geben werden.
public class UserCorrelationTokenProvider :
  IPageFlowCorrelationTokenProvider
{
public string GetCorrelationToken()
{return HttpContext.Current.User.Identity.Name;}
}

Eine Procedure für die Ausgabe aller Instancen mit der [...]]]></description>
			<content:encoded><![CDATA[<p>Die Aufgabe ist es die Arbeitsabläufe zu speichern um später weiter zu arbeiten und vielleicht auch weiter zu delegieren.</p>
<p>Wir speichern jeden Vorgang mit dem Benutzernamen ab dazu erstellen wir <em>UserCorrelationTokenProvider</em> was wir später über die Web.config noch bekannt geben werden.</p>
<p><font size="2" color="#0000ff">public<font size="2"> </font><font size="2" color="#0000ff">class</font><font size="2"> </font><font size="2" color="#2b91af">UserCorrelationTokenProvider</font><font size="2"> :<br />
  </font><font size="2" color="#2b91af">IPageFlowCorrelationTokenProvider<br />
</font><font size="2"><font color="#000000">{</font><br />
</font><font size="2" color="#0000ff">public</font><font size="2"> </font><font size="2" color="#0000ff">string</font><font size="2"> <font color="#000000">GetCorrelationToken()</font><br />
<font color="#000000">{</font></font><font size="2" color="#0000ff">return</font><font size="2"> </font><font size="2" color="#2b91af">HttpContext</font><font size="2"><font color="#000000">.Current.User.Identity.Name;}<br />
</font><font color="#000000">}</font><br />
</font><br />
<font color="#000000">Eine Procedure für die Ausgabe aller Instancen mit der UserID als Parameter:</font></font><font size="2" color="#0000ff"> </font></p>
<p><font size="2"><font size="2"><font color="#808080">set ANSI_NULLS ON<br />
set QUOTED_IDENTIFIER ON<br />
go<br />
CREATE PROCEDURE [dbo].[pageFlow_GetAllInstanceByCorrelationToken]<br />
@correlationToken NVARCHAR(256)<br />
AS<br />
BEGIN<br />
SELECT * FROM  dbo.pageFlow_InstanceStore WHERE<br />
CorrelationToken = @correlationToken<br />
END<br />
GO</font></font></font></p>
<p><font size="2"><font size="2">Zugriff auf die Procedure:</font></font></p>
<p><font size="2"><font size="2"><font size="2" color="#0000ff">public<font size="2"> </font><font size="2" color="#2b91af">List</font><font size="2">&lt;</font><font size="2" color="#2b91af">PageFlowInstanceItem</font><font size="2">&gt; GetInstancesList()<br />
{<br />
</font><font size="2" color="#2b91af">List</font><font size="2">&lt;</font><font size="2" color="#2b91af">PageFlowInstanceItem</font><font size="2">&gt; result = </font><font size="2" color="#0000ff">new</font><font size="2"> </font><font size="2" color="#2b91af">List</font><font size="2">&lt;</font><font size="2" color="#2b91af">PageFlowInstanceItem</font><font size="2">&gt;();<br />
</font><font size="2" color="#0000ff">using</font><font size="2"> (</font><font size="2" color="#2b91af">SqlConnection</font><font size="2"> conn = </font><font size="2" color="#0000ff">new</font><font size="2"> </font><font size="2" color="#2b91af">SqlConnection</font><font size="2">(<br />
</font><font size="2" color="#a31515">@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=<br />
WCSF_QuickStart;Data Source=.\SQLExpress"</font><font size="2">))<br />
{<br />
</font><font size="2" color="#0000ff"> using</font><font size="2"> (</font><font size="2" color="#2b91af">SqlCommand</font><font size="2"> command = </font><font size="2" color="#0000ff">new</font><font size="2"> </font><font size="2" color="#2b91af">SqlCommand</font><font size="2">(</font><font size="2" color="#a31515">"pageFlow_GetAllInstanceByCorrelationToken"</font><font size="2">, conn))<br />
 {<br />
  command.CommandType = </font><font size="2" color="#2b91af">CommandType</font><font size="2">.StoredProcedure;<br />
</font><font size="2" color="#2b91af">  SqlParameter</font><font size="2"> IdIn = command.Parameters.Add(</font><font size="2" color="#a31515">"@correlationToken"</font><font size="2">, </font><font size="2" color="#2b91af">SqlDbType</font><font size="2">.VarChar, 255);<br />
  IdIn.Direction = </font><font size="2" color="#2b91af">ParameterDirection</font><font size="2">.Input;<br />
  IdIn.Value = </font><font size="2" color="#2b91af">HttpContext</font><font size="2">.Current.User.Identity.Name;<br />
  conn.Open();<br />
</font><font size="2" color="#0000ff">  using</font><font size="2"> (</font><font size="2" color="#2b91af">SqlDataReader</font><font size="2"> reader = command.ExecuteReader())<br />
  {<br />
</font><font size="2" color="#0000ff">   while</font><font size="2"> (reader.Read())<br />
   {<br />
    result.Add(</font><font size="2" color="#0000ff">new</font><font size="2"> </font><font size="2" color="#2b91af">PageFlowInstanceItem</font><font size="2">(<br />
</font><font size="2" color="#a31515">    "Beschreibung"</font><font size="2">,<br />
    reader[</font><font size="2" color="#a31515">"InstanceID"</font><font size="2">].ToString(),<br />
    reader[</font><font size="2" color="#a31515">"Type"</font><font size="2">].ToString()));<br />
   }<br />
  }<br />
 }<br />
}<br />
</font><font size="2" color="#0000ff">return</font><font size="2"> result;<br />
}</font></font></font></font></p>
<p><font size="2"><font size="2"><font size="2" color="#0000ff"><font color="#000000">Hiermit ist es möglich die Liste der PageFlows zu lesen, jetzt nur noch aufwecken<br />
</font><font size="2" color="#2b91af">IPageFlow</font><font size="2"> flow = </font><font size="2" color="#2b91af">PageFlowDirectory</font><font size="2">.Provider.GetPageFlow(i<font color="#000000">nstanceID</font>);<br />
<font color="#000000">flow.Resume();<br />
<font size="2">flow.RedirectToCurrentPage();</font></font></font></font></font></font></p>
<p><font size="2"><font size="2"><font size="2"><font size="2"><font size="2" color="#000000">Fertig.</font></font></font></font></font></p>
<p><font size="2">WCSF: <span class="a"><font color="#008000"><a target="_blank" href="http://www.codeplex.com/websf">www.codeplex.com/websf</a></font></span></font></p>
<p align="center"><script type="text/javascript"><!--
google_ad_client = "pub-7251294127490724";
//468x60, Erstellt 14.11.07
google_ad_slot = "1956959577";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.darkleo.com/blog/2008/04/01/wcsf-pageflow-suspend-and-resume-by-userid/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Generic Constraints</title>
		<link>http://www.darkleo.com/blog/2008/03/20/generic-constraints/</link>
		<comments>http://www.darkleo.com/blog/2008/03/20/generic-constraints/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 07:03:15 +0000</pubDate>
		<dc:creator>darkleo</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[Generics]]></category>

		<guid isPermaLink="false">http://www.darkleo.com/blog/2008/03/20/generic-constraints/</guid>
		<description><![CDATA[Heute habe ich mit mehrfachen Generics(public class MyGeneric&#60;A,B,C&#62;) gekämpft. Hab versucht verschiedene Constraints an verschiedene Typen zu setzten, g**glen war auch nicht einfach, hier ist die Lösung dazu:
public class MyGeneric&#60;A,B,C,D,P&#62;: GenericInterfaceImpl&#60;A&#62;,IGenericInterface&#60;B&#62;
where A : class
where B : IComparable 
where C : class, new()
where D : struct
where P : ProviderBase
{
//code
}
]]></description>
			<content:encoded><![CDATA[<p>Heute habe ich mit mehrfachen Generics(<font face="Courier New" style="background-color: #f9f9f9">public class MyGeneric&lt;A,B,C&gt;)</font> gekämpft. Hab versucht verschiedene Constraints an verschiedene Typen zu setzten, g**glen war auch nicht einfach, hier ist die Lösung dazu:</p>
<p><font style="background-color: #f9f9f9">public class MyGeneric&lt;A,B,C,D,P&gt;: GenericInterfaceImpl&lt;A&gt;,IGenericInterface&lt;B&gt;<br />
</font>where<font style="background-color: #f9f9f9"> A : class<br />
where B : IComparable <br />
where C : class, new()<br />
where D : struct<br />
where P : ProviderBase<br />
{<br />
//code<br />
}</font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.darkleo.com/blog/2008/03/20/generic-constraints/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Icons für eigene Anwendungen</title>
		<link>http://www.darkleo.com/blog/2008/02/18/icons-fur-eigene-anwendungen/</link>
		<comments>http://www.darkleo.com/blog/2008/02/18/icons-fur-eigene-anwendungen/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 07:50:34 +0000</pubDate>
		<dc:creator>darkleo</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://www.darkleo.com/blog/2008/02/18/icons-fur-eigene-anwendungen/</guid>
		<description><![CDATA[Kennt Ihr das Problem eigene Icons für Anwendungen zu erstellen?
Jedes mal muss ich persönlich nach Icons suchen oder immer wieder eigene erstellen.
hier ist eine schöne Sammlung von Icons.

http://www.famfamfam.com/lab/icons/
Weitere Icon-Links werden hoffentlich folgen.
http://www.crystalxp.net

]]></description>
			<content:encoded><![CDATA[<p>Kennt Ihr das Problem eigene Icons für Anwendungen zu erstellen?<br />
Jedes mal muss ich persönlich nach Icons suchen oder immer wieder eigene erstellen.</p>
<p>hier ist eine schöne Sammlung von Icons.<br />
<img src="http://www.famfamfam.com/lab/icons/silk/silk_preview_small.gif" /><br />
<a href="http://www.famfamfam.com/lab/icons/">http://www.famfamfam.com/lab/icons/</a></p>
<p>Weitere Icon-Links werden hoffentlich folgen.<br />
<a href="http://www.crystalxp.net/de.htm">http://www.crystalxp.net</a></p>
<p align="center"><!--adsense--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.darkleo.com/blog/2008/02/18/icons-fur-eigene-anwendungen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hilfreiche Externe Tools in Visual Studio</title>
		<link>http://www.darkleo.com/blog/2008/02/12/hilfreiche-externe-tools-in-visual-studio/</link>
		<comments>http://www.darkleo.com/blog/2008/02/12/hilfreiche-externe-tools-in-visual-studio/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 08:54:23 +0000</pubDate>
		<dc:creator>darkleo</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Macro]]></category>

		<category><![CDATA[VisualStudio]]></category>

		<guid isPermaLink="false">http://www.darkleo.com/blog/2008/02/12/hilfreiche-externe-tools-in-visual-studio/</guid>
		<description><![CDATA[Bei der Arbeit mit Gac müsste ich oft den public key token in den web.configs eingeben und das alles über umständliche Wege und auch das Installieren und Deinstallieren von Assemblys sollte schneller gehen können.
Hier ist die Abhilfe über Externe Tools von VisualStudio [Tools]-&#62;[External Tools...]
 

Die Einstellungen
"Use Output window" + "Treat output as Unicode" ermöglicht eine einfachere [...]]]></description>
			<content:encoded><![CDATA[<p>Bei der Arbeit mit Gac müsste ich oft den public key token in den web.configs eingeben und das alles über umständliche Wege und auch das Installieren und Deinstallieren von Assemblys sollte schneller gehen können.</p>
<p>Hier ist die Abhilfe über Externe Tools von VisualStudio [<strong>Tools</strong>]-&gt;[<strong>External Tools...</strong>]<br />
<img src="http://www.darkleo.com/blog/wp-content/uploads/2008/02/externe_tools_menu.jpg" alt="externe_tools_menu.jpg" /> <br />
<img src="http://www.darkleo.com/blog/wp-content/uploads/2008/02/externe_tools.jpg" alt="externe_tools.jpg" /><br />
Die Einstellungen<br />
"Use Output window" + "Treat output as Unicode" ermöglicht eine einfachere Ausgabe im Output-Fenster.<br />
"Promt for arguments" für eigene Parametereingaben<br />
"Close on exit" um das Consolen-Fenster automatisch nach der Verarbeitung zu beenden</p>
<p><strong>Hilfreiche Tools</strong><br />
<strong>Darkleo SN </strong><br />
Command: C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sn.exe<br />
           oder C:\Programme\Microsoft Visual Studio 8\SDK\v2.0\Bin\sn.exe<br />
Arguments: -Tp "$(TargetPath)"</p>
<p><strong>Darkleo SecUtil<br />
</strong>Command: C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\secutil.exe<br />
    oder C:\Programme\Microsoft Visual Studio 8\SDK\v2.0\Bin\secutil.exe<br />
Arguments: -hex -s $(TargetPath)</p>
<p><strong>Darkleo GAC Install</strong><br />
Command: C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe<br />
oder C:\Programme\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe<br />
Arguments: -i $(TargetPath)</p>
<p><strong>Darkleo GAC Uninstall<br />
</strong>Command: C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe<br />
oder C:\Programme\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe<br />
Arguments: -u $(ItemFilename)</p>
<p>Zum Portieren (Import/Export) der Extrernal Tools von VS 8.0 auf VS 9.0 ist es Hilfreich zu wissen, dass External Tools in der Regestry abgelegt werden:<br />
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\External Tools<br />
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\External Tools</p>
<p>WSS External Tools: <a target="_blank" href="http://sharepointsolutions.blogspot.com/2006/10/automation-in-visual-studio-2005-for.html">Automation in Visual Studio 2005 for WSS v3 Feature Development </a> </p>
<p>Für alle die Selbst Tools einbinden wollen, ist hier die Liste der einzelnen Parameter.</p>
<table frame="lhs" border="0" width="100%">
<tr>
<th>Name</th>
<th>Argument</th>
<th>Beschreibung</th>
</tr>
<tr>
<td>Elementpfad</td>
<td>$(ItemPath)</td>
<td>Der vollständige Dateiname der aktuellen Quelle (als Laufwerk + Pfad + Dateiname definiert); leer, wenn das aktive Fenster kein Quellfenster ist.</td>
</tr>
<tr>
<td>Elementverzeichnis</td>
<td>$(ItemDir)</td>
<td>Das Verzeichnis der aktuellen Quelle (als Laufwerk + Pfad definiert); leer, wenn das aktive Fenster kein Quellfenster ist.</td>
</tr>
<tr>
<td>Elementdateiname</td>
<td>$(ItemFilename)</td>
<td>Der Dateiname der aktuellen Quelle (als Dateiname definiert); leer, wenn das aktive Fenster kein Quellfenster ist.</td>
</tr>
<tr>
<td>Elementerweiterung</td>
<td>$(ItemExt)</td>
<td>Die Dateinamenerweiterung der aktuellen Quelle.</td>
</tr>
<tr>
<td>Aktuelle Zeile</td>
<td>&amp;(CurLine)</td>
<td>Die aktuelle Zeilenposition des Cursors im Editor.</td>
</tr>
<tr>
<td>Aktuelle Spalte</td>
<td>&amp;(CurCol)</td>
<td>Die aktuelle Spaltenposition des Cursors im Editor.</td>
</tr>
<tr>
<td>Aktueller Text</td>
<td>&amp;(CurText)</td>
<td>Der markierte Text.</td>
</tr>
<tr>
<td>Zielpfad</td>
<td>$(TargetPath)</td>
<td>Der vollständige Dateiname des zu erstellenden Elements (als Laufwerk + Pfad + Dateiname definiert).</td>
</tr>
<tr>
<td>Zielverzeichnis</td>
<td>$(TargetDir)</td>
<td>Das Verzeichnis des zu erstellenden Elements.</td>
</tr>
<tr>
<td>Zielname</td>
<td>$(TargetName)</td>
<td>Der Dateiname des zu erstellenden Elements.</td>
</tr>
<tr>
<td>Zielerweiterung</td>
<td>$(TargetExt)</td>
<td>Die Dateinamenerweiterung zu erstellenden Elements.</td>
</tr>
<tr>
<td>Projektverzeichnis</td>
<td>$(ProjDir)</td>
<td>Das Verzeichnis des aktuellen Projekts (als Laufwerk + Pfad definiert).</td>
</tr>
<tr>
<td>Projektdateiname</td>
<td>$(ProjFileName)</td>
<td>Der Dateiname des aktuellen Projekts (als Laufwerk + Pfad + Dateiname definiert).</td>
</tr>
<tr>
<td>Projektmappenverzeichnis</td>
<td>$(SolutionDir)</td>
<td>Das Verzeichnis der aktuellen Projektmappe (als Laufwerk + Pfad definiert).</td>
</tr>
<tr>
<td>Projektmappen-Dateiname</td>
<td>$(SolutionFileName)</td>
<td>Der Dateiname der aktuellen Projektmappe (als Laufwerk + Pfad + Dateiname definiert).</td>
</tr>
</table>
<p align="center"><!--adsense--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.darkleo.com/blog/2008/02/12/hilfreiche-externe-tools-in-visual-studio/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wie kann ich Unterschiede in zwei Framework DLL&#8217;s feststellen?</title>
		<link>http://www.darkleo.com/blog/2008/02/05/wie-kann-ich-unterschiede-der-zwei-framework-dlls-vergleichen/</link>
		<comments>http://www.darkleo.com/blog/2008/02/05/wie-kann-ich-unterschiede-der-zwei-framework-dlls-vergleichen/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 07:56:16 +0000</pubDate>
		<dc:creator>darkleo</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.darkleo.com/blog/2008/02/05/wie-kann-ich-unterschiede-der-zwei-framework-dlls-vergleichen/</guid>
		<description><![CDATA[Ich hatte ein Problem, dass auf einem System ein Interner Fehler des .NET Frameworks auftratt und auf dem anderen System nicht und müsste den Fehler analysieren.
Als Erstes habe ich binär versucht Unterschiede festzustellen. 95% Unterschschied in der System.Web.dll 2.0.5727.832 und 2.0.5727.1433.
Um genauer etwas zu sehen könnte man versuchen mit dem Reflector for .NET von Lutz Roeder [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hatte ein Problem, dass auf einem System ein Interner Fehler des .NET Frameworks auftratt und auf dem anderen System nicht und müsste den Fehler analysieren.</p>
<p>Als Erstes habe ich binär versucht Unterschiede festzustellen. 95% Unterschschied in der System.Web.dll 2.0.5727.832 und 2.0.5727.1433.</p>
<p>Um genauer etwas zu sehen könnte man versuchen mit dem <a target="_blank" href="http://www.aisto.com/roeder/dotnet/"><strong>Reflector for .NET</strong></a> von Lutz Roeder reinschauen oder die DebugSourcen von Microsoft.<br />
- Zwei Assemblys können beim Reflector nicht geladen werden und auch nicht verglichen werden<br />
- Sourcen von .NET Frameworks von Microsoft zu finden und zu bekommen.</p>
<p><strong>Lösungsansatz:<br />
</strong>Ausführen<br />
<font color="#0000ff">%comspec% /k ""C:\Programme\Microsoft Visual Studio 8\VC\vcvarsall.bat"" x86</font></p>
<p><font color="#0000ff">ildasm System.Web.dll /OUT=System.Web.il<br />
ildasm V832.System.Web.dll /OUT=V832.System.Web.il</font></p>
<p>Somit bekommen wir zwei <font size="2">Intermediate Language</font>-Files die IL-Code enthalten und mit einem Tool wie <a target="_blank" href="http://kdiff3.sourceforge.net/"><strong>KDiff </strong></a>lassen sich die Unterschiede schnell aufzeigen und untersuchen.<br />
<img width="545" src="http://www.darkleo.com/blog/wp-content/uploads/2008/02/kdiff.jpg" alt="kdiff.jpg" height="340" style="width: 541px; height: 399px" /></p>
<p align="center"><!--adsense--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.darkleo.com/blog/2008/02/05/wie-kann-ich-unterschiede-der-zwei-framework-dlls-vergleichen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>IP und Port in WCF lesen</title>
		<link>http://www.darkleo.com/blog/2008/01/30/ip-und-port-in-wcf-lesen/</link>
		<comments>http://www.darkleo.com/blog/2008/01/30/ip-und-port-in-wcf-lesen/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 14:00:00 +0000</pubDate>
		<dc:creator>darkleo</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://www.darkleo.com/blog/2008/01/30/ip-und-port-in-wcf-lesen/</guid>
		<description><![CDATA[Ein kleiner Snippet wie man an die IP und Port in WCF dran kommt. 
&#160;
OperationContext context = OperationContext.Current;
&#160;
MessageProperties messageProperties = context.IncomingMessageProperties;
&#160;
RemoteEndpointMessageProperty endpointProperty =
  messageProperties&#91;RemoteEndpointMessageProperty.Name&#93;
  as RemoteEndpointMessageProperty;
&#160;
//IP-Adresse: endpointProperty.Address
//Port: endpointProperty.Port
&#160;

]]></description>
			<content:encoded><![CDATA[<p><span style="color: #2b91af"><font color="#000000">Ein kleiner Snippet wie man an die IP und Port in WCF dran kommt.</font> </span></p>
<pre class="csharp">&nbsp;
OperationContext context = OperationContext.<span style="color: #0000FF;">Current</span>;
&nbsp;
MessageProperties messageProperties = context.<span style="color: #0000FF;">IncomingMessageProperties</span>;
&nbsp;
RemoteEndpointMessageProperty endpointProperty =
  messageProperties<span style="color: #000000;">&#91;</span>RemoteEndpointMessageProperty.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#93;</span>
  <span style="color: #0600FF;">as</span> RemoteEndpointMessageProperty;
&nbsp;
<span style="color: #008080; font-style: italic;">//IP-Adresse: endpointProperty.Address</span>
<span style="color: #008080; font-style: italic;">//Port: endpointProperty.Port</span>
&nbsp;</pre>
<p align="center"><!--adsense--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.darkleo.com/blog/2008/01/30/ip-und-port-in-wcf-lesen/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
