<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title>Blog von Manfred Steyer</title>
		<link>http://www.software-engineer.biz/index.php</link>
		<description><![CDATA[]]></description>
		<copyright>Copyright 2010, Manfred Steyer</copyright>
		<managingEditor>Manfred Steyer</managingEditor>
		<language>en-US</language>
		<generator>SPHPBLOG 0.5.1</generator>
		<item>
			<title>Buch .NET 4 UPDATE ist nun da!!</title>
			<link>http://www.software-engineer.biz/index.php?entry=entry100907-232013</link>
			<description><![CDATA[Ich hab&#039; heute meine Autorenexemplare von  <a href="http://www.amazon.de/NET-4-0-Update-Holger-Schwichtenberg/dp/3866454430/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1283894955&amp;sr=8-1" target="_blank" >.NET 4 UPDATE (MSPRESS)</a>  erhalten – cooles Gefühl, sein eigenes Buch in Händen zu halten. <br /><br /><b>Zielgruppe</b> <br /><br />Das Buch erklärt die Neuerungen in .NET 4 und wendet sich somit an Entwickler, die bereits mit .NET Erfahrung haben und nun Ihr Wissen auf den neuesten Stand bringen möchten.<br /><br /> <b>Inhalt</b> <br /><br />Ich poste hier mal das  <a href="http://www.softwarearchitekt.at/downloads/N4U_Inhalt.pdf" target="_blank" >Inhaltsverzeichnis</a> .<br /><br />  <a href="http://www.amazon.de/NET-4-0-Update-Holger-Schwichtenberg/dp/3866454430/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1283894955&amp;sr=8-1" target="_blank" ><img src="images/n4u_cover-small2.png" width="170" height="240" border="0" alt="" /> </a>  ]]></description>
			<category>Meine Bücher, .Net 4, Code Contracts, Parallel Extensions, Entity Framework, ASP.NET MVC, SOA (Serviceorientierte Architekturen)</category>
			<guid isPermaLink="true">http://www.software-engineer.biz/index.php?entry=entry100907-232013</guid>
			<author>Manfred Steyer</author>
			<pubDate>Tue, 07 Sep 2010 21:20:13 GMT</pubDate>
			<comments>http://www.software-engineer.biz/comments.php?y=10&amp;m=09&amp;entry=entry100907-232013</comments>
		</item>
		<item>
			<title>SQL Server Express 2008 ohne Sysadmin</title>
			<link>http://www.software-engineer.biz/index.php?entry=entry100902-135632</link>
			<description><![CDATA[Wenn man bei der Installation von SQL Server 2008 auf das Festlegen eines Sysadmins vergisst, steht man ohne Admin-Berechtigungen da. Unter <a href="http://www.faq-o-matic.net/2010/05/21/sql-server-2008-admins-haben-keine-sysadmin-rechte/" target="_blank" >http://www.faq-o-matic.net/2010/05/21/s ... in-rechte/</a> findet man eine Lösung zu diesem ärgerlichen Problem. <br /><br />Die Lösung besteht darin, SQL Server zu stoppen und als lokaler Admin über die Kommandozeile (welche als Administrator auszuführen ist!) mit dem Schalter -m im Einzelbenutzermodus zu starten, wo lokale Admins auch wirklich Admin-Rechte haben: <br /><br /><i>cd C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Binn</i><br /><i>sqlservr.exe –m –sSQLEXPRESS</i><br /><br />Anschließend kann man eine neue Kommandozeile (wieder als Admin!) starten und sich mit OSQL (z. B. osql –E –sMyServer\SQLEXPRESS) zum Server verbinden und Benutzer anlegen sowie diese zu Sysadmins machen:<br /><br />CREATE LOGIN [DOMAIN\Username] FROM WINDOWS<br />go<br />exec sp_addsrvrolemember &#039;DOMAIN\Username&#039;, &#039;sysadmin&#039;<br />go<br /><br />Danach wird der über die Konsole gestartete Server beendet (STRG + C) und wieder als Dienst gestartet. Fertig!<br /><br /> <b>Ich hatte dabei zwei Probleme, die ich wie folgt gelöst habe:</b> <br />- Ich konnte mich mit OSQL nicht via TCP verbinden, also habe ich TCP einfach im SQL Server Configuration Manager (Start Menü | SQL Server | Configuration) deaktiviert. <br />- Beim Start des Servers mit der Option -m habe ich die Info bekommen, dass ich einen bestimmten Tracelevel verwenden muss. Somit habe ich den Server mit -m -t TRACELEVEL gestartet, wobei TRACELEVEL der Nummer aus der Meldung entspricht.]]></description>
			<category></category>
			<guid isPermaLink="true">http://www.software-engineer.biz/index.php?entry=entry100902-135632</guid>
			<author>Manfred Steyer</author>
			<pubDate>Thu, 02 Sep 2010 11:56:32 GMT</pubDate>
			<comments>http://www.software-engineer.biz/comments.php?y=10&amp;m=09&amp;entry=entry100902-135632</comments>
		</item>
		<item>
			<title>Buchprojekt .NET 4 Update - Erscheinungstermin steht fest</title>
			<link>http://www.software-engineer.biz/index.php?entry=entry100823-231415</link>
			<description><![CDATA[Seit kurzem steht der Erscheinungstermin für das Buch  <a href="http://www.amazon.de/NET-4-0-Update-Holger-Schwichtenberg/dp/3866454430/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1282598123&amp;sr=8-1" target="_blank" >.NET 4 Update</a> , das ich gemeinsam mit Holger Schwichtenberg geschrieben habe, fest: 1. September 2010. Das Buch richtet sich an .NET 3.5-Entwickler und zeigt die Neuerungen in .NET 4 auf. Weitere Infos dazu gibt es  <a href="http://www.amazon.de/NET-4-0-Update-Holger-Schwichtenberg/dp/3866454430/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1282598123&amp;sr=8-1" target="_blank" >hier</a> .<br /><br /> <img src="images/n4u_cover-small2.png" width="170" height="240" border="0" alt="" /> ]]></description>
			<category>Meine Bücher, .Net 4</category>
			<guid isPermaLink="true">http://www.software-engineer.biz/index.php?entry=entry100823-231415</guid>
			<author>Manfred Steyer</author>
			<pubDate>Mon, 23 Aug 2010 21:14:15 GMT</pubDate>
			<comments>http://www.software-engineer.biz/comments.php?y=10&amp;m=08&amp;entry=entry100823-231415</comments>
		</item>
		<item>
			<title>BASTA! 2010 in nicht einmal einem Monat</title>
			<link>http://www.software-engineer.biz/index.php?entry=entry100823-230105</link>
			<description><![CDATA[In nicht einmal einem Monat startet mit der  <a href="http://www.basta.net" target="_blank" >BASTA!</a>  wieder die größte unabhängige .NET-Konferenz im deutschsprachigen Raum. Auch ich werde wieder meinen Anteil dazu leisten. Nachfolgend sind meine Sessions aufgelistet. Darüber hinaus bin ich auch dieses Mal für den Agile-Track verantwortlich. Weitere Informationen gibt es unter <a href="http://www.basta.net." target="_blank" >www.basta.net.</a><br /><br />- Anforderungen in agilen Projekten – Wie passt das zusammen? <br />- Parallele Applikationen mit .NET 4 <br />- Code Contracts in .NET 4: von 0 auf 100 <br />- NHibernate vs. Entity Framework <br /><br /><br /> <img src="images/basta2010.png" width="249" height="77" border="0" alt="" /> ]]></description>
			<category>Konferenzen</category>
			<guid isPermaLink="true">http://www.software-engineer.biz/index.php?entry=entry100823-230105</guid>
			<author>Manfred Steyer</author>
			<pubDate>Mon, 23 Aug 2010 21:01:05 GMT</pubDate>
			<comments>http://www.software-engineer.biz/comments.php?y=10&amp;m=08&amp;entry=entry100823-230105</comments>
		</item>
		<item>
			<title>REST mit WCF 4.0: Conditional GET und ETag-Unterstützung</title>
			<link>http://www.software-engineer.biz/index.php?entry=entry100728-195458</link>
			<description><![CDATA[Mit Conditional GET wird ein durch das HTTP-Protokoll unterstützter Mechanismus bezeichnet, der es Clients erlaubt, Dokumente lediglich unter der Bedingung, dass sie sich seit dem letzten Aufruf geändert haben, anzufordern. Hat sich das Dokument nicht geändert, antwortet der Server mit   dem Statuscode 304 (Not Modified). Ansonsten wird das geänderte Dokument zurückgeliefert.<br /><br />Um entscheiden zu können, ob sich ein Dokument geändert hat, sendet der Server mit den einzelnen Antworten einen sogenannten Entity Tag (ETag). Dieser beinhaltet einen Wert, welcher die aktuelle Version repräsentiert. Dabei kann es sich zum Beispiel um eine Versionsnummer, einen Zeitstempel oder einen Hashwert handeln. Bei weiteren Anfragen, welche sich auf dasselbe Dokument beziehen, sendet der Client diesen Wert an den Server zurück. Durch einen Vergleich mit dem aktuellen ETag kann dieser somit entscheiden, ob der Client bereits die aktuelle Version hat oder ob sich das Dokument seit dem letzten Abrufen geändert hat.<br /><br />Ein Beispiel für die serverseitige Implementierung von Conditional-Get findet sich im nachfolgenden Listing. Nachdem der angeforderte Flug geladen wurde, wird dessen ETag, welcher im betrachteten Listing der Eigenschaft Version entspricht, ermittelt. Mit der Methode CheckConditionalRetrieve wird anschließend geprüft, ob dieser ETag dem eventuell vom Client mitgesendeten ETag entspricht. Falls dem so ist, löst diese Methode eine WebFaultException mit dem Http-Statuscode 304 (Not Modified) aus. Ansonsten wird der aktuelle ETag mit der Methode SetETag definiert. Somit wird festgelegt, dass dieser im Zuge der Antwortnachricht zum Client gesendet werden soll. Danach wird der gewünschte Flug zurückgeliefert.<br /><br /><pre><br />public Flug FindFlight(string flugNummer)<br />{<br />    Flug flug = […] // Flug laden<br />    string etag = flug.Version.ToString();<br />    WebOperationContext.Current.IncomingRequest.CheckConditionalRetrieve(etag);<br />    WebOperationContext.Current.OutgoingResponse.SetETag(etag);<br />    return flug;<br />}<br /><br /></pre><br /><br />
<hr/>
<br /><a href="http://www.amazon.de/NET-4-0-Update-Holger-Schwichtenberg/dp/3866454430/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1278627634&amp;sr=8-1" target="_blank" ><img src="images/n4u_cover-small3.png" width="102" height="144" border="0" alt="" /></a><br /><br />Dieser Eintrag ist ein Auszug aus meinem aktuellen Buch  <a href="http://www.amazon.de/NET-4-0-Update-Holger-Schwichtenberg/dp/3866454430/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1278627634&amp;sr=8-1" target="_blank" >.Net 4 Update</a> , das ich zusammen mit Holger Schwichtenberg verfasst habe.<br /><br />
<hr/>
<br /><br />Das nächste Listing zeigt eine zur gerade betrachteten serverseitigen Implementierung passende Implementierung eines Clients. Im Feld lastETag wird der ETag des letzten Abrufs festgehalten. Die gewünschte Resource wird unter Verwendung von WebRequest und WebResponse abgerufen. Über den Header-Eintrag  If-None-Match wird der letzte bekannte ETag an den Client gesendet. Dieser Eintrag legt fest, dass die angforderte Resource nur dann an den Client gesendet werden soll, wenn sie sich seit dem letzten Abruf geändert hat. Mit GetResponse wird die Antwort des Servers abgerufen. Kommt es dabei zu einer WebException, wird geprüft, ob es sich beim übermittelten HTTP-Statuscode um den Wert 304 (Not Modified) handelt. Ist dem so, wurde das Dokument in der Zwischenzeit nicht geändert. Ansonsten ist ein (anderer) Fehler aufgetreten. Wurde die Resource zum Client gesendet, wird sie unter Verwendung des DataContractSerializer in ein Objekt übergefürt.<br /><br /><pre><br />[…]<br />private static string lastETag = null;<br /><br />private static void FindFlight()<br />{<br />    WebRequest request; <br />    WebResponse response = null;<br /><br />    request = WebRequest.Create(&quot;http://localhost:4924/FlugService.svc/flight/LH0815&quot;);<br /><br />    if (!string.IsNullOrEmpty(lastETag))<br />    {<br />        request.Headers[&quot;If-None-Match&quot;] = lastETag;<br />    }<br /><br />    try<br />    {<br />            response = request.GetResponse();<br />    }<br />    catch (WebException e)<br />    {<br />        HttpWebResponse r = e.Response as HttpWebResponse;<br />        if (r.StatusCode == HttpStatusCode.NotModified)<br />        {<br />            Console.WriteLine(&quot;Keine Änderung!&quot;);<br />        }<br />        else<br />        {<br />            Console.WriteLine(e.Message);<br />        }<br />        return;<br />    }<br />            <br />    lastETag = response.Headers[&quot;ETag&quot;];<br /><br />    DataContractSerializer s = new DataContractSerializer(typeof(Flug));<br />    Flug f = (Flug)s.ReadObject(response.GetResponseStream());<br /><br />    Console.WriteLine(f.FulgNummer + &quot;, Version: &quot; + f.Version);<br />}<br /><br /></pre>]]></description>
			<category>.Net 4, SOA (Serviceorientierte Architekturen)</category>
			<guid isPermaLink="true">http://www.software-engineer.biz/index.php?entry=entry100728-195458</guid>
			<author>Manfred Steyer</author>
			<pubDate>Wed, 28 Jul 2010 17:54:58 GMT</pubDate>
			<comments>http://www.software-engineer.biz/comments.php?y=10&amp;m=07&amp;entry=entry100728-195458</comments>
		</item>
		<item>
			<title>WCF REST-Services mit ASP.NET über Routen verheiraten</title>
			<link>http://www.software-engineer.biz/index.php?entry=entry100709-001836</link>
			<description><![CDATA[WCF REST-Services können ab .Net 4 über ASP.NET-Routen veröffentlicht werden, sofern vom ASP.NET- Kompatibilitätsmodus gebraucht gemacht wird. Zur Veranschaulichung zeigt das folgende Listing  eine Implementierung der Methode <i>RegisterRoutes</i>, welche unter anderem eine <i>ServiceRoute</i>, welche auf den REST-Service FlugService verweist, registriert. An den Konstruktor dieser Methode wird die Route, eine Instanz von <i>WebServiceHostFactory</i> sowie der Typ der Service-Implementierung übergeben. Dies bewirkt, dass der REST-Service über die Url <i>FlugService</i> verfügbar gemacht wird. <br /><br /><pre><br />public static void RegisterRoutes(RouteCollection routes)<br />{<br />    routes.IgnoreRoute(&quot;{resource}.axd/{*pathInfo}&quot;);<br /><br />    WebServiceHostFactory factory = new WebServiceHostFactory();<br />    routes.Add(new ServiceRoute(&quot;FlugService&quot;, factory, typeof(FlugService.FlugService)));<br /><br />    routes.MapRoute(<br />        &quot;Default&quot;, // Route name<br />        &quot;{controller}/{action}/{id}&quot;, // URL with parameters<br />        new { controller = &quot;Home&quot;, action = &quot;Index&quot;, id = UrlParameter.Optional } // Parameter defaults<br />    );<br />}<br /></pre><br /><br /><a href="http://www.amazon.de/NET-4-0-Update-Holger-Schwichtenberg/dp/3866454430/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1278627634&amp;sr=8-1" target="_blank" ><img src="images/n4u_cover-small3.png" width="102" height="144" border="0" alt="" /></a><br /><br />Dieser Eintrag ist ein Auszug aus meinem aktuellen Buch  <a href="http://www.amazon.de/NET-4-0-Update-Holger-Schwichtenberg/dp/3866454430/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1278627634&amp;sr=8-1" target="_blank" >.Net 4 Update</a> , das ich zusammen mit Holger Schwichtenberg verfasst habe.<br />]]></description>
			<category>Meine Artikel, .Net 4, SOA (Serviceorientierte Architekturen)</category>
			<guid isPermaLink="true">http://www.software-engineer.biz/index.php?entry=entry100709-001836</guid>
			<author>Manfred Steyer</author>
			<pubDate>Thu, 08 Jul 2010 22:18:36 GMT</pubDate>
			<comments>http://www.software-engineer.biz/comments.php?y=10&amp;m=07&amp;entry=entry100709-001836</comments>
		</item>
		<item>
			<title>Kompakte Einführung in die Workflow Foundation 4</title>
			<link>http://www.software-engineer.biz/index.php?entry=entry100709-001255</link>
			<description><![CDATA[ <img src="images/dotnet-magazin-2010-07.jpg" width="200" height="283" border="0" alt="" /> <br /><br />In der aktuellen Ausgabe 8.2010 des dotnet-Magazins  beschreibe ich im Artikel <i>Workflow Foundation 4 – Was ist neu?</i> in kompakter Form, einige Neuerungen der Workflow Foundation 4. Im darauf folgenden Artikel in der nächsten Ausgabe widtme ich mich dann den Möglichkeiten, eigene Aktivitäten zu implementieren.<br /><br />Mehr Infos sowie die Quellcode-Beispiele dazu finden sich unter [1].<br /><br />[1] <a href="http://it-republik.de/dotnet/dotnet-magazin-ausgaben/Funktionale-Programmierung-000404.html" target="_blank" >http://it-republik.de/dotnet/dotnet-mag ... 00404.html</a>]]></description>
			<category>Meine Artikel, .Net 4, SOA (Serviceorientierte Architekturen)</category>
			<guid isPermaLink="true">http://www.software-engineer.biz/index.php?entry=entry100709-001255</guid>
			<author>Manfred Steyer</author>
			<pubDate>Thu, 08 Jul 2010 22:12:55 GMT</pubDate>
			<comments>http://www.software-engineer.biz/comments.php?y=10&amp;m=07&amp;entry=entry100709-001255</comments>
		</item>
		<item>
			<title>Caching für Alle in .Net 4</title>
			<link>http://www.software-engineer.biz/index.php?entry=entry100617-000414</link>
			<description><![CDATA[Das .NET-Framework enthält seit seinen ersten Tagen eine Cache-Implementierung – allerdings lediglich für Web-Applikationen. Um auch andere Applikationen von Caching-Mechanismen profitieren zu lassen, werden entsprechende Konstrukte ab Version 4 für sämtliche Applikationen über  den Namespace System.Runtime.Caching in der gleichnamigen Assembly angeboten. Die damit bereitgestellte Implementierung ähnelt jener von ASP.NET und sieht zurzeit lediglich einen In-Memory-Cache (MemoryCache) vor. Weitere Cache-Implementierungen können jedoch durch Ableiten von der Basisklasse ObjectCache entwickelt werden.<br /><br /><a href="http://www.amazon.de/gp/product/3866454430/ref=s9_simh_gw_p14_i1?pf_rd_m=A3JWKAKR8XB7XF&amp;pf_rd_s=center-2&amp;pf_rd_r=1P7QNSVQ07E16ZF96XKN&amp;pf_rd_t=101&amp;pf_rd_p=463375173&amp;pf_rd_i=301128" target="_blank" ><img src="images/n4u_cover-small3.png" width="102" height="144" border="0" alt="" /></a><br /><br />Dieser Blogeintrag ist ein Auszug aus meinem aktuellen Buch  <a href="http://www.amazon.de/gp/product/3866454430/ref=s9_simh_gw_p14_i1?pf_rd_m=A3JWKAKR8XB7XF&amp;pf_rd_s=center-2&amp;pf_rd_r=1P7QNSVQ07E16ZF96XKN&amp;pf_rd_t=101&amp;pf_rd_p=463375173&amp;pf_rd_i=301128" target="_blank" >.Net 4 Update</a>.<br /><br />Ein Beispiel für die Verwendung von MemoryCache findet sich im nachfolgenden Listing. Zunächst wird hier über die statische Eigenschaft MemoryCache.Default eine Referenz auf die global bereitgestellte Standard-Instanz von MemoryCache bezogen und versucht, über den Schlüssel someText einen gecachten String abzurufen. Konnte dieser nicht ermittelt werden, wird der Eintrag aus einer Datei gelesen sowie unter dem mit ihm assoziierten Schlüssel someText im Cache abgelegt. Im Zuge dessen wird auch eine CacheItemPolicy übergeben. Diese legt fest, wann der Cache-Eintrag wieder aus dem Cache entfernt werden soll. Dazu wird mit der Eigenschaft SlidingExpiration festgelegt, nach welchem Zeitraum, in welchem nicht auf das Element zugegriffen wird, dieses zu entfernen ist. Alternativ dazu kann mit der Eigenschaft AbsoluteExpiration eine absolute Zeitspanne, nach welcher der Eintrag entfernt werden soll, angeführt werden. Daneben bietet Priority vom Enum-Typ CacheItemPriority die Möglichkeit zu definieren, dass ein Eintrag gar nicht aus dem Cache entfernt werden soll. Dies wird mit dem Wert NotRemovable angezeigt. Zusätzlich zur SlidingExpiration wird auch ein ChangeMonitor vom Typ HostFileChangeMonitor registriert. Dieser überwacht die an den Konstruktor übergebenen Dateien und/oder Ordner auf Änderungen. Im Fall einer Änderung werden die mit der Policy assoziierten Einträge aus dem Cache entfernt. Neben dem HostFileChangeMonitor existiert auch ein SqlChangeMonitor, welcher eine Instanz der seit .NET 2.0 verfügbaren Klasse SqlDependency kapselt und diese zur Überwachung von Änderungen in einer SQL Server-Datenbank (ab Version 2005) verwendet. Weitere derartige Mechanismen können durch Ableiten von der Basisklasse ChangeMonitor oder einer deren Subklassen bereitgestellt werden.<br /><pre><br />const string source = @”c:\temp\someTextFile.txt”;<br />ObjectCache cache = MemoryCache.Default;<br />string fileContents = cache[”someText”] as string;<br /><br />if (fileContents == null)<br />{<br />Console.WriteLine(„Element war nicht (mehr) im Cache!“);<br />CacheItemPolicy policy = new CacheItemPolicy();<br />policy.SlidingExpiration = TimeSpan.FromSeconds(50);<br /><br />List&lt;string&gt; filePaths = new List&lt;string&gt;();<br />filePaths.Add(source);<br />policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));<br /><br />fileContents = File.ReadAllText(source);<br />cache.Set(“someText”, fileContents, policy);<br />}<br />Console.WriteLine(fileContents);<br /></pre><br />Um die verwendeten Caches über die Applikationskonfigurationsdatei anpassen zu können, kann jeder Instanz von MemoryCache ein Name spendiert werden. Der Name der im letzten Listing verwendeten Standard-Instanz lautet auf Default. Weiteren Instanzen kann, nachfolgend gezeigt, über den Konstruktor ein Name zugewiesen werden. Dabei gilt zu beachten, dass es verschiedene Instanzen mit demselben Namen geben kann. <br /><br />In der Applikationskonfigurationsdatei können diesen Namen Konfigurationseigenschaften zugewiesen werden. Im nachfolgenden Listing wird beispielsweise für den Cache mit dem Namen MyCache festgelegt, dass dieser max. 10 MB einnehmen soll (cacheMemoryLimitMegabytes) bzw. max. 15 % des physikalischen Speichers (physicalMemoryLimitPercentage) sowie dass in Intervallen von einer Minute (pollingInterval) geprüft werden soll, ob diese Grenzen überschritten wurden. Als Alternative zur Definition dieser Parameter über die Applikationskonfiguration besteht auch die Möglichkeit diese in Form einer NameValueCollection an den Konstruktor von MemoryCache zu Übergeben.<br /><br /><pre><br />private static MemoryCache cache;<br />private static void CacheDemo2()<br />{<br />const string source = @”c:\temp\someTextFile.txt”;<br />if (cache == null) cache = new MemoryCache(“MyCache”);<br />string fileContents = cache[”someText”] as string;<br />if (fileContents == null)<br />    {<br />Console.WriteLine(„Element war nicht (mehr) im Cache!“);<br />CacheItemPolicy policy = new CacheItemPolicy();<br />List&lt;string&gt; filePaths = new List&lt;string&gt;();<br />filePaths.Add(source);<br />policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));<br />policy.SlidingExpiration = TimeSpan.FromSeconds(50);<br /><br />fileContents = File.ReadAllText(source);<br />cache.Set(“someText”, fileContents, policy);<br />    }<br /><br />Console.WriteLine(fileContents);<br />}<br /></pre><br /><pre><br />&lt;system.runtime.caching&gt;<br />&lt;memoryCache&gt;<br />&lt;namedCaches&gt;<br />&lt;add name=”MyCache”<br />cacheMemoryLimitMegabytes=”10”<br />physicalMemoryLimitPercentage=”15”<br />pollingInterval=”00:01:00” /&gt;<br />&lt;/namedCaches&gt;<br />&lt;/memoryCache&gt;<br />&lt;/system.runtime.caching&gt;<br /></pre><br />]]></description>
			<category>.Net 4</category>
			<guid isPermaLink="true">http://www.software-engineer.biz/index.php?entry=entry100617-000414</guid>
			<author>Manfred Steyer</author>
			<pubDate>Wed, 16 Jun 2010 22:04:14 GMT</pubDate>
			<comments>http://www.software-engineer.biz/comments.php?y=10&amp;m=06&amp;entry=entry100617-000414</comments>
		</item>
		<item>
			<title>Aktuellen Standort ermitteln mit Windows 7 und .Net 4 (fast schon gruselig)</title>
			<link>http://www.software-engineer.biz/index.php?entry=entry100603-235238</link>
			<description><![CDATA[Als ich gesehen hab&#039;, wie gut die Standortbestimmung auch ohne interne Sensoren funktioniert, hab&#039; ich eine Gänsehaut bekommen: Bei Verwendung von Windows 7 besteht die Möglichkeit mittels Sensoren den aktuellen Standort herauszufinden. Wer einen solchen Sensor nicht sein eigen nennt, findet unter <a href="http://www.geosenseforwindows.com/" target="_blank" >http://www.geosenseforwindows.com/</a> einen softwarebasierten Sensor, welcher Daten, wie die aktuelle IP-Adresse oder Entfernung zu Drahtlosnetzwerken bzw. Mobiltelefonmasten nutzt. Nach der Installation muss der Sensor in der Systemsteuerung unter Ortung- und andere Sensoren aktiviert werden.<br /><br />Sensoren dieser Art können via .Net 4 angesprochen werden. Das nachfolgende Listing demonstriert dies.  Es ermittelt über eine Instanz von GeoCoordinateWatcher die aktuellen Koordinaten (Längengrad, Breitengrad) und versucht mit diesen unter Verwendung eines CivicAddressResolver die dazugehörige zivile Adresse herauszufinden. Die Methode TryStart startet die Verwendung des Sensors. Das erste Argument gibt an, ob der Dialog, welcher dem Benutzer um Erlaubnis zur Verwendung der aktuellen Position bittet, unterdrückt werden soll. Wird dieser Dialog unterdrückt, muss bereits die Verwendung des Sensors durch den Benutzer bewilligt worden sein, damit der aktuelle Standort ermittelt werden kann. Das zweite Argument gibt an, wie viel Zeit in die Ermittlung der aktuellen Position maximal investiert werden darf. Der bool&#039;sche Rückgabewert gibt Aufschluss über den Erfolg der Standortermittlung. Im betrachteten Beispiel werden die ermittelten Geo-Daten sofort verwendet. Um über Standortänderungen informiert zu werden, kann zusätzlich das Ereignis PositionChanged der Klasse GeoCoordinateWatcher verwendet werden. Über die Eigenschaft MovementThreshold kann dabei in Meter angegeben werden, nach welcher Distanz dieses Ereignis aufgerufen werden soll.<br /><br /><pre><br />GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);<br />bool started = watcher.TryStart(false, TimeSpan.FromMilliseconds(1000));<br /><br />if (!started) Console.WriteLine(&quot;GeoCoordinateWatcher timed out on start.&quot;);<br /><br />CivicAddressResolver resolver = new CivicAddressResolver();<br /><br />if (!watcher.Position.Location.IsUnknown)<br />{<br />    CivicAddress address = resolver.ResolveAddress(watcher.Position.Location);<br /><br />    if (!address.IsUnknown)<br />    {<br />        Console.WriteLine(&quot;Country: {0}, Zip: {1}, City: {2}&quot;,<br />                address.CountryRegion,<br />                address.PostalCode,<br />                address.City);<br />    }<br />}<br /></pre>]]></description>
			<category>.Net 4</category>
			<guid isPermaLink="true">http://www.software-engineer.biz/index.php?entry=entry100603-235238</guid>
			<author>Manfred Steyer</author>
			<pubDate>Thu, 03 Jun 2010 21:52:38 GMT</pubDate>
			<comments>http://www.software-engineer.biz/comments.php?y=10&amp;m=06&amp;entry=entry100603-235238</comments>
		</item>
		<item>
			<title>ASP.NET MVC 2 und Entity Framework: Folien, Beispiele, Übungsblätter (BASTA on tour, Mai 2010 in München)</title>
			<link>http://www.software-engineer.biz/index.php?entry=entry100519-110050</link>
			<description><![CDATA[Nachfolgend können die Folien, Beispiele und Überblätter meines Workshops zu ASP.NET 2 MVC und Entity Framework von der BASTA on tour im Mai 2010 (München) heruntergeladen werden.<br /><br /><b>ASP.NET MVC - Erste Schritte</b> <br /><a href="http://www.softwarearchitekt.at/downloads/01_ASP.NET%20MVC%20-%20Erste%20Schritte.pdf" target="_blank" >Folien</a> | <a href="http://www.softwarearchitekt.at/downloads/MVC_FirstSteps.zip" target="_blank" >Beispiel</a> | <a href="http://www.softwarearchitekt.at/downloads/01_Uebungsblatt_ASP.NET_MVC_Erste_Schritte.pdf" target="_blank" >Übungsblatt</a> <br /><br /> <b>Anpassen der Standard-Fehlermeldung des Model-Binders:</b> <br /><a href="http://www.softwarearchitekt.at/comments.php?y=10&amp;m=04&amp;entry=entry100404-211321" target="_blank" >http://www.softwarearchitekt.at/comment ... 404-211321</a><br /><br /> <b>Entity Framework</b> <br /><a href="http://www.softwarearchitekt.at/downloads/EF-all-in-one.zip" target="_blank" >http://www.softwarearchitekt.at/downloa ... in-one.zip</a><br /><br /> <img src="images/basta-on-tour-2010.png" width="407" height="85" border="0" alt="" /> <br />]]></description>
			<category>Konferenzen, .Net 4, Entity Framework, ASP.NET MVC</category>
			<guid isPermaLink="true">http://www.software-engineer.biz/index.php?entry=entry100519-110050</guid>
			<author>Manfred Steyer</author>
			<pubDate>Wed, 19 May 2010 09:00:50 GMT</pubDate>
			<comments>http://www.software-engineer.biz/comments.php?y=10&amp;m=05&amp;entry=entry100519-110050</comments>
		</item>
	</channel>
</rss>
