<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
  <channel>
    <title>dotnet-forum.de - Developer Blogs</title>
    <description> </description>
    <link>http://dotnet-forum.de/DeveloperBlogs/default.aspx</link>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Community Server v2.0 (http://www.communityserver.org)</generator>
    <item>
      <title>RavenDb 2.0 on IIS with Windows Authentication returns a 401 Unauthorized #ravendb</title>
      <description>&lt;p&gt;If you’re hosting RavenDb 2.0 on IIS 7.5 / 8 and you have &lt;a href="http://ravendb.net/docs/2.0/server/deployment/as-iis-application?version=2.0"&gt;activated Windows authentication according to the official RavenDb documentation&lt;/a&gt;, your browser might keep prompting for the username and password and show you “Unauthorized” after the third attempt when you’re trying to create a new database:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blog.alexonasp.net/image.axd?picture=Windows-Live-Writer/RavenDb-2.0-IIS-and/194081CD/image.png" width="582" height="271" /&gt;&lt;/p&gt;  &lt;p&gt;If this is the case, you should set &lt;/p&gt;  &lt;pre&gt;&amp;lt;add key=&amp;quot;Raven/AnonymousAccess&amp;quot; value=&amp;quot;Admin&amp;quot; /&amp;gt;&lt;/pre&gt;

&lt;p&gt;inside the web.config&lt;/p&gt;

&lt;p&gt;Now you can create (and delete) new databases using Windows Authentication:&lt;/p&gt;

&lt;p&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blog.alexonasp.net/image.axd?picture=Windows-Live-Writer/RavenDb-2.0-IIS-and/72063897/image.png" width="584" height="254" /&gt;&lt;/p&gt;</description>
      <link>http://blog.alexonasp.net/post/2013/05/17/RavenDb-20-on-IIS-with-Windows-Authentication-returns-a-401.aspx</link>
      <author>Alexander Zeitler</author>
      <dc:creator>Alexander Zeitler</dc:creator>
      <comments>http://blog.alexonasp.net/post/2013/05/17/RavenDb-20-on-IIS-with-Windows-Authentication-returns-a-401.aspx#comment</comments>
      <guid isPermaLink="False">http://blog.alexonasp.net/post.aspx?id=61dbffe0-30f1-4bdc-82bd-203d873480cb</guid>
      <pubDate>Fri, 17 May 2013 00:32:00 GMT</pubDate>
    </item>
    <item>
      <title>SetWindowHookEx - cool oder nur Fingerübung?</title>
      <description>&lt;p&gt;Die Anforderung ist recht schnell erkl&amp;auml;rt: Erkenne, wann ein Fenster einer Anwendung maximiert, minimiert oder wiederhergestellt wird. &amp;quot;Das kann doch so schwer nicht sein&amp;quot; denkt man sich da, schlie&amp;szlig;lich wirft Windows ja nur so mit Nachrichten um sich, die man einfach nur abfangen muss. Die Windows-API ist dein Freund. Ok, ganz so einfach ist es dann doch nicht, sonst br&amp;auml;uchte dieser Blogpost ja nicht geschrieben werden.&lt;/p&gt;
&lt;p&gt;Damit das Fensterhandling und auch so ziemlich alles andere in Windows funktioniert, werden Nachrichten an Fenster gesendet. Zumeist macht Windows das selbst (z.B. Fenster 358: Maximiere dich&amp;quot;). Kommt diese Nachricht am Fenster an, gibt es dort eine Kette von &amp;quot;Abonnenten&amp;quot; - die hook chain. Und in diese Kette kann man eigene Funktionen eingliedern lassen, die dann Teil dieser Kette werden.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Mit diesem Wissen ist die relevante Methode ist auch recht schnell gefunden:&amp;nbsp;SetWindowsHookEx in der user32.dll. Damit gliedert man eine Funktion in die hook chain ein und bekommt dabei einen Handle f&amp;uuml;r den n&amp;auml;chsten Teilnehmer der Kette - also den an den die Nachricht dann geschickt werden muss, wenn meine Bearbeitung fertig ist.&lt;/p&gt;
&lt;p&gt;Eine gute Anlaufstelle f&amp;uuml;r Fragen, wenn es um die Syntax oder die Verwendung geht, ist entweder die Windows API-Dokumentation in der &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms632586.aspx" target="_blank"&gt;MSDN&lt;/a&gt;&amp;nbsp;- wo C-Syntax verwendet wird und die Parameter inzwischen auch recht ausf&amp;uuml;hrlich beschrieben sind - oder&amp;nbsp;&lt;a href="http://www.pinvoke.net/" target="_blank"&gt;pinvoke.net&lt;/a&gt; - wo es auch Beispiele zur Umsetzung in C# oder VB.NET gibt. Dort lernt man dann auch schnell, dass man einige Voraussetzungen schaffen muss, um diese Funktionen verwenden zu k&amp;ouml;nnen.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wie implementiert man den Hook?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Zun&amp;auml;chst werden die Methoden definiert, die importiert werden sollen: Mit SetWindowHookEx kann die Methode in die Kette eingereiht werden. Und nat&amp;uuml;rlich ben&amp;ouml;tigt man dann auch noch UnhookWindowsHookEx, um diesen Eintrag sp&amp;auml;ter auch wieder entfernen zu k&amp;ouml;nnen. Des weiteren habe ich schon erw&amp;auml;hnt, dass man daf&amp;uuml;r Sorge tragen muss, den Folgeeintrag in der Kette aufzurufen, deshalb wird auch noch&amp;nbsp;CallNextHookEx ben&amp;ouml;tigt.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;[DllImport(&amp;quot;user32.dll&amp;quot;)]
static extern IntPtr SetWindowsHookEx(int code, HookDelegate func, IntPtr hInstance, uint threadId);

[DllImport(&amp;quot;user32.dll&amp;quot;, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool UnhookWindowsHookEx(IntPtr hhk);

[DllImport(&amp;quot;user32.dll&amp;quot;)]
static extern int CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);&lt;/pre&gt;
&lt;p&gt;Im Import von SetWindowsHookEx wird im zweiten Parameter auf einen Delegate verwiesen. Dieser muss ebenfalls definiert werden:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public delegate int HookDelegate(int code, IntPtr wParam, IntPtr lParam);&lt;/pre&gt;
&lt;p&gt;Und man sieht, dass SetWindowsHookEx eine ThreadId erwartet. Damit die Funktion aber nun mit einen Fenster-Handle verwendet werden kann, wird nun noch&amp;nbsp;GetWindowThreadProcessId ben&amp;ouml;tigt, um dieses Mapping durchf&amp;uuml;hren zu k&amp;ouml;nnen. aber das ist nur Makulatur und f&amp;uuml;r die eigentliche Funktionalit&amp;auml;t irrelevant:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;[DllImport(&amp;quot;user32.dll&amp;quot;, SetLastError = true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr lpdwProcessId);&lt;/pre&gt;
&lt;p&gt;So weit, so gut. Nun sieht man in den Deklarationen aber auch, dass sehr viele int-Werte verwendet werden. F&amp;uuml;r Menschen sind Zahlen immer etwas schwierig zu lesen - aus diesem Grund werden noch ein paar Enumerationen deklariert.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Der Hooktype definiert, welche Art von Nachricht interessant sind. Danach richtet sich im sp&amp;auml;teren Verlauf, wie die Informationen der Nachricht interpretiert werden m&amp;uuml;ssen:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public enum HookType : int
{
    WH_JOURNALRECORD = 0,
    WH_JOURNALPLAYBACK = 1,
    WH_KEYBOARD = 2,
    WH_GETMESSAGE = 3,
    WH_CALLWNDPROC = 4,
    WH_CBT = 5,
    WH_SYSMSGFILTER = 6,
    WH_MOUSE = 7,
    WH_DEBUG = 9,
    WH_SHELL = 10,
    WH_FOREGROUNDIDLE = 11,
    WH_CALLWNDPROCRET = 12,
}&lt;/pre&gt;
&lt;p&gt;F&amp;uuml;r die gew&amp;uuml;nschte Funktionalit&amp;auml;t wird WH_CallWndProcRet von Interesse sein, da diese Art von Nachricht dann aufgerufen wird, wenn eine Fensterfunktion fertig ausgef&amp;uuml;hrt ist. Die Nachricht dieses Nachrichtentyps l&amp;auml;sst sich mit folgendem Struct darstellen:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;[StructLayout(LayoutKind.Sequential)]
public struct CwpRetStruct
{
    public IntPtr lResult;
    public IntPtr lParam;
    public IntPtr wParam;
    public uint message;
    public IntPtr hwnd;
};&lt;/pre&gt;
&lt;p&gt;Dabei wird dann im Feld message stehen, welche Nachricht geschickt wurde - im gezeigten Fall werden nur Systemcommands von Interesse sein:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public enum WindowsMessages : uint
{
    WM_SYSCOMMAND = 0x0112
}&lt;/pre&gt;
&lt;p&gt;Und im Feld wParam wird stehen, welche genaue Auspr&amp;auml;gung dieses Command hat:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public enum SystemCommands : int
{
    SC_SIZE = 0xF000,
    SC_MOVE = 0xF010,
    SC_MINIMIZE = 0xF020,
    SC_MAXIMIZE = 0xF030,
    SC_NEXTWINDOW = 0xF040,
    SC_PREVWINDOW = 0xF050,
    SC_CLOSE = 0xF060,
    SC_VSCROLL = 0xF070,
    SC_HSCROLL = 0xF080,
    SC_MOUSEMENU = 0xF090,
    SC_KEYMENU = 0xF100,
    SC_ARRANGE = 0xF110,
    SC_RESTORE = 0xF120,
    SC_TASKLIST = 0xF130,
    SC_SCREENSAVE = 0xF140,
    SC_HOTKEY = 0xF150,
    SC_DEFAULT = 0xF160,
    SC_MONITORPOWER = 0xF170,
    SC_CONTEXTHELP = 0xF180,
    SC_SEPARATOR = 0xF00F,

    SCF_ISSECURE = 0x00000001,

    SC_ICON = SC_MINIMIZE,
    SC_ZOOM = SC_MAXIMIZE,
}&lt;/pre&gt;
&lt;p&gt;Nun aber genug der Vorbereitungen: Die Funktionalit&amp;auml;t muss auch noch implementiert werden. Der Rumpf meiner Klasse sieht nun wie folgt aus:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public class WindowMessageInterceptor : IDisposable
{
    private IntPtr nextHookPtr;

    private HookDelegate callbackDelegate;

    public WindowMessageInterceptor(IntPtr hWnd)
    {
    }

    public void Dispose()
    {
    }
}&lt;/pre&gt;
&lt;p&gt;Der Konstruktor erwartet ein Fensterhandle, es gibt Membervariablen f&amp;uuml;r die Delegateinstanz und den Pointer auf den Folgeeintrag in der hook chain, im Konstruktor wird der Hook sp&amp;auml;ter gesetzt werden und im Dispose wird der Hook wieder entfernt werden.&lt;/p&gt;
&lt;p&gt;Der Konstruktor sieht mit diesem Wissen auch recht unspektakul&amp;auml;r aus:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public WindowMessageInterceptor(IntPtr hWnd)
{
    // determine ThreadId for specified Window
    var threadId = GetWindowThreadProcessId(hWnd, IntPtr.Zero);

    // initialize the callback delegate
    this.callbackDelegate = new HookDelegate(this.HookCallbackFunction);

    // setup a window message hook and add it to hook chain
    this.nextHookPtr = SetWindowsHookEx((int)HookType.WH_CALLWNDPROCRET, this.callbackDelegate, IntPtr.Zero, threadId);

    if (this.nextHookPtr == IntPtr.Zero)
    {
        throw new Exception(&amp;quot;unable to apply hook&amp;quot;);
    }
}&lt;/pre&gt;
&lt;p&gt;und ebenso das Dispose:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public void Dispose()
{
    if (this.nextHookPtr == IntPtr.Zero)
    {
        return;
    }

    UnhookWindowsHookEx(this.nextHookPtr);
    this.nextHookPtr = IntPtr.Zero;
}&lt;/pre&gt;
&lt;p&gt;Spannend ist die Callback-Funktion:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;private int HookCallbackFunction(int code, IntPtr wParam, IntPtr lParam)
{
    // If code is less than zero, the hook procedure must return the value returned by CallNextHookEx.
    if (code &amp;lt; 0)
    {
        return CallNextHookEx(this.nextHookPtr, code, wParam, lParam);
    }

    // otherwise do all the things and call NextHookEx afterwards
    // convert the lparam to our struct
    var message = (CwpRetStruct)Marshal.PtrToStructure(lParam, typeof(CwpRetStruct));

    // evaluate the message
    if (message.message == (uint)WindowsMessages.WM_SYSCOMMAND)
    {
        Console.Write(&amp;quot;syscommand detected: &amp;quot;);

        switch (message.wParam.ToInt32())
        {
            case (int)SystemCommands.SC_RESTORE:
                Debug.WriteLine(&amp;quot;window restored from maximized state&amp;quot;);
                break;
            case (int)SystemCommands.SC_MINIMIZE:
                Debug.WriteLine(&amp;quot;window minimized&amp;quot;);
                break;
            case (int)SystemCommands.SC_MAXIMIZE:
                Debug.WriteLine(&amp;quot;window maximized&amp;quot;);
                break;
            default:
                Debug.WriteLine(&amp;quot;not important&amp;quot;);
                break;
        }
    }

    return CallNextHookEx(this.nextHookPtr, code, wParam, lParam);
}&lt;/pre&gt;
&lt;p&gt;Was passiert hier?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Zun&amp;auml;chst wird gepr&amp;uuml;ft, ob der Code gr&amp;ouml;&amp;szlig;er als 0 ist. Laut API-Dokumentation ist die Nachricht nur dann auch f&amp;uuml;r diese Methode gedacht. Im Anschluss daran muss die Nachricht ausgewertet werden. Damit das passieren kann, bietet das Framework die Methode PtrToStructure. Damit kann der lParam-Wert des Callbacks, in dem sich die Informationen befinden, in das Nachrichtenformat konvertiert werden. Und aus dieser Nachricht interessiert nun, wie man der API entnehmen kann der wParam-Wert.&lt;/p&gt;
&lt;p&gt;Im Anschluss wird der Hook an den Folgeempf&amp;auml;nger weitergeleitet.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Der Test&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;F&amp;uuml;r den Test gibt es einen weiteren Konstruktor, der als ThreadId einfach die ThreadId der aktuellen Applikation &amp;uuml;bergibt:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public WindowMessageInterceptor()
{
    // initialize the callback delegate
    this.callbackDelegate = new HookDelegate(this.HookCallbackFunction);

    // setup a window message hook and add it to hook chain
    this.nextHookPtr = SetWindowsHookEx((int)HookType.WH_CALLWNDPROCRET, this.callbackDelegate, IntPtr.Zero, (uint)AppDomain.GetCurrentThreadId());

    if (this.nextHookPtr == IntPtr.Zero)
    {
        throw new Exception(&amp;quot;unable to apply hook&amp;quot;);
    }
}&lt;/pre&gt;
&lt;p&gt;Und das funktioniert auch ganz gut: Die entsprechenden Nachrichten werden angezeigt. Und auch wenn man das Fensterhandle der aktuellen Anwendung &amp;uuml;bergibt, funktioniert alles super&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Aber.....&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Versucht man das Ganze nun mit einem fremden Fensterhandle, so schl&amp;auml;gt das Setzen des Hooks fehl. Aber warum?&lt;/p&gt;
&lt;p&gt;Auch hier hilft die Dokumentation weiter. Sinngem&amp;auml;&amp;szlig; steht dort: Hooks k&amp;ouml;nnen innerhalb der eigenen Anwendung gesetzt werden, indem als Modul-Handle (Parameter 3) IntPtr.Zero &amp;uuml;bergeben wird und dann im vierten Parameter die ThreadId. Um den Hook auf fremde Fenster zu setzen, muss als ModulId die ModulId des fremden Programms angegeben werden, der Callback muss in einer Dll sein und das Fremde Programm muss diese Dll geladen haben. Und genau das ist der Knackpunkt, denn hier greifen Sicherheitsmechanismen von .NET, die genau das verhindern.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Res&amp;uuml;mee&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;F&amp;uuml;r den gezeigten Anwendungsfall kommt man mit SetWindowsHookEx nicht weiter, da nur die aktuelle Anwendung abgefragt werden kann. Und das geht mit Bordmitteln wesentlich einfacher, indem man Events auf dem Hauptfenster abonniert - in WPF w&amp;auml;re das das WindowStateChanged-Event.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/discoveringmicrosofttechnologies?a=QhubwFb_8TI:_yUgifUwve4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/discoveringmicrosofttechnologies?d=yIl2AUoC8zA" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/discoveringmicrosofttechnologies?a=QhubwFb_8TI:_yUgifUwve4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/discoveringmicrosofttechnologies?d=qj6IDK7rITs" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/discoveringmicrosofttechnologies?a=QhubwFb_8TI:_yUgifUwve4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/discoveringmicrosofttechnologies?i=QhubwFb_8TI:_yUgifUwve4:F7zBnMyn0Lo" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/discoveringmicrosofttechnologies?a=QhubwFb_8TI:_yUgifUwve4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/discoveringmicrosofttechnologies?i=QhubwFb_8TI:_yUgifUwve4:-BTjWOF_DHI" border="0" alt="" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/discoveringmicrosofttechnologies/~4/QhubwFb_8TI" height="1" width="1" alt="" /&gt;</description>
      <link>http://www.uniquesoftware.de/Blog/de/post/2013/05/16/SetWindowHookEx-cool-oder-nur-Fingerubung.aspx</link>
      <author>Martin Hey</author>
      <dc:creator>Martin Hey</dc:creator>
      <comments>http://www.uniquesoftware.de/Blog/de/post/2013/05/16/SetWindowHookEx-cool-oder-nur-Fingerubung.aspx#comment</comments>
      <guid isPermaLink="False">http://www.uniquesoftware.de/Blog/de/post.aspx?id=b97cfb71-4c4e-4b54-981c-bb9e11abd296</guid>
      <pubDate>Thu, 16 May 2013 16:19:00 GMT</pubDate>
    </item>
    <item>
      <title>Für alle Trekkies</title>
      <description>Zu gut Auf www.bing.com gehen und “beam me up” eintippen. ...read more...(&lt;a href="http://feedproxy.google.com/~r/theolivercom/~3/Ti88FH0i3ro/"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10419253" width="1" height="1" alt="" /&gt;</description>
      <link>http://feedproxy.google.com/~r/theolivercom/~3/Ti88FH0i3ro/</link>
      <author>Oliver Scheer</author>
      <dc:creator>The-Oliver.com</dc:creator>
      <comments>http://feedproxy.google.com/~r/theolivercom/~3/Ti88FH0i3ro/#comments</comments>
      <guid isPermaLink="False">91d46819-8472-40ad-a661-2c78acb4018c:10419253</guid>
      <pubDate>Thu, 16 May 2013 13:09:36 GMT</pubDate>
    </item>
    <item>
      <title>Surface Pro in Deutschland verfübar ab dem 31.05.</title>
      <description>Ab dem 31. Mai 2013 gibt es Surface Pro in Deutschland über www.microsoftstore.com und im&amp;#160; Fachhandel. Das Gerät wird in zwei unterschiedlichen Versionen verfügbar sein: Ein 64-GB Modell für 879 Euro (UVP) sowie eine Variante mit 128-GB für 979 Euro...(&lt;a href="http://feedproxy.google.com/~r/theolivercom/~3/-jkuky6mlYU/"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10419236" width="1" height="1" alt="" /&gt;</description>
      <link>http://feedproxy.google.com/~r/theolivercom/~3/-jkuky6mlYU/</link>
      <author>Oliver Scheer</author>
      <dc:creator>The-Oliver.com</dc:creator>
      <comments>http://feedproxy.google.com/~r/theolivercom/~3/-jkuky6mlYU/#comments</comments>
      <guid isPermaLink="False">91d46819-8472-40ad-a661-2c78acb4018c:10419236</guid>
      <pubDate>Thu, 16 May 2013 12:18:03 GMT</pubDate>
    </item>
    <item>
      <title>TFS Incremental build und writeable files</title>
      <description>&lt;p&gt;
Der TFS Build geht standardmäßig so vor, dass er vor einem Build, alle Dateien sauber
löscht und dann den kompletten Workspace neu aus der Versionsverwaltung holt. Ein
solcher “Clean Build” birgt natürlich das geringste Risiko, dass veraltete Dateien
in den Build einfließen oder dass der Build Dateien benutzt die gar nicht mehr in
der versionsverwaltung enthalten sind. Aber gerade bei größeren Projekten ist das
natürlich auch sehr ineffizient. deshalb kann man im TFS Build einstellen, wie er
sich verhalten soll.
&lt;/p&gt;
&lt;p&gt;
In den Build Process Parametern gibt es eine Einstellung dafür.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/TFS-Incremental-build_96F0/image_2.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/TFS-Incremental-build_96F0/image_thumb.png" width="719" height="132" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Dieser Parameter hat 3 mögliche Einstellungen:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
All – Mit dieser Einstellung werden sowohl der Source Code all auch alle Outputs des
Builds gelöscht (Clean Build). Dies ist die Default-Einstellung&lt;/li&gt;
&lt;li&gt;
Outputs – Der Build löscht die Outputs, nicht aber die Sourcen. Für die Sourcen wird
ein get Latest ausgeführt, d.h. es werden nur geänderte Dateien vom TFS heruntergeladen&lt;/li&gt;
&lt;li&gt;
None – Sowohl Outputs als auch Sourcen bleiben erhalten. Nach einem Get Latest wird
ein Build ausgeführt und dabei nur Projekte gebaut bei denen sich die SOurcen bzw.
die Referenzen geändert haben&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
So weit so gut. Ich hatte einen Build auf “Outputs” gestellt und dann folgenden Fehler
bekommen:
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;Warning C:\Builds\101\Projekt\artiso_Working1_CI\Sources\Solutions\artisoSolutions\WCH_Diff\NoDeploy.testsettings
- Unable to perform the delete operation because the file already exists locally&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;Völlig unlogisch, dass eine Datei nicht gelöscht werden kann, weil
sie schon existiert, aber nun gut. Die Ursache war dann auch schnell gefunden. Um
die Version in der AssemblyInfo.cs während des Builds zu ändern, hebe ich den Schreibschutz
dieser Dateien auf. Und der Get hat nun ein problem, wenn da Dateien rumliegen die
keinen Schreibschutz haben, da diese ja geändert sein könnten und er die nicht einfach
überschreibt. Es gibt aber eine kleine Einstellung im Workflow mit der man dieses
Verhalten anpassen kann:&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;Man sucht die Gte Workspace Activity im Workflow&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/TFS-Incremental-build_96F0/image_4.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/TFS-Incremental-build_96F0/image_thumb_1.png" width="222" height="166" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Dann stellt man in den Properties die GetOptions auf “Overwrite”
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/TFS-Incremental-build_96F0/image_10.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/TFS-Incremental-build_96F0/image_thumb_4.png" width="657" height="352" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Damit überschreibt der Build beim Get nun die Dateien ohne Schreibschutz-Attribut
und der Build läuft problemlos durch – und das nun auch deutlich schneller als zuvor.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;&amp;nbsp;
&lt;/p&gt;
&amp;gt;&amp;gt;&lt;img width="0" height="0" src="http://www.artiso.com/ProBlog/aggbug.ashx?id=8863eeb3-82da-463b-abb7-ec1284cda310" alt="" /&gt;</description>
      <link>http://www.artiso.com/ProBlog/PermaLink,guid,8863eeb3-82da-463b-abb7-ec1284cda310.aspx</link>
      <author>Thomas Schissler</author>
      <dc:creator>Thomas Schissler</dc:creator>
      <comments>http://www.artiso.com/ProBlog/CommentView,guid,8863eeb3-82da-463b-abb7-ec1284cda310.aspx</comments>
      <guid isPermaLink="False">http://www.artiso.com/ProBlog/PermaLink,guid,8863eeb3-82da-463b-abb7-ec1284cda310.aspx</guid>
      <pubDate>Thu, 16 May 2013 11:36:15 GMT</pubDate>
    </item>
    <item>
      <title>All I wanted was a pyramid…</title>
      <description>… and all I got was this lousy Christmas tree. I like TDD and I like test automation. It is great to see the application growing with each successful test and to be sure that it will work even if a lot of changes are made on the code base. On the other I see [...]&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JustAboutDotNet?a=eraFqHiUBiQ:vVPUFGvNE8Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JustAboutDotNet?d=yIl2AUoC8zA" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JustAboutDotNet?a=eraFqHiUBiQ:vVPUFGvNE8Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JustAboutDotNet?d=qj6IDK7rITs" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JustAboutDotNet?a=eraFqHiUBiQ:vVPUFGvNE8Y:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JustAboutDotNet?d=I9og5sOYxJI" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JustAboutDotNet?a=eraFqHiUBiQ:vVPUFGvNE8Y:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JustAboutDotNet?d=bcOpcFrp8Mo" border="0" alt="" /&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JustAboutDotNet?a=eraFqHiUBiQ:vVPUFGvNE8Y:Kigc-4L4VeA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JustAboutDotNet?d=Kigc-4L4VeA" border="0" alt="" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAboutDotNet/~4/eraFqHiUBiQ" height="1" width="1" alt="" /&gt;</description>
      <link>http://feedproxy.google.com/~r/JustAboutDotNet/~3/eraFqHiUBiQ/all-i-wanted-was-a-pyramid</link>
      <author>Hendrik Loesch</author>
      <dc:creator>Hendrik Lösch</dc:creator>
      <comments>http://www.just-about.net/all-i-wanted-was-a-pyramid#comments</comments>
      <guid isPermaLink="False">http://www.just-about.net/?p=2570</guid>
      <pubDate>Wed, 15 May 2013 20:44:19 GMT</pubDate>
    </item>
    <item>
      <title>Bing mit Star Trek Easter Egg</title>
      <description>&lt;p&gt;Viele kennen sicherlich das Google Easter Egg do the barrel roll, durch das sich das komplette Google Fenster bewegt. Bing hat nun auch endlich sein erstes kleines Easter Egg das wohl passend zum neuen Star Trek Film eingeleitet worden ist. Gibt man n&amp;#228;mlich bei Bing den Suchbegriff Beam me up, wird man vom normalen Hintergrund [...]&lt;/p&gt;&lt;p&gt;The post &lt;a href="http://www.prometeo.de/2013/05/bing-mit-star-trek-easter-egg/"&gt;Bing mit Star Trek Easter Egg&lt;/a&gt; appeared first on &lt;a href="http://www.prometeo.de"&gt;Prometeo&lt;/a&gt;.&lt;/p&gt;</description>
      <link>http://www.prometeo.de/2013/05/bing-mit-star-trek-easter-egg/</link>
      <author>Stephan Walcher</author>
      <dc:creator>Stephan Walcher</dc:creator>
      <guid isPermaLink="False">http://www.prometeo.de/?p=8713</guid>
      <pubDate>Wed, 15 May 2013 17:16:12 GMT</pubDate>
    </item>
    <item>
      <title>Interessante Trainings zu Visual Studio 2012 in der Microsoft Virtual Academy</title>
      <description>&lt;p&gt;&lt;b&gt;&lt;font size="2"&gt;Software Testing with Visual Studio 2012 (exam 70-497) Jump Start&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Live Event Details    &lt;br /&gt;May 28, 2013     &lt;br /&gt;9:00am - 5:00pm (PDT) &lt;/p&gt;  &lt;p&gt;Link: &lt;a href="https://www.microsoftvirtualacademy.com/liveevents/software-testing-with-visual-studio-2012-jump-start?CR_CC=200211930"&gt;https://www.microsoftvirtualacademy.com/liveevents/software-testing-with-visual-studio-2012-jump-start?CR_CC=200211930&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font size="2"&gt;Administering Visual Studio Team Foundation Server 2012 (exam 70-496) Jump Start&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Live Event Details    &lt;br /&gt;May 29, 2013     &lt;br /&gt;9:00am - 5:00pm (PDT)&lt;/p&gt;  &lt;p&gt;Link: &lt;a href="https://www.microsoftvirtualacademy.com/liveevents/administering-visual-studio-team-foundation-server-2012-jump-start"&gt;https://www.microsoftvirtualacademy.com/liveevents/administering-visual-studio-team-foundation-server-2012-jump-start&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font size="2"&gt;Applying ALM with Visual Studio 2012 (exam 70-498) Jump Start&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;On demand Jump Start training    &lt;br /&gt;Link: &lt;a href="https://www.microsoftvirtualacademy.com/training-courses/applying-alm-w-visual-studio-2012-jump-start"&gt;https://www.microsoftvirtualacademy.com/training-courses/applying-alm-w-visual-studio-2012-jump-start&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font size="2"&gt;Building Business Apps with Visual Studio Lightswitch&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://www.microsoftvirtualacademy.com/training-courses/building-business-apps-with-visual-studio-lightswitch"&gt;https://www.microsoftvirtualacademy.com/training-courses/building-business-apps-with-visual-studio-lightswitch&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10418862" width="1" height="1" alt="" /&gt;</description>
      <link>http://blogs.msdn.com/b/cbinder/archive/2013/05/15/interessante-trainings-zu-visual-studio-2012-in-der-microsoft-virtual-academy.aspx</link>
      <author>Christian Binder</author>
      <dc:creator>cbinder</dc:creator>
      <comments>http://blogs.msdn.com/b/cbinder/archive/2013/05/15/interessante-trainings-zu-visual-studio-2012-in-der-microsoft-virtual-academy.aspx#comments</comments>
      <guid isPermaLink="False">91d46819-8472-40ad-a661-2c78acb4018c:10418862</guid>
      <pubDate>Wed, 15 May 2013 13:30:15 GMT</pubDate>
    </item>
    <item>
      <title>Gewinnen durch Vorläufigkeit</title>
      <description>Warum soll im Business eigentlich immer alles perfekt sein? Oder, nein, nicht perfekt, aber &amp;quot;effizient&amp;quot;. Ein Beispiel dafür ist mir gerade im Rahmen eines Hobbyprojekts untergekommen: der hey! publishing Verlag.

Eine befreundete Autorin hat dort einen Roman veröffentlicht, &amp;quot;Die Martinis&amp;quot;:




Der ist als eBook erschienen. Und das war´s. Weiter ist nichts geschehen (Stand Anfang Mai 2013), obwohl</description>
      <link>http://blog.ralfw.de/2013/05/gewinnen-durch-vorlaufigkeit.html</link>
      <author>Ralf Westphal</author>
      <dc:creator>Ralf Westphal</dc:creator>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-6090483181455953305.post-8441351000122428769</guid>
      <pubDate>Tue, 14 May 2013 10:23:00 GMT</pubDate>
    </item>
    <item>
      <title>Windows Phone 8 Trainingskit</title>
      <description>Kostenlos als Download hier verfügbar: http://www.microsoft.com/en-us/download/details.aspx?id=38782&amp;#38;WT.mc_id=rss_alldownloads_all ...read more...(&lt;a href="http://feedproxy.google.com/~r/theolivercom/~3/FQatC8fbIeE/"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10418131" width="1" height="1" alt="" /&gt;</description>
      <link>http://feedproxy.google.com/~r/theolivercom/~3/FQatC8fbIeE/</link>
      <author>Oliver Scheer</author>
      <dc:creator>The-Oliver.com</dc:creator>
      <comments>http://feedproxy.google.com/~r/theolivercom/~3/FQatC8fbIeE/#comments</comments>
      <guid isPermaLink="False">91d46819-8472-40ad-a661-2c78acb4018c:10418131</guid>
      <pubDate>Mon, 13 May 2013 15:41:22 GMT</pubDate>
    </item>
    <item>
      <title>video2brain - Windows Store Apps mit XAML und C# – Das große Training + Geek-Gewinnspiel</title>
      <description>&lt;p&gt;&lt;a href="http://www.video2brain.com/de/videotraining/windows-store-apps-mit-xaml-und-c-das-grosse-training/inhalte" target="_blank"&gt;&lt;img title="Windows_Store_Apps_mit_XAML_und_C#–Das_große_Training" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="Windows_Store_Apps_mit_XAML_und_C#–Das_große_Training" src="http://webenliven-space.de/dotnetblog/image.axd?picture=Windows-Live-Writer/Windows-Store-Apps-mit-XAML-und-C--Das-g/77A38F6A/Windows_Store_Apps_mit_XAML_und_C_Das_groe_Training.jpg" width="167" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Passend zu meiner letzten DVD “Meine erste Windows 8 App”, gibt es jetzt das umfangreiche Video-Training zum Thema “Windows Store Apps mit XAML und C#”. In diesem Video-Training erkunden und erlernen wir ausführlich die faszinierenden Möglichkeiten der App-Entwicklung für Windows 8 und Windows RT. Wir steigen mit den Grundlagen von XAML ein und sind auch bald mit den wichtigsten Neuerungen der Windows Runtime vertraut. Mit den Best Practices zum Thema MVVM - Model View ViewModel - und vielen Profi-Tipps steigst Du bald auf zum versierten App-Entwickler und -Designer.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Weitere Informationen&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;- &lt;a href="http://www.video2brain.com/de/videotraining/windows-store-apps-mit-xaml-und-c-das-grosse-training/details" target="_blank"&gt;Produktübersicht&lt;/a&gt;    &lt;br /&gt;- &lt;a href="http://www.video2brain.com/de/videotraining/windows-store-apps-mit-xaml-und-c-das-grosse-training/inhalte" target="_blank"&gt;Inhaltsverzeichnis&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Kostenfreie Probevideos&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:e2b82308-b490-476a-98f7-c83c13f94135" class="wlWriterEditableSmartContent" style="float:none;padding-bottom:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;"&gt;&lt;div&gt;&lt;object width="448" height="252"&gt;&lt;param name="movie" value="http://www.youtube.com/v/9QmkmfOB8L4?hl=en&amp;amp;hd=1"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/9QmkmfOB8L4?hl=en&amp;amp;hd=1" type="application/x-shockwave-flash" width="448" height="252"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em;"&gt;Einführung in XAML&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:9b5232fa-a9b0-40c7-8945-50988e47bd92" class="wlWriterEditableSmartContent" style="float:none;padding-bottom:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;"&gt;&lt;div&gt;&lt;object width="448" height="252"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8yXB6O6vqwg?hl=en&amp;amp;hd=1"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/8yXB6O6vqwg?hl=en&amp;amp;hd=1" type="application/x-shockwave-flash" width="448" height="252"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em;"&gt;App in den Store stellen&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Facebook Fanpage&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Weitere Tipps und Tricks zur Windows Store App Entwicklung findest du regelmäßig auf der Facebook Fanpage von “Meiner ersten Windows 8 App”: &lt;a title="https://www.facebook.com/MeineErsteWindows8App" href="https://www.facebook.com/MeineErsteWindows8App" target="_blank"&gt;https://www.facebook.com/MeineErsteWindows8App&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="5"&gt;Großes Geek-Gewinnspiel in Kooperation mit WindowsDeveloper.de bis zum 19.05.2013&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://windowsdeveloper.de/news/GeekGewinnspiel-Zeit-fuer-Windows-8-EinsteigerTutorials-zu-gewinnen" target="_blank"&gt;&lt;img title="geek-aktion" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="geek-aktion" src="http://webenliven-space.de/dotnetblog/image.axd?picture=Windows-Live-Writer/Windows-Store-Apps-mit-XAML-und-C--Das-g/76CB2980/geek-aktion.png" width="243" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Zu Gewinnen gibt es eine Signierte-Version meiner DVD “&lt;a href="http://webenliven-space.de/dotnetblog/post/2012/11/12/video2brain-e28093-Meine-erste-Windows-8-App.aspx" target="_blank"&gt;Meine erste Windows 8 App&lt;/a&gt;”. Dabei wurde die DVD nicht von mir persönlich unterzeichnet, sondern ich habe diese direkt in Redmond vom WinRT-Team verewigen lassen. Dabei sind Unterschriften von Tim Heuer (Program Manager für Microsoft XAML), Unni Ravindranathen (Program Manager für Microsoft Expression) und drei weiteren Mitgliedern des WinRT Teams.&lt;/p&gt;  &lt;p&gt;Außerdem verlosen wir vier Zugänge zum neuen video2brain-Online-Training “&lt;a href="http://www.video2brain.com/de/videotraining/windows-store-apps-mit-xaml-und-c-das-grosse-training" target="_blank"&gt;Windows Store Apps mit XAML und C#&lt;/a&gt;”.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://windowsdeveloper.de/news/GeekGewinnspiel-Zeit-fuer-Windows-8-EinsteigerTutorials-zu-gewinnen" target="_blank"&gt;&lt;img title="windows8-gewinnspiel-dvd-feature" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="windows8-gewinnspiel-dvd-feature" src="http://webenliven-space.de/dotnetblog/image.axd?picture=Windows-Live-Writer/Windows-Store-Apps-mit-XAML-und-C--Das-g/222F4A7B/windows8-gewinnspiel-dvd-feature.jpg" width="244" height="196" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Zum Gewinnspiel geht es hier lang: &lt;a href="http://windowsdeveloper.de/news/GeekGewinnspiel-Zeit-fuer-Windows-8-EinsteigerTutorials-zu-gewinnen" target="_blank"&gt;[Geek-Gewinnspiel] Zeit für Windows 8! – Einsteiger-Tutorials zu gewinnen&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Nun wünsche ich allen viel Spaß beim Rätseln!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Besten Dank&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Besten Dank an das ganze video2brain-Team!&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;a href="http://www.video2brain.com/de/videotraining/windows-store-apps-mit-xaml-und-c-das-grosse-training/details" target="_blank"&gt;&lt;img title="video2brain_logo" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="video2brain_logo" src="http://webenliven-space.de/dotnetblog/image.axd?picture=Windows-Live-Writer/Windows-Store-Apps-mit-XAML-und-C--Das-g/5A6DC193/video2brain_logo.png" width="213" height="62" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://webenliven-space.de/dotnetblog/post/2013/05/13/video2brain-Windows-Store-Apps-mit-XAML-und-C-e28093-Das-groc39fe-Training-2b-Geek-Gewinnspiel.aspx</link>
      <author>Gregor Biswanger</author>
      <dc:creator>Gregor Biswanger</dc:creator>
      <comments>http://webenliven-space.de/dotnetblog/post/2013/05/13/video2brain-Windows-Store-Apps-mit-XAML-und-C-e28093-Das-groc39fe-Training-2b-Geek-Gewinnspiel.aspx#comment</comments>
      <guid isPermaLink="False">http://webenliven-space.de/dotnetblog/post.aspx?id=d0e0a548-07bb-4a18-a977-59ec25b9ea84</guid>
      <pubDate>Mon, 13 May 2013 15:10:55 GMT</pubDate>
    </item>
    <item>
      <title>IIS &amp;amp; Windows Authentication – Troubleshooting mit Negotiate &amp;amp; NTLM</title>
      <description>&lt;div&gt;&lt;img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1840-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom:15px;" /&gt;&lt;/div&gt;Windows Authentifizierung ist eine einfache (und naheliegende) Authentifizierungs-Option für “Haus-interne” Webapplikationen. Setup Im IIS selbst kann man die Windows Authentifzierung sehr leicht anschalten: Natürlich kann man dies auch über die web.config steuern: &amp;#60;system.web&amp;#62; ... &amp;#60;authentication mode=&amp;quot;Windows&amp;quot;/&amp;#62; ... &amp;#60;/system.web&amp;#62; ... Fehlermeldung “HTTP Error 401.2 – Unauthorized”: Dies kann (wie fast immer) viele Gründe haben, z.B. weil ...</description>
      <link>http://feedproxy.google.com/~r/Code-insideBlog/~3/3B3s1xS6YPY/</link>
      <author>Robert Mühsig</author>
      <dc:creator>Robert Mühsig</dc:creator>
      <comments>http://code-inside.de/blog/2013/05/12/iis-windows-authentication-troubleshooting-mit-negotiate-ntlm/#comments</comments>
      <guid isPermaLink="False">http://code-inside.de/blog/?p=5192</guid>
      <pubDate>Sun, 12 May 2013 21:50:51 GMT</pubDate>
    </item>
    <item>
      <title>dotnet Cologne 2013 – Windows Azure Mobile Services</title>
      <description>&lt;p&gt;Zu meinem Vortrag &amp;bdquo;Einführung in die Windows Azure Mobile Services&amp;ldquo; auf der &lt;a title="www.dotnet-cologne.de" href="http://www.dotnet-cologne.de/" target="_blank"&gt;dotnet Cologne 2013&lt;/a&gt; finden sich hier die Slides.&lt;/p&gt;
&lt;p&gt;Die Slides wurden an den aktuellen RC der Mobile Services angepasst.&lt;/p&gt;
&lt;p&gt;Materialien zum Vortrag:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.st-lange.net/file.axd?file=2013%2f05%2fdnc13-WindowsAzureMobileServices-(StefanLange).pdf"&gt;Einführung in die Windows Azure Mobile Services&lt;/a&gt; (PDF &amp;ndash; 2,66 MB)&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>http://www.st-lange.net/post/dotnet-Cologne-2013-e28093-Windows-Azure-Mobile-Services.aspx</link>
      <author>Stefan Lange</author>
      <dc:creator>Stefan Lange</dc:creator>
      <comments>http://www.st-lange.net/post/dotnet-Cologne-2013-e28093-Windows-Azure-Mobile-Services.aspx#comment</comments>
      <guid isPermaLink="False">http://www.st-lange.net/post.aspx?id=a0a2ef8a-140c-415e-8dd2-71e94ea899cc</guid>
      <pubDate>Thu, 09 May 2013 17:45:00 GMT</pubDate>
    </item>
    <item>
      <title>TFS 2012 Lab Management mit Windows XP VMs</title>
      <description>&lt;p&gt;
Seit dem Update 2 ist es nun endlich wieder möglich, das Lab Management im TFS 2012
auch mit XP-Maschinen zu betreiben. Das Problem war hier bisher, dass der Test Agent
2012 das .Net Framework 4.5 benötigt, dass sich das aber auf XP nicht installieren
lässt. Man kann nun die Test Agents für 2012 Update 2 hier herunterladen: &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=38186"&gt;http://www.microsoft.com/en-us/download/details.aspx?id=38186&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Wie man bei der Installation vorgehen muss, wird hier beschrieben: &lt;a href="http://msdn.microsoft.com/en-us/library/jj153008.aspx#installagent"&gt;http://msdn.microsoft.com/en-us/library/jj153008.aspx#installagent&lt;/a&gt;.
Das Dokument hat jedoch einen kleinen Schönheitsfehler. Es verschweigt nämlich die
Tatsache, dass&amp;nbsp; man vor der Installation des Test Agents das .Net Framework manuell
installieren muss. Das Setup des Test Agents versucht nämlich das Framework zu installieren,
wenn keines vorhanden ist, dummerweise aber immer das 4.5er. Probleme gibt es übrigens
auch, wenn nur ein älteres Framework (z.B. 3.5) installiert ist. Dort schlägt die
Installation fehl. Auch hier hilft einfach Framework 4.0 manuell zu installieren.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/TFS-2012-Lab-Management-auf-Windows-XP_EDEB/image_4.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/TFS-2012-Lab-Management-auf-Windows-XP_EDEB/image_thumb_1.png" width="403" height="250" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Lustig finde ich auch die Fehlermeldung “0x800713ec – Asia” &lt;img class="wlEmoticon wlEmoticon-smile" style="border-top-style:none;border-left-style:none;border-bottom-style:none;border-right-style:none;" alt="Smile" src="http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/TFS-2012-Lab-Management-auf-Windows-XP_EDEB/wlEmoticon-smile_2.png" /&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.artiso.com/ProBlog/aggbug.ashx?id=70379028-4241-47b2-8077-4947ee14162e" alt="" /&gt;</description>
      <link>http://www.artiso.com/ProBlog/PermaLink,guid,70379028-4241-47b2-8077-4947ee14162e.aspx</link>
      <author>Thomas Schissler</author>
      <dc:creator>Thomas Schissler</dc:creator>
      <comments>http://www.artiso.com/ProBlog/CommentView,guid,70379028-4241-47b2-8077-4947ee14162e.aspx</comments>
      <guid isPermaLink="False">http://www.artiso.com/ProBlog/PermaLink,guid,70379028-4241-47b2-8077-4947ee14162e.aspx</guid>
      <pubDate>Wed, 08 May 2013 18:12:46 GMT</pubDate>
    </item>
    <item>
      <title>Json-Online-Tools: Viewer &amp;amp; Json2Csharp Generator</title>
      <description>&lt;div&gt;&lt;img width="150" height="150" src="http://code-inside.de/blog/wp-content/uploads/image1837-150x150.png" class="attachment-thumbnail wp-post-image" alt="image.png" title="image.png" style="margin-bottom:15px;" /&gt;&lt;/div&gt;Wo APIs im Spiel sind, ist das JSON Format nicht weit. Da ich immer mal wieder zwei Tools benutze, möchte ich diese hier auch mal kurz würdigen. JSON Viewer Wer nur den JSON-Text vor sich hat sieht meist die Struktur nicht. Über JSON Viewer kann man sich recht einfach einen Überblick verschaffen: [URL] JSON2CSharp Der ...</description>
      <link>http://feedproxy.google.com/~r/Code-insideBlog/~3/jxmMTr7aw5s/</link>
      <author>Robert Mühsig</author>
      <dc:creator>Robert Mühsig</dc:creator>
      <comments>http://code-inside.de/blog/2013/05/07/json-online-tools-viewer-json2csharp-generator/#comments</comments>
      <guid isPermaLink="False">http://code-inside.de/blog/?p=5182</guid>
      <pubDate>Tue, 07 May 2013 23:28:59 GMT</pubDate>
    </item>
    <item>
      <title>Coded UI Test unter Windows 8</title>
      <description>&lt;p&gt;
Wenn man unter Windows 8 Coded UI Tests auf laufen lassen möchte, hat man Probleme,
wenn man die Tests z.B. in einer Lab Umgebung mit Autologon ausführen möchte. D.h.
die Maschine bootet aus einem Snapshot und wird automatisch angemeldet. Dann bekommt
man als erstes den Windows 8 Startbildschirm. Da der Coded UI Test diesen nicht steuern
kann, haben wir hier ein Problem. Mit einem kleinen Tool kann man Windows 8 aber auch
so konfigurieren, dass es direkt mit dem Desktop startet. Vielleicht ist das ja auch
für andere Szenarien als dem hier beschriebenen interessant &lt;img class="wlEmoticon wlEmoticon-smile" style="border-top-style:none;border-left-style:none;border-bottom-style:none;border-right-style:none;" alt="Smile" src="http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/Coded-UI-Test-unter-Windows-8_D7EB/wlEmoticon-smile_2.png" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://win-8.de/MetroDeactivator/"&gt;http://win-8.de/MetroDeactivator/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img title="metrodeactivator" alt="" src="http://win-8.de/wp-content/uploads/2012/04/metrodeactivator.jpg" width="517" height="459" /&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.artiso.com/ProBlog/aggbug.ashx?id=86e98551-90a4-4e9f-a07d-f54ebf88bfe0" alt="" /&gt;</description>
      <link>http://www.artiso.com/ProBlog/PermaLink,guid,86e98551-90a4-4e9f-a07d-f54ebf88bfe0.aspx</link>
      <author>Thomas Schissler</author>
      <dc:creator>Thomas Schissler</dc:creator>
      <comments>http://www.artiso.com/ProBlog/CommentView,guid,86e98551-90a4-4e9f-a07d-f54ebf88bfe0.aspx</comments>
      <guid isPermaLink="False">http://www.artiso.com/ProBlog/PermaLink,guid,86e98551-90a4-4e9f-a07d-f54ebf88bfe0.aspx</guid>
      <pubDate>Tue, 07 May 2013 15:38:51 GMT</pubDate>
    </item>
    <item>
      <title>Mehr verdienen durch Experiment</title>
      <description>Könnten Sie oder die Firma, für die Sie arbeiten, mehr verdienen? Ja? Wunderbar, dann los! Nein? Warum nicht? Woher weiß man das?

Auf diese Frage bin ich neulich bei einem Aufenthalt im Marriott Hotel in Zürich gestoßen. Dort fand ich nämlich dieses Angebot vor:






Zum Verkauf auf dem Zimmer standen solche 1 Liter Flaschen Wasser für 8,00 CHF (ca. 6,50 EUR) das Stück.



Ein stolzer Preis,</description>
      <link>http://blog.ralfw.de/2013/05/mehr-verdienen-durch-experiment.html</link>
      <author>Ralf Westphal</author>
      <dc:creator>Ralf Westphal</dc:creator>
      <guid isPermaLink="False">tag:blogger.com,1999:blog-6090483181455953305.post-5553314168169986754</guid>
      <pubDate>Tue, 07 May 2013 10:10:00 GMT</pubDate>
    </item>
    <item>
      <title>Windows Azure Mobile Services - Windows Account Authentifizierung für Windows Store Apps</title>
      <description>&lt;p style="display:inline-block;"&gt;&lt;img style="float:left;padding-bottom:10px;padding-right:10px;" src="http://sascha-dittmann.de/image.axd?picture=%2f2013%2f05%2fmobile_services_winrt_msauth_teaser.png" alt="Windows Azure Mobile Services - Windows Account Authentifizierung f&amp;uuml;r Windows Store Apps" /&gt;&lt;strong&gt;In den bisherigen Teilen meiner Windows Azure Mobile Services Serie wurde eine Windows Store App erstellt, welche Nachrichten in der Cloud speichert. &lt;br /&gt;Bislang waren diese Nachrichten keinem Benutzer zugeordnet worden. &lt;br /&gt;Dies soll sich heute &amp;auml;ndern, indem die Benutzer via Microsoft Account authentifiziert werden...&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;App im Live Connect Developer Center registrieren&lt;/h2&gt;
&lt;p&gt;Damit sich die Benutzer der Windows Store App via Microsoft Account authentifizieren k&amp;ouml;nnen, muss diese zuerst im Live Connect Developer Center registriert werden.&lt;/p&gt;
&lt;p&gt;Dazu navigiert man zuerst auf die &lt;a href="http://go.microsoft.com/fwlink/p/?linkid=262039&amp;amp;clcid=0x409" rel="nofollow" target="_blank"&gt;My Applications Seite des Live Connect Developer Centers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mit einem Klick auf den &lt;em&gt;Create Application&lt;/em&gt;-Link wird die Registrierung gestartet:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sascha-dittmann.de/image.axd?picture=%2f2013%2f05%2fmobile_services_winrt_msauth_01.png" alt="Live Connect Developer Centers - Create Application Link" /&gt;&lt;/p&gt;
&lt;p&gt;Nachdem man den Namen der App sowie die prim&amp;auml;re Sprache angegeben hat, klickt man auf &amp;quot;I accept&amp;quot;:&lt;/p&gt;
&lt;p&gt;&lt;img style="border:#666666 1px solid;" src="http://sascha-dittmann.de/image.axd?picture=%2f2013%2f05%2fmobile_services_winrt_msauth_02.png" alt="Live Connect Developer Centers - Basic Information" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Unter den API Settings findet man dann die Client ID und das Client Secret, die man im n&amp;auml;chsten Schritt ben&amp;ouml;tigt.&lt;/p&gt;
&lt;p&gt;Au&amp;szlig;erdem muss die URL des entsprechenden Mobile Services als &amp;quot;Redirect Domain&amp;quot; eingetragen werden:&lt;/p&gt;
&lt;p&gt;&lt;img style="border:#666666 1px solid;" src="http://sascha-dittmann.de/image.axd?picture=%2f2013%2f05%2fmobile_services_winrt_msauth_03.png" alt="Live Connect Developer Centers - API Settings" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&amp;Auml;nderungen bei den Mobile Services&lt;/h2&gt;
&lt;p&gt;Die gerade erhaltene Client ID, sowie das Client Secret, tr&amp;auml;gt man anschlie&amp;szlig;end in den Identity Bereich des Mobile Services ein und klickt &amp;quot;Save&amp;quot;:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sascha-dittmann.de/image.axd?picture=%2f2013%2f05%2fmobile_services_winrt_msauth_04.png" alt="Windows Azure Mobile Services - Identity" /&gt;&lt;/p&gt;
&lt;p&gt;Jetzt sind die Mobile Services bereit, um die Benutzer via Microsoft Account authentifizieren zu k&amp;ouml;nnen.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&amp;Auml;nderungen an der Windows Store App&lt;/h2&gt;
&lt;p&gt;Damit die Anwender der Windows Store App zur Eingabe ihrer &lt;em&gt;Microsoft Account&lt;/em&gt;-Benutzerdaten aufgefordert werden, gen&amp;uuml;gt eine Zeile Code:&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;await _mobileServiceClient.LoginAsync(
  MobileServiceAuthenticationProvider.MicrosoftAccount);&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Um dabei auch m&amp;ouml;gliche Fehlermeldungen, die beispielsweise beim Abbrechen des Dialogs auftreten, abzufangen sieht die entsprechende Methode im ViewModel der &amp;quot;Let&amp;#39;s Talk&amp;quot;-App wie folgt aus:&lt;/p&gt;
&lt;pre class="brush: c-sharp;highlight: [8,9]"&gt;private async Task Authenticate()
{
  if (_mobileServiceClient.CurrentUser != null) return;

  var message = String.Empty;
  try
  {
    await _mobileServiceClient.LoginAsync(
      MobileServiceAuthenticationProvider.MicrosoftAccount);
  }
  catch (InvalidOperationException)
  {
    message = &amp;quot;login unsuccessful&amp;quot;;
  }
  catch (Exception ex)
  {
    message = ex.Message;
  }
  if (!String.IsNullOrEmpty(message))
    await new MessageDialog(message, &amp;quot;Authenticate User&amp;quot;).ShowAsync();
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;F&amp;uuml;r die Benutzer stellt sich das wie folgt dar:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sascha-dittmann.de/image.axd?picture=%2f2013%2f05%2fmobile_services_winrt_msauth_06.png" alt="Windows Store App - Eingabe des Microsoft Accounts" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Bei der ersten Anmeldung muss au&amp;szlig;erdem der Zugriff auf die Daten des Benutzers best&amp;auml;tigt werden:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sascha-dittmann.de/image.axd?picture=%2f2013%2f05%2fmobile_services_winrt_msauth_07.png" alt="Windows Store App - Best&amp;auml;tigung der angeforderten Berechtigungen" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Berechtigungen auf Tabellenebene anpassen&lt;/h2&gt;
&lt;p&gt;Nur angemeldete Benutzer sollen Nachrichten&amp;nbsp;hinzuf&amp;uuml;gen bzw. l&amp;ouml;schen k&amp;ouml;nnen.&lt;/p&gt;
&lt;p&gt;Um dies zu gew&amp;auml;hrleisten, m&amp;uuml;ssen die &lt;em&gt;Insert&lt;/em&gt;- und &lt;em&gt;Delete&lt;/em&gt;-Rechte der&amp;nbsp;&lt;em&gt;Messages&lt;/em&gt;-Tabelle auf &amp;quot;Only Authenticated Users&amp;quot; gesetzt werden.&lt;/p&gt;
&lt;p&gt;Au&amp;szlig;erdem sind in den &amp;quot;Let&amp;#39;s Talk&amp;quot;-Apps &amp;Auml;nderungen an den Nachrichten nicht zul&amp;auml;ssig, weshalb das &lt;em&gt;Update&lt;/em&gt;-Recht nur f&amp;uuml;r Skripte und Administratoren freigegeben wird:&lt;/p&gt;
&lt;p&gt;&lt;img style="border:#666666 1px solid;" src="http://sascha-dittmann.de/image.axd?picture=%2f2013%2f05%2fmobile_services_winrt_msauth_05.png" alt="Windows Azure Mobile Services - Message Table Permissions" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Damit beim Hinzuf&amp;uuml;gen einer Nachricht auch der Benutzer gespeichert wird, muss eine weitere Zeile im &lt;em&gt;Insert&lt;/em&gt;-Skript hinzugef&amp;uuml;gt werden:&lt;/p&gt;
&lt;pre class="brush: js;highlight: [8];"&gt;function insert(item, user, request) {
  if (!item.body || item.body.length &amp;lt; 2) {
    request.respond(statusCodes.BAD_REQUEST, &amp;#39;The message text must be 2 or more characters long.&amp;#39;);
    return;
  }

  item.createdAt = new Date();
  item.userId = user.userId;

  request.execute();
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Durch das Dynamische-Schema-Feature der Mobile Services wird beim n&amp;auml;chsten Speichervorgang die &lt;em&gt;Messages&lt;/em&gt;-Tabelle um die UserID Spalte erweitert.&lt;/p&gt;
&lt;p&gt;Auch das L&amp;ouml;schen der Nachrichten soll nur dessen Besitzer erlaubt werden.&lt;/p&gt;
&lt;p&gt;Dies kann durch folgendes Delete-Skript der &lt;em&gt;Messages&lt;/em&gt;-Tabelle erreicht werden:&lt;/p&gt;
&lt;pre class="brush: js;"&gt;function del(id, user, request) {
  var messagesTable = tables.getTable(&amp;#39;messages&amp;#39;);

  messagesTable.where({
    id: id,
    userId: user.userId
  }).read({
    success: function(results) {
      if (results.length === 0) {
        request.respond(statusCodes.UNAUTHORIZED, &amp;#39;You can only delete you own messages.&amp;#39;);
      }
      else {
        request.execute();
      }
    }
  });
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Dieses macht eine Lookup-Abfrage auf die &lt;em&gt;Messages&lt;/em&gt;-Tabelle und wirft eine Fehlermeldung, wenn der Benutzer versucht eine fremde Nachricht zu l&amp;ouml;schen.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Wie geht es weiter?&lt;/h2&gt;
&lt;p&gt;Im n&amp;auml;chsten Teil dieser Serie wird die Windows Store App mit einer Microsoft-Account-Authentifizierung via Live SDK erweitert, damit die Benutzer sich automatisch mit ihrem f&amp;uuml;r die Windows Anmeldung genutztem Konto anmelden k&amp;ouml;nnen.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;img src="http://sascha-dittmann.de/image.axd?picture=Shared%2finfo.png" alt="Weitere Informationen" /&gt;&lt;/td&gt;
&lt;td&gt;Beispielanwendung: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/SaschaDittmann/LetsTalk/tree/master/04_LetsTalk_WinRT_WindowsAccountAuthentication" rel="nofollow" target="_blank"&gt;Let&amp;#39;s Talk - Windows Account Authentifizierung in der Windows Store App&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;Weitere Informationen: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.sascha-dittmann.de/post/Windows-Azure-Mobile-Services-Die-Starthilfe-fuer-App-Entwickler.aspx" target="_blank"&gt;Teil 1: Windows Azure Mobile Services - Die Starthilfe f&amp;uuml;r App Entwickler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sascha-dittmann.de/post/Windows-Azure-Mobile-Services-CRUD-fuer-Windows-Store-Apps.aspx" target="_blank"&gt;Teil 2: Windows Azure Mobile Services - CRUD f&amp;uuml;r Windows Store Apps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sascha-dittmann.de/post/Windows-Azure-Mobile-Services-Eingabevalidierung-mittels-Tabellenskript.aspx" target="_blank"&gt;Teil 3: Windows Azure Mobile Services - Eingabevalidierung mittels Tabellenskript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sascha-dittmann.de/post/Windows-Azure-Mobile-Services-Busy-Indicator.aspx" target="_blank"&gt;Teil 4: Windows Azure Mobile Services - Busy Indicator f&amp;uuml;r Windows Store Apps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/p/?linkid=262039&amp;amp;clcid=0x409" rel="nofollow" target="_blank"&gt;Live Connect Developer Center - My Applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.windowsazure.com/en-us/home/features/mobile-services/" rel="nofollow" target="_blank"&gt;Windows Azure Mobile Services&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;hr /&gt;</description>
      <link>http://sascha-dittmann.de/post/Windows-Azure-Mobile-Services-Windows-Account-Authentifizierung-fuer-Windows-Store-Apps.aspx</link>
      <author>Sascha Dittmann</author>
      <dc:creator>Sascha Dittmann</dc:creator>
      <comments>http://sascha-dittmann.de/post/Windows-Azure-Mobile-Services-Windows-Account-Authentifizierung-fuer-Windows-Store-Apps.aspx#comment</comments>
      <guid isPermaLink="False">http://sascha-dittmann.de/post.aspx?id=f8103afd-b6d6-405a-a7cd-86a9a6a90d99</guid>
      <pubDate>Tue, 07 May 2013 08:07:00 GMT</pubDate>
    </item>
    <item>
      <title>Slides / Demos zu meinen dotnet Cologne 2013 Sessions #dnc13 #hypermedia #spa #aspnetwebapi</title>
      <description>&lt;p&gt;Bereits zum 5. Mal fand am vergangenen Freitag die &lt;a href="http://dotnet-cologne.de"&gt;dotnet Cologne&lt;/a&gt; in Köln statt. Über 400 Teilnehmer und die Orga haben die Veranstaltung wieder zu einem Highlight der .NET Community gemacht.&lt;/p&gt;  &lt;p&gt;Ich hatte die Gelegenheit, zwei Sessions beizutragen:&lt;/p&gt;  &lt;h2&gt;Hypermedia mit der ASP.NET Web API &lt;/h2&gt;  &lt;p&gt;REST ist der wohl am häufigsten mißbrauchte Begriff der letzten Jahre. Viele REST-APIs stellen sich bei genauer Betrachtung als klassische CRUD-Services heraus, ohne ein Kernelement von REST zu berücksichtigen: Hypermedia. Der Vortrag zeigt die Umsetzung von Hypermedia APIs mit ASP.NET Web API.&lt;/p&gt;  &lt;p&gt;Die Slides finden sich hier:&lt;/p&gt;    &lt;div style="margin-bottom:5px;"&gt;&lt;strong&gt;&lt;a title="Hypermedia mit der ASP.NET Web API" href="http://www.slideshare.net/AlexZeitler/hypermedia-mit-der-aspnet-web-api" target="_blank"&gt;Hypermedia mit der ASP.NET Web API&lt;/a&gt; &lt;/strong&gt;from &lt;strong&gt;&lt;a href="http://www.slideshare.net/AlexZeitler" target="_blank"&gt;Alexander Zeitler&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;  &lt;p&gt;Der Code kann &lt;a href="http://slides.alexonasp.net/dnc13/hypermedia/WebApiHyperMediaSimple.zip"&gt;hier&lt;/a&gt; heruntergeladen werden.&lt;/p&gt;  &lt;h2&gt;Single Page Applications – jenseits von “ToDo”&lt;/h2&gt;  &lt;p&gt;Mit dem ASP.NET and Web Tools 2012.2 Release hat Microsoft nun auch eine Projekt-Vorlage für Single Page Applications in Visual Studio 2012 platziert. Leider geht das Beispiel nicht über die klassische ToDo-App hinaus und auch sonst findet man wenig Dokumentation zum Aufbau von Single Page Applications, die komplexere Szenarien behandeln. In diesem Vortrag wird unter Verwendung individuell zusammengestellter JavaScript-Frameworks die Entwicklung großer Single Page Applications erklärt.&lt;/p&gt;  &lt;p&gt;Die Slides finden sich &lt;a href="http://slides.alexonasp.net/dnc13/spa/#/"&gt;hier&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://slides.alexonasp.net/dnc13/spa/#/"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="Single Page Applications Slides" border="0" alt="Single Page Applications Slides" src="http://blog.alexonasp.net/image.axd?picture=Windows-Live-Writer/Slides--Demos-zu-meinen-dotnet-Cologne-2/1E3AF38D/image.png" width="400" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://blog.alexonasp.net/post/2013/05/05/Slides-Demos-zu-meinen-dotnet-Cologne-2013-Sessions-dnc13-hypermedia-spa-aspnetwebapi.aspx</link>
      <author>Alexander Zeitler</author>
      <dc:creator>Alexander Zeitler</dc:creator>
      <comments>http://blog.alexonasp.net/post/2013/05/05/Slides-Demos-zu-meinen-dotnet-Cologne-2013-Sessions-dnc13-hypermedia-spa-aspnetwebapi.aspx#comment</comments>
      <guid isPermaLink="False">http://blog.alexonasp.net/post.aspx?id=9678770e-2f5f-4f05-a550-c43f235d9711</guid>
      <pubDate>Sun, 05 May 2013 12:19:02 GMT</pubDate>
    </item>
    <item>
      <title>dotnet Cologne 2013 - Slides und Links zu meinen Sessions</title>
      <description>&lt;p style="display:inline-block;"&gt;&lt;img style="float:left;padding-bottom:10px;padding-right:10px;" src="http://sascha-dittmann.de/image.axd?picture=%2f2013%2f05%2fdnc13_banner_180x160.png" alt="dotnet Cologne 2013" /&gt;&lt;strong&gt;Am vergangenen Freitag &amp;ouml;ffnete die &lt;a href="http://dotnet-cologne.de/" rel="nofollow" target="_blank"&gt;dotnet Cologne&lt;/a&gt; bereits zum f&amp;uuml;nften mal ihre Pforten. &lt;br /&gt;Wie auch schon in den letzten Jahren str&amp;ouml;mten auch an diesem Tag wieder hunderte von Entwicklern die R&amp;auml;umlichkeiten des &lt;a href="http://www.komed.de/" rel="nofollow" target="_blank"&gt;Komeds&lt;/a&gt; in K&amp;ouml;ln. &lt;br /&gt;Die Slides bzw. Links zu meiner Microsoft HDInsight Session und der Windows Azure Mobile Services Session von &lt;a href="http://www.st-lange.net/" target="_blank"&gt;Stefan Lange&lt;/a&gt; und mir findet ihr in diesem Blog Post...&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Big Data mit Microsoft HDInsight f&amp;uuml;r .NET Entwickler&lt;/h2&gt;
&lt;h3&gt;Abstrakt&lt;/h3&gt;
&lt;p&gt;Wir leben in einem Datenzeitalter! Nach Sch&amp;auml;tzungen in 2006, betrug das weltweite &amp;quot;Datenuniversum&amp;quot; ca. 0.18 Zettabytes (10^21 Bytes bzw. 1 Mrd. Terrabyte). In 2011 hat sich dieses Volumen sogar verzehnfacht (1,8 Zettabytes). Somit wird in vielen Anwendungsszenarien das Thema Big Data und Big Processing immer wichtiger. Es fallen sehr viele Daten an, die von immer mehr Benutzern und Systemen konsumiert und ausgewertet werden wollen. Klassische relationale Datenbanksysteme, sowie Statistik- und Visualisierungstools, sind oft nicht in der Lage, derart gro&amp;szlig;e Datenmengen zu verarbeiten. F&amp;uuml;r Big Data kommt daher eine neue Art von Software zum Einsatz, die massiv parallel auf bis zu hunderten oder tausenden von Prozessoren bzw. Servern arbeitet, wie z.B. Microsoft HDInsight. Diese Session liefert einen &amp;Uuml;berblick &amp;uuml;ber die Grundpfeiler des Frameworks hinter HDInsight und wie Analysen mit JavaScript und .NET Code durchgef&amp;uuml;hrt werden k&amp;ouml;nnen. &lt;br /&gt; &lt;br /&gt;(Level 200)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Slides&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p style="margin-bottom:5px;"&gt;&lt;strong&gt;&lt;a title="dotnet Cologne 2013 - Microsoft HD Insight f&amp;uuml;r .NET Entwickler" href="http://www.slideshare.net/Sascha5812/dotnet-cologne-2013-microsoft-hd-insight-fur-net-entwickler" rel="nofollow" target="_blank"&gt;SlideShare: dotnet Cologne 2013 - Microsoft HD Insight f&amp;uuml;r .NET Entwickler&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Weiterf&amp;uuml;hrende Links&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.sascha-dittmann.de/?tag=/HDInsight" target="_blank"&gt;Meine Microsoft HDInsight Blog Posts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dotnetpro.de/articles/articlearchive1783.aspx" rel="nofollow" target="_blank"&gt;Schwerpunktthema Big Data in der dotnetpro 04/2013&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.windowsazure.com/en-us/manage/services/hdinsight/" rel="nofollow" target="_blank"&gt;Windows Azure HDInsight&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Einf&amp;uuml;hrung in die Azure Mobile Services&lt;/h2&gt;
&lt;h3&gt;Abstrakt&lt;/h3&gt;
&lt;p&gt;Die Mobile Services geh&amp;ouml;ren zu den neuesten Azure Technologien und bieten Entwicklern ein solides und sicheres Backend f&amp;uuml;r ihre mobilen Apps. Ob Datenbankzugriff, Authentifizierung, Server-seitige gescriptete Logik oder Notifications, alles kann bemerkenswert einfach konfiguriert und in der eigenen Anwendung genutzt werden. Stefan Lange zeigt wie elegant sich die Azure Mobile Services in Windows 8 und Windows Phone 8 einbinden lassen, aber auch wie man sie ganz unabh&amp;auml;ngig davon nutzen kann. &lt;br /&gt; &lt;br /&gt;(Level 200)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Slides&lt;/h3&gt;
&lt;p&gt;Gemeinsam mit &lt;a href="http://www.st-lange.net/" target="_blank"&gt;Stefan Lange&lt;/a&gt; habe ich die Windows Azure Mobile Services auf der dotnet Cologne 2013 vorgestellt:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p style="margin-bottom:5px;"&gt;&lt;strong&gt;&lt;a title="dotnet Cologne 2013 - Windows Azure Mobile Services" href="http://www.slideshare.net/Sascha5812/dnc13-windows-azuremobileservicesstefanlange" rel="nofollow" target="_blank"&gt;SlideShare: dotnet Cologne 2013 - Windows Azure Mobile Services&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Weiterf&amp;uuml;hrende Links&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.sascha-dittmann.de/?tag=/Mobile+Services" target="_blank"&gt;Meine Mobile Services Blog Posts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SaschaDittmann/LetsTalk" rel="nofollow" target="_blank"&gt;Das Mobile Services Demo Projekt &amp;quot;Let&amp;#39;s Talk&amp;quot; auf GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.windowsazure.com/en-us/develop/mobile/" rel="nofollow" target="_blank"&gt;Windows Azure Mobile Services&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;</description>
      <link>http://sascha-dittmann.de/post/dotnet-Cologne-2013-Slides-und-Links-zu-meinen-Sessions.aspx</link>
      <author>Sascha Dittmann</author>
      <dc:creator>Sascha Dittmann</dc:creator>
      <comments>http://sascha-dittmann.de/post/dotnet-Cologne-2013-Slides-und-Links-zu-meinen-Sessions.aspx#comment</comments>
      <guid isPermaLink="False">http://sascha-dittmann.de/post.aspx?id=c57ce285-7de7-4859-8944-7b8655417b0e</guid>
      <pubDate>Sun, 05 May 2013 10:09:00 GMT</pubDate>
    </item>
    <item>
      <title>mite: Erfahrungen nach einem Monat</title>
      <description>Ende März hatte ich einen Artikel über meine Suche nach einer guten Zeiterfassung geschrieben. Damals habe ich mich für mite entschieden, dass viele Funktionen in einer einfach zu bedienenden Web-Oberfläche anbietet. Nun ist etwas mehr als ein Monat vergangen und mein kostenloser Testmonat ist abgelaufen. Da steht natürlich die Frage im Raum, ob ich meinen [...]&lt;div class="yarpp-related-rss"&gt;
&lt;h4&gt;Related posts:&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.fabiandeitelhoff.de/2013/03/zeiterfassung-mit-mite/" rel="bookmark" title="Zeiterfassung mit mite"&gt;Zeiterfassung mit mite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.fabiandeitelhoff.de/2013/03/fernuni-hagen-die-unterlagen-sind-da/" rel="bookmark" title="FernUni Hagen: Die Unterlagen sind da!"&gt;FernUni Hagen: Die Unterlagen sind da!&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;img src="http://yarpp.org/pixels/9691da6fe4156d349dfdc9f6893ba377" alt="" /&gt;
&lt;/div&gt;</description>
      <link>http://www.fabiandeitelhoff.de/2013/05/mite-erfahrungen-nach-einem-monat/</link>
      <author>Fabian Deitelhoff</author>
      <dc:creator>Fabian Deitelhoff</dc:creator>
      <comments>http://www.fabiandeitelhoff.de/2013/05/mite-erfahrungen-nach-einem-monat/#comments</comments>
      <guid isPermaLink="False">http://www.fabiandeitelhoff.de/?p=675</guid>
      <pubDate>Sat, 04 May 2013 11:00:47 GMT</pubDate>
    </item>
    <item>
      <title>Warum fragmentiert die binäre Serialisierung</title>
      <description>&lt;p&gt;&lt;img title="fragmented2" class="leftImg" alt="fragmented2" src="http://blog.klaus-b.net/image.axd?picture=fragmented2.png" width="150" height="113" /&gt;... oder; die Krux mit den automatischen Größen von Streams.     &lt;br /&gt;Da in der heutigen Zeit, vor allem in der Welt von verwaltetem Code, kaum noch eigene proprietäre Dateiformate Anwendung finden, werden die Allerwenigsten auf dieses Problem stoßen. Auch die Tatsache, dass für beinahe jede Anforderung ein Framework oder eine Bibliothek vorhanden ist, trägt mit Sicherheit dazu bei, solche elementaren Probleme von der Bildfläche verschwinden zu lassen. Für eine ganze Reihe von Entwicklern hört der Gedanke an binäre Serialisierung auf, wenn sie ein Framework wie &lt;a title="Binary JSON" href="http://bsonspec.org/"&gt;BSON&lt;/a&gt; oder &lt;a title="Projekt ProtoBuf" href="http://code.google.com/p/protobuf/"&gt;Protocol Buffers&lt;/a&gt; zur Anwendung bringen können. Dies soll keine Kritik und schon gar keine negative sein. Ganz im Gegenteil. Diese Frameworks erleichtern die tägliche Arbeit in vielerlei Hinsicht. Verbergen leider aber auch die eigentliche Problematik der Serialisierung. Für mich gehört dieses Thema nach wie vor zu einem der interessantesten in der Softwareentwicklung. Jetzt aber zurück zum eigentlichen Thema.&lt;/p&gt;  &lt;p&gt;Für ein aktuelles Projekt verwende ich ein eigenes binäres Dateiformat, in das Datenblöcke in serialisierter und komprimierter Form als &lt;a title="Byte Struktur" href="http://msdn.microsoft.com/yyb1w04y.aspx" rel="msdn nofollow"&gt;byte&lt;/a&gt;-Arrays geschrieben werden. Während der Testphase auf einem Livesystem stellte ich fest, dass die Dateigröße überproportional zum Inhalt anwuchs. Zunächst maß ich dem Verhalten keine besondere Bedeutung bei, da ein ähnliches Verhalten auch bei Formaten wie etwa den Access Datenbankdateien oder den Dateien der Windows Registrierung ebenfalls auftritt. Insgesamt ließ mich das “Problem” aber nicht in Ruhe. Nachdem ich mir eine der Dateien im Hex-Format angesehen hatte, war schnell klar, was dem Problem zugrunde lag:     &lt;br /&gt;Zwischen den einzelnen Datenblöcken wurde immer eine ganze Menge an 0-Byte-Zeichen geschrieben.&lt;/p&gt;  &lt;p&gt;&lt;img title="hexview11" class="centerImg" alt="hexview11" src="http://blog.klaus-b.net/image.axd?picture=hexview11.png" width="520" height="493" /&gt;&lt;/p&gt;  &lt;p&gt;Das Resultat war ersichtlich. Aber woher kam dieses Verhalten?    &lt;br /&gt;Wie bereits Eingangs erwähnt, werden die Datenblöcke nach dem serialisieren auch komprimiert. Dazu wird die Klasse &lt;a title="DeflateStream Klasse" href="http://msdn.microsoft.com/0y917bht.aspx" rel="msdn nofollow"&gt;DeflateStream&lt;/a&gt; der Frameworks verwendet. Diese Klasse komprimiert den Inhalt eines &lt;a title="Stream Klasse" href="http://msdn.microsoft.com/8f86tw9e.aspx" rel="msdn nofollow"&gt;Stream&lt;/a&gt; in einen anderen. Genau da entstand das Problem.     &lt;br /&gt;Das Problem ist vielmehr eine Eigenart der DeflateStream Klasse in Verbindung mit einem &lt;a title="MemoryStream Klasse" href="http://msdn.microsoft.com/9a84386f.aspx" rel="msdn nofollow"&gt;MemoryStream&lt;/a&gt;. Das Verhalten lässt sich am einfachsten mit einem kleinen Beispiel verdeutlichen. Folgend wird eine Liste aus zufälligen Zeichenfolgen in ein Byte-Array serialisiert und anschließend komprimiert. Mit der Variablen &lt;strong&gt;numberOfEntries&lt;/strong&gt; kann die Anzahl der Einträge in der Liste und dadurch indirekt die Länge des komprimierten Datenblocks gesteuert werden. In der Variablen &lt;strong&gt;realLength&lt;/strong&gt; wird die Anzahl der tatsächlich verwertbaren Bytes im Array ausgegeben. Bei einer geringen Anzahl von Einträgen in der temporären Liste, ist der Wert von &lt;strong&gt;realLength&lt;/strong&gt; immer deutlich kleiner als die Länge des erzeugten Arrays &lt;strong&gt;output&lt;/strong&gt;. Erst ab etwa 130 Einträge in der temporären Liste tritt dieses Verhalten nicht mehr auf. Ab dieser Größe wird die Ausgabe ohne nachgestellte 0-Byte-Zeichen erzeugt.&lt;/p&gt;  &lt;div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:ecc0177b-3955-4856-9ccc-c9690bb1d1a9" class="wlWriterEditableSmartContent"&gt;&lt;pre class="c#"&gt;var numberOfEntries = 10;
var chars = &amp;quot;abcdefghijklmnopqrstuvwxyz&amp;quot;;
var tempList = new List&amp;lt;string&amp;gt;(numberOfEntries);
var random = new Random();
for (int i = 0; i &amp;lt; numberOfEntries; i++)
{
    var start = random.Next(0, chars.Length - 1);
    var length = random.Next(start + 1, chars.Length) - start;
    var entry = chars.Substring(start, length);
    tempList.Add(entry);
}
var buffer = Encoding.Default.GetBytes(string.Join(&amp;quot;|&amp;quot;, tempList));
byte[] output = null;
using (var instream = new MemoryStream(buffer))
{
    using (var outStream = new MemoryStream())
    {
        using (var compress = new DeflateStream(outStream, CompressionMode.Compress))
        {
            instream.CopyTo(compress);
        }
        output = outStream.GetBuffer();
    }
}
// Die Länge des Ausgabe-Arrays
// Unter 130 Einträgen wird fast immer eine Länge von 256 erzeugt.
var arrayLength = output.Length;
// Die tatsächliche Anzahl an verwertbaren Bytes im Array
var realLength = output.Count(b =&amp;gt; b &amp;gt; byte.MinValue);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Im obigen Beispiel, wird im zweiten using-Block der MemoryStream für die Ausgabe initialisiert, der nach dem Verlassen des innersten using-Blocks die komprimierten Daten enthält. Initial wird hier ein leerer Stream mit Capacity und Length 0 erzeugt. Der DeflateStream kopiert seinen Inhalt in diesen Stream und legt dabei so lange eine Länge von 256 Bytes fest, bis diese Größe überschritten wird. Erst dann wird der Ausgabestream mit der korrekten Länge des Inhalts des DeflateStream erzeugt. Das bedeutet als Resultat für die, aus den Ergebnissen erzeugte, Datei:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Je mehr Datenblöcke aus Inhalten mit geringer Größe erzeugt werden, desto fragmentierter ist das Ergebnis&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Zur Lösung dieses “Problems”, oder besser unschönen Verhaltens, stehen jetzt zwei Ansatzpunkte zur Auswahl:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Am Anfang des Prozesses, in dem der Konstruktor des Ausgabestreams mit einer kleineren Kapazität initialisiert wird. &lt;/li&gt;
  &lt;li&gt;Am Ende des Prozesses, in dem die Ausgabe bearbeitet wird. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Den ersten Ansatzpunkt habe ich verworfen, da die Größe des komprimierten Inhalts nicht genau vorhergesagt werden kann. Auch beim Versuch der Initialisierung mit einer Kapazität die klein genug ist, wurde im Test oft genug die Ausgabe mit 256 Bytes im &lt;a title="Array Klasse" href="http://msdn.microsoft.com/czz5hkty.aspx" rel="msdn nofollow"&gt;Array&lt;/a&gt; erzeugt.&lt;/p&gt;
&lt;p&gt;Zur Umsetzung des zweiten Ansatzpunkts, habe ich mich für eine Erweiterungsmethode entschieden, die ähnlich wie die &lt;a title="String.TrimEnd Methode" href="http://msdn.microsoft.com/64zz6w66.aspx" rel="msdn nofollow"&gt;TrimEnd&lt;/a&gt;-Methode der String-Klasse, alle nachgestellten 0-Byte-Zeichen aus dem Ausgabe-Array entfernt.&lt;/p&gt;
&lt;div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:4a55c3f7-7ed8-40ad-8614-bb6d8a4a691f" class="wlWriterEditableSmartContent"&gt;&lt;pre class="c#"&gt;internal static byte[] TrimEnd(this byte[] bytes)
{
    var startLength = bytes.GetLength(0);
    var startPos = startLength - 1;
    var trimPos = startPos;
    for (int i = startPos; i &amp;gt; -1; i--)
    {
        if (bytes[i] &amp;gt; byte.MinValue)
        {
            trimPos = i;
            break;
        }
    }
    if (trimPos == startPos)
    {
        return bytes;
    }
    var trimmedLength = trimPos + 1;
    var trimmed = new byte[trimmedLength];
    Array.Copy(bytes, trimmed, trimmedLength);
    return trimmed;
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Wenn jetzt beim Abruf des Inhalts diese Erweiterungsmethode aufgerufen wird, ist das Ergebnis jedes mal wie erwartet. Das Problem der Fragmentierung innerhalb der Datei hat sich somit erledigt.&lt;/p&gt;
&lt;div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:04e1348d-0980-4449-b5c1-7d6e0ff68574" class="wlWriterEditableSmartContent"&gt;&lt;pre class="c#"&gt;output = outStream.GetBuffer().TrimEnd();&lt;/pre&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;/h3&gt;
&lt;h3&gt;Fazit:&lt;/h3&gt;
&lt;p&gt;Der bewusste Verzicht auf bestehende Frameworks und Bibliotheken ist oft mit einem, manchmal deutlichem, Mehraufwand verbunden. Besonders dann, wenn unvorhergesehene Probleme oder Eigenarten auftauchen. 
  &lt;br /&gt;Andererseits verschaffen mir gerade diese unvorhersehbaren Situationen einen tieferen Einblick in die jeweilige Materie und somit meist ein besseres Verständnis für das eigentliche Problem. 
  &lt;br /&gt;Wie ich bereits weiter oben gesagt habe: Frameworks für spezielle Anforderungen sind eine feine Sache und meist auch eine große Arbeitserleichterung. 
  &lt;br /&gt;Dennoch wird es immer wieder Entwickler geben die einfach aus Neugier, was ohne sie machbar ist, darauf verzichten.&lt;/p&gt;
&lt;div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:dd005640-5935-4b0e-a0c9-a31b24564563" class="wlWriterSmartContent"&gt;Technorati-Tags: &lt;a href="http://technorati.com/tags/clr" rel="tag"&gt;clr&lt;/a&gt; | &lt;a href="http://technorati.com/tags/c%23" rel="tag"&gt;c#&lt;/a&gt; | &lt;a href="http://technorati.com/tags/serialization" rel="tag"&gt;serialization&lt;/a&gt; | &lt;a href="http://technorati.com/tags/binary" rel="tag"&gt;binary&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://blog.klaus-b.net/post/2013/05/03/Warum-fragmentiert-die-binare-Serialisierung.aspx</link>
      <author>Klaus Bock</author>
      <dc:creator>Klaus Bock</dc:creator>
      <comments>http://blog.klaus-b.net/post/2013/05/03/Warum-fragmentiert-die-binare-Serialisierung.aspx#comment</comments>
      <guid isPermaLink="False">http://blog.klaus-b.net/post.aspx?id=ea488e2b-8958-4f43-b5f6-e6b6622859ce</guid>
      <pubDate>Fri, 03 May 2013 15:49:00 GMT</pubDate>
    </item>
    <item>
      <title>Exclusives Video von meiner Hochzeit ;)</title>
      <description>So ungefähr war das auf meiner Hochzeit … NOT … ...read more...(&lt;a href="http://feedproxy.google.com/~r/theolivercom/~3/zOAi3jIMPVc/"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10415838" width="1" height="1" alt="" /&gt;</description>
      <link>http://feedproxy.google.com/~r/theolivercom/~3/zOAi3jIMPVc/</link>
      <author>Oliver Scheer</author>
      <dc:creator>The-Oliver.com</dc:creator>
      <comments>http://feedproxy.google.com/~r/theolivercom/~3/zOAi3jIMPVc/#comments</comments>
      <guid isPermaLink="False">91d46819-8472-40ad-a661-2c78acb4018c:10415838</guid>
      <pubDate>Fri, 03 May 2013 09:40:04 GMT</pubDate>
    </item>
    <item>
      <title>Nachwuchs gesucht: MACH Karriere als Technologieberater (m/w)</title>
      <description>Microsoft Deutschland rekrutiert derzeit wieder Hochschulabsolventen für das Einstiegsprogramm MACH (Microsoft Academy for College Hires). Wir suchen zum 1. Oktober 2013 IT-begeisterte Absolventen der (Wirtschafts-)Informatik oder ähnlichen Fachrichtungen...(&lt;a href="http://feedproxy.google.com/~r/theolivercom/~3/inv9_4JOd9I/"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10415839" width="1" height="1" alt="" /&gt;</description>
      <link>http://feedproxy.google.com/~r/theolivercom/~3/inv9_4JOd9I/</link>
      <author>Oliver Scheer</author>
      <dc:creator>The-Oliver.com</dc:creator>
      <comments>http://feedproxy.google.com/~r/theolivercom/~3/inv9_4JOd9I/#comments</comments>
      <guid isPermaLink="False">91d46819-8472-40ad-a661-2c78acb4018c:10415839</guid>
      <pubDate>Fri, 03 May 2013 09:32:35 GMT</pubDate>
    </item>
    <item>
      <title>Windows Azure Mobile Services - Busy Indicator für Windows Store Apps</title>
      <description>&lt;p style="display:inline-block;"&gt;&lt;img style="float:left;padding-bottom:10px;padding-right:10px;" src="http://sascha-dittmann.de/image.axd?picture=%2f2013%2f05%2fmobile_services_busyindicator_teaser.png" alt="Windows Azure Mobile Services - Busy Indicator" /&gt;&lt;strong&gt;Nichts ist schlimmer f&amp;uuml;r den Benutzer einer Anwendung bzw. App, als vor dem Ger&amp;auml;t zu sitzen und nichts scheint zu passieren. &lt;br /&gt;Deshalb wird heute die &amp;quot;Let&amp;#39;s Talk&amp;quot; Windows Store App mit einem Busy Indicator erweitert.&lt;br /&gt;Wer neu zu meiner WIndows Azure Mobile Services Serie hinzugekommen ist, sollte sich vorher jedoch ansehen wie &lt;a href="http://www.sascha-dittmann.de/post/Windows-Azure-Mobile-Services-Die-Starthilfe-fuer-App-Entwickler.aspx" target="_blank"&gt;der Mobile Service angelegt&lt;/a&gt;, &lt;a href="http://www.sascha-dittmann.de/post/Windows-Azure-Mobile-Services-CRUD-fuer-Windows-Store-Apps.aspx" target="_blank"&gt;die Windows Store App erstellt&lt;/a&gt; und &lt;a href="http://www.sascha-dittmann.de/post/Windows-Azure-Mobile-Services-Eingabevalidierung-mittels-Tabellenskript.aspx" target="_blank"&gt;eine serverseitige Eingabevalidierung&lt;/a&gt; implementiert worden ist...&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Ein HttpMessageHandler f&amp;uuml;r den Busy Indicator&lt;/h2&gt;
&lt;p&gt;Um sich in die Client-Server Kommunikation des &lt;em&gt;MobileServiceClient&lt;/em&gt;-Objektes einklinken zu k&amp;ouml;nnen, muss zuerst eine Klasse erstellt werden, die von der abstrakten Klasse &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.http.httpmessagehandler.aspx" rel="nofollow" target="_blank"&gt;&lt;em&gt;HttpMessageHandler&lt;/em&gt;&lt;/a&gt; ableitet.&lt;/p&gt;
&lt;p&gt;Genauer gesagt muss diese neue Klasse von der &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.http.delegatinghandler.aspx" rel="nofollow" target="_blank"&gt;&lt;em&gt;DelegatingHandler&lt;/em&gt;-Klasse&lt;/a&gt; ableiten, da sie in ihrer &lt;em&gt;SendAsync&lt;/em&gt;-Methode wiederum &lt;em&gt;SendAsync&lt;/em&gt; aufrufen muss.&lt;/p&gt;
&lt;p&gt;Somit erreicht man den gew&amp;uuml;nschten Effekt, dass die Nachrichten nur durchgereicht und nicht endg&amp;uuml;ltig verarbeitet werden.&lt;/p&gt;
&lt;p&gt;Eine einfache Variante des Busy-Handlers k&amp;ouml;nnte dann wie folgt aussehen:&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public class BusyHandler : DelegatingHandler
{
  private int _callCount;
  private readonly Action&amp;lt;bool&amp;gt; _busyIndicator;

  public BusyHandler(Action&amp;lt;bool&amp;gt; busyIndicator)
  {
    _busyIndicator = busyIndicator;
  }

  protected override async Task&amp;lt;HttpResponseMessage&amp;gt; SendAsync(
    HttpRequestMessage request, CancellationToken cancellationToken)
  {
    // update the count by one in a single atomic operation. 
    // If we get a 1 back, we know we just went &amp;#39;busy&amp;#39;
    var outgoingCount = Interlocked.Increment(ref _callCount);
    if (outgoingCount == 1)
    {
      _busyIndicator(true);
    }

    var response = await base.SendAsync(request, cancellationToken);

    // decrement the count by one in a single atomic operation.
    // If we get a 0 back, we know we just went &amp;#39;idle&amp;#39;
    var incomingCount = Interlocked.Decrement(ref _callCount);
    if (incomingCount == 0)
    {
      _busyIndicator(false);
    }

    return response;
  }
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&amp;Auml;nderungen am ViewModel&lt;/h2&gt;
&lt;p&gt;Damit in der View der &lt;em&gt;Busy Indicator&lt;/em&gt; ein- bzw. ausgeblendet werden kann, muss als n&amp;auml;chstes das ViewModel entsprechend erweitert werden.&lt;/p&gt;
&lt;p&gt;Dazu habe ich eine &lt;em&gt;IsBusy&lt;/em&gt;-Eigenschaft im Interface hinzugef&amp;uuml;gt ...&lt;/p&gt;
&lt;pre class="brush: c-sharp; highlight: [7]"&gt;public interface IMainPageViewModel
{
  ObservableCollection Messages { get; }
  String MessageText { get; set; }
  Message SelectedMessage { get; set; }

  Boolean IsBusy { get; }

  DelegateCommand SendMessageCommand { get; }
  DelegateCommand DeleteMessageCommand { get; }
  DelegateCommand RefreshCommand { get; }
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;... und diese entsprechend implementiert.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;private Boolean _isBusy;
public Boolean IsBusy
{
  get { return _isBusy; }
  set { SetProperty(ref _isBusy, value); }
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Danach kann der &lt;em&gt;BusyHandler&lt;/em&gt; zur Kommunikationspipeline des &lt;em&gt;MobileServiceClient&lt;/em&gt;-Objektes hinzugef&amp;uuml;gt werden.&lt;/p&gt;
&lt;p&gt;Dazu stellt die &lt;em&gt;MobileServiceClient&lt;/em&gt;-Klasse den entsprechenden Konstruktor zur Verf&amp;uuml;gung:&lt;/p&gt;
&lt;pre class="brush: c-sharp; highlight: [4]"&gt;_mobileServiceClient = new MobileServiceClient(
  App.MobileServiceUrl,
  App.MobileServiceKey,
  new BusyHandler(busy =&amp;gt; IsBusy = busy));&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&amp;Auml;nderungen an der View&lt;/h2&gt;
&lt;p&gt;Zu guter Letzt muss in der View nur noch der entsprechende XAML Code hinzugef&amp;uuml;gt und an die &lt;em&gt;IsBusy&lt;/em&gt;-Eigenschaft des ViewModels gebunden werden:&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;Border Grid.ColumnSpan=&amp;quot;2&amp;quot; Grid.RowSpan=&amp;quot;3&amp;quot; 
        Visibility=&amp;quot;{Binding IsBusy, 
        Converter={StaticResource BooleanToVisibilityConverter}}&amp;quot;&amp;gt;
  &amp;lt;ProgressRing IsActive=&amp;quot;true&amp;quot; Style=&amp;quot;{StaticResource ProgressRingStyle}&amp;quot; /&amp;gt;
&amp;lt;/Border&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;F&amp;uuml;r lesbareren Code, und zur Wiederverwendbarkeit in weiteren Views, bietet sich au&amp;szlig;erdem an die &lt;em&gt;Style&lt;/em&gt;-Einstellungen des &lt;em&gt;ProgressRing&lt;/em&gt;-Controls auszulagern:&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;Style x:Name=&amp;quot;ProgressRingStyle&amp;quot;  TargetType=&amp;quot;ProgressRing&amp;quot;&amp;gt;
  &amp;lt;Setter Property=&amp;quot;HorizontalAlignment&amp;quot; Value=&amp;quot;Center&amp;quot; /&amp;gt;
  &amp;lt;Setter Property=&amp;quot;VerticalAlignment&amp;quot; Value=&amp;quot;Center&amp;quot; /&amp;gt;
  &amp;lt;Setter Property=&amp;quot;Foreground&amp;quot; Value=&amp;quot;{StaticResource AccentColor}&amp;quot; /&amp;gt;
  &amp;lt;Setter Property=&amp;quot;Width&amp;quot; Value=&amp;quot;100&amp;quot; /&amp;gt;
  &amp;lt;Setter Property=&amp;quot;Height&amp;quot; Value=&amp;quot;100&amp;quot; /&amp;gt;
&amp;lt;/Style&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Wie geht es weiter?&lt;/h2&gt;
&lt;p&gt;Im n&amp;auml;chsten Teil dieser Serie wird die Windows Store App mit einer Microsoft-Account-Authentifizierung erweitert.&lt;br /&gt;Au&amp;szlig;erdem werden die Benutzer nur noch ihre eigenen Nachrichten l&amp;ouml;schen k&amp;ouml;nnen.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td&gt;&lt;img src="http://sascha-dittmann.de/image.axd?picture=Shared%2finfo.png" alt="Weitere Informationen" /&gt;&lt;/td&gt;
&lt;td&gt;Beispielanwendung: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/SaschaDittmann/LetsTalk/tree/master/03_LetsTalk_WinRT_BusyIndicator" rel="nofollow" target="_blank"&gt;Let&amp;#39;s Talk - Busy Indicator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;Weitere Informationen: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.sascha-dittmann.de/post/Windows-Azure-Mobile-Services-Die-Starthilfe-fuer-App-Entwickler.aspx" target="_blank"&gt;Teil 1: Windows Azure Mobile Services - Die Starthilfe f&amp;uuml;r App Entwickler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sascha-dittmann.de/post/Windows-Azure-Mobile-Services-CRUD-fuer-Windows-Store-Apps.aspx" target="_blank"&gt;Teil 2: Windows Azure Mobile Services - CRUD f&amp;uuml;r Windows Store Apps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sascha-dittmann.de/post/Windows-Azure-Mobile-Services-Eingabevalidierung-mittels-Tabellenskript.aspx" target="_blank"&gt;Teil 3: Windows Azure Mobile Services - Eingabevalidierung mittels Tabellenskript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.asp.net/web-api/overview/working-with-http/http-message-handlers" rel="nofollow" target="_blank"&gt;HTTP Message Handlers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.net.http.httpmessagehandler.aspx" rel="nofollow" target="_blank"&gt;MSDN: HttpMessageHandler-Klasse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.net.http.delegatinghandler.aspx" rel="nofollow" target="_blank"&gt;MSDN: DelegatingHandler-Klasse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.windowsazure.com/en-us/home/features/mobile-services/" rel="nofollow" target="_blank"&gt;Windows Azure Mobile Services&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Verwendete Bildquellen:&lt;/strong&gt; &lt;br /&gt;&amp;copy; Corinna Dumat / PIXELIO&lt;/p&gt;</description>
      <link>http://sascha-dittmann.de/post/Windows-Azure-Mobile-Services-Busy-Indicator.aspx</link>
      <author>Sascha Dittmann</author>
      <dc:creator>Sascha Dittmann</dc:creator>
      <comments>http://sascha-dittmann.de/post/Windows-Azure-Mobile-Services-Busy-Indicator.aspx#comment</comments>
      <guid isPermaLink="False">http://sascha-dittmann.de/post.aspx?id=b9b6eb98-d94a-4ee8-a2e2-6db541fc1515</guid>
      <pubDate>Fri, 03 May 2013 07:18:00 GMT</pubDate>
    </item>
  </channel>
</rss>