<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Michiel van Otegem, IT Composer - English</title>
    <link>http://michiel.vanotegem.nl/</link>
    <description />
    <language>en-us</language>
    <copyright>Michiel van Otegem</copyright>
    <lastBuildDate>Fri, 30 Jul 2010 23:29:30 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.1.8102.813</generator>
    <managingEditor>michiel@aspnl.com</managingEditor>
    <webMaster>michiel@aspnl.com</webMaster>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=52a8be0a-08c5-47e7-9f0a-6e542fc1a4f5</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,52a8be0a-08c5-47e7-9f0a-6e542fc1a4f5.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,52a8be0a-08c5-47e7-9f0a-6e542fc1a4f5.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=52a8be0a-08c5-47e7-9f0a-6e542fc1a4f5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In the arely stages I've commented on Microsoft not going the right way, because a
major selling point could be that you can run Azure in the cloud or in your own data
center. That seemed not to be possible. When Azure almost went live, MS had changed
sufficiently to maybe make this possible in the future. With <a href="http://www.microsoft.com/windowsazure/appliance/">Azure
Appliance</a>, this is now definitly a reality.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=52a8be0a-08c5-47e7-9f0a-6e542fc1a4f5" />
      </body>
      <title>Azure Appliance</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,52a8be0a-08c5-47e7-9f0a-6e542fc1a4f5.aspx</guid>
      <link>http://michiel.vanotegem.nl/2010/07/30/AzureAppliance.aspx</link>
      <pubDate>Fri, 30 Jul 2010 23:29:30 GMT</pubDate>
      <description>&lt;p&gt;
In the arely stages I've commented on Microsoft not going the right way, because a
major selling point could be that you can run Azure in the cloud or in your own data
center. That seemed not to be possible. When Azure almost went live, MS had changed
sufficiently to maybe make this possible in the future. With &lt;a href="http://www.microsoft.com/windowsazure/appliance/"&gt;Azure
Appliance&lt;/a&gt;, this is now definitly a reality.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=52a8be0a-08c5-47e7-9f0a-6e542fc1a4f5" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,52a8be0a-08c5-47e7-9f0a-6e542fc1a4f5.aspx</comments>
      <category>English</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=c88e5ffd-0600-4bff-8c83-44b41265b345</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,c88e5ffd-0600-4bff-8c83-44b41265b345.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,c88e5ffd-0600-4bff-8c83-44b41265b345.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=c88e5ffd-0600-4bff-8c83-44b41265b345</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A recurring theme in web programming is calling a function periodically and/or at
a specific date and time. This has two aspects:
</p>
        <ul>
          <li>
Calling a function on a scheduled basis 
</li>
          <li>
Making sure time-outs don't interfere</li>
        </ul>
        <p>
          <strong>Calling a function on a scheduled basis</strong>
          <br />
To be able to call a function on your web app, you first need an endpoint (a URL)
that you can call to kick the function off. In ASP.NET you can do this in several
ways:
</p>
        <ol>
          <li>
Create a page that calls the function. 
</li>
          <li>
Create a handler (ASHX) that calls the function (more efficient than a page). 
</li>
          <li>
Create a WCF service that allows calls with HTTP GET, as discussed in <a href="http://sasibhushan.com/Blog/post/WCF-Using-HTTP-GET.aspx">this
blog post by Sasi Suryadevara</a>.</li>
        </ol>
        <p>
With your endpoint in place, you can use the Windows Task Scheduler to invoke
the function at any given time and at intervals as low as one minute. With the Windows
Task Scheduler you have several options again:
</p>
        <p>
Create a VB Script that calls the URL, as discussed in <a href="http://weblogs.asp.net/steveschofield/archive/2006/09/28/Schedule-a-task-to-call-a-webpage-using-Task-scheduler_2E00_.aspx">this
blog post by Steve Schofield</a>.
</p>
        <p>
Create a PowerShell script that calls the URL (same as option 1, but more modern).
</p>
        <p>
Have the Windows Task Scheduler open Internet Explorer and open the specified URL
(e.g. <font face="Courier New">C:\PROGRA~1\INTERN~1\iexplore.exe  -extoff http://www.google.com</font>,
which starts IE without extensions). If you do this, you also need to specify that
the Task Scheduler closes IE after 1 minute, which you can do in the Settings tab
of the task (Windows 2003), or in the Trigger configuration (Windows 2008), as
shown below.
</p>
        <p>
          <img border="0" src="http://michiel.vanotegem.nl/content/binary/task1minute.png" />
          <br />
          <em>Task Settings in Windows 2003</em>
        </p>
        <p>
          <img border="0" src="http://michiel.vanotegem.nl/content/binary/trigger.png" />
          <br />
          <em>Trigger configuration in Windows 2008</em>
        </p>
        <p>
Note: In Windows 2008 the dropdowns governing duration and interval show 30 minutes
as lowest value. You can in fact change this to 1 minute by editing the text.
</p>
        <p>
          <strong>Making sure time-outs don't interfere</strong>
          <br />
A web based call is bound to time-out after a few minutes. If you task takes longer
than that, this may abort the call depending on how you programmed it, and what webserver
settings are used with regards to disconnected clients. To ensure a time-out does
not interfere, you can spawn a new thread and have it call the function. That way
the thread handling the request can return a response to the client, and the function
is carried out regardless. One issue that may arise there is that the function itself
hangs or takes too long. You may want to add logic to ensure that it's aborted after
a certain time, and add logging to notify you of this, and possibly also ensure that
the function can only be run by one caller at a time.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=c88e5ffd-0600-4bff-8c83-44b41265b345" />
      </body>
      <title>Periodically calling a function in your web app</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,c88e5ffd-0600-4bff-8c83-44b41265b345.aspx</guid>
      <link>http://michiel.vanotegem.nl/2010/07/05/PeriodicallyCallingAFunctionInYourWebApp.aspx</link>
      <pubDate>Mon, 05 Jul 2010 10:25:18 GMT</pubDate>
      <description>&lt;p&gt;
A recurring theme in web programming is calling a function periodically and/or at
a specific date and time. This has two aspects:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Calling a function on a scheduled basis 
&lt;li&gt;
Making sure time-outs don't interfere&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Calling a function on a scheduled basis&lt;/strong&gt;
&lt;br&gt;
To be able to call a function on your web app, you first need an endpoint (a URL)
that you can call to kick the function off. In ASP.NET you can do this in several
ways:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Create a page that calls the function. 
&lt;li&gt;
Create a handler (ASHX) that calls the function (more efficient than a page). 
&lt;li&gt;
Create a WCF service that allows calls with HTTP GET, as discussed in &lt;a href="http://sasibhushan.com/Blog/post/WCF-Using-HTTP-GET.aspx"&gt;this
blog post by Sasi Suryadevara&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
With your endpoint in&amp;nbsp;place, you can use the Windows Task Scheduler to invoke
the function at any given time and at intervals as low as one minute. With the Windows
Task Scheduler you have several options again:
&lt;/p&gt;
&lt;p&gt;
Create a VB Script that calls the URL, as discussed in &lt;a href="http://weblogs.asp.net/steveschofield/archive/2006/09/28/Schedule-a-task-to-call-a-webpage-using-Task-scheduler_2E00_.aspx"&gt;this
blog post by Steve Schofield&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Create a PowerShell script that calls the URL (same as option 1, but more modern).
&lt;/p&gt;
&lt;p&gt;
Have the Windows Task Scheduler open Internet Explorer and open the specified URL
(e.g. &lt;font face="Courier New"&gt;C:\PROGRA~1\INTERN~1\iexplore.exe&amp;nbsp; -extoff http://www.google.com&lt;/font&gt;,
which starts IE without extensions). If you do this, you also need to specify that
the Task Scheduler closes IE after 1 minute, which you can do in the Settings tab
of the task (Windows 2003), or in the Trigger configuration&amp;nbsp;(Windows 2008), as
shown below.
&lt;/p&gt;
&lt;p&gt;
&lt;img border=0 src="http://michiel.vanotegem.nl/content/binary/task1minute.png"&gt;
&lt;br&gt;
&lt;em&gt;Task Settings in Windows 2003&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img border=0 src="http://michiel.vanotegem.nl/content/binary/trigger.png"&gt;
&lt;br&gt;
&lt;em&gt;Trigger configuration in Windows 2008&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Note: In Windows 2008 the dropdowns governing duration and interval show 30 minutes
as lowest value. You can in fact change this to 1 minute by editing the text.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Making sure time-outs don't interfere&lt;/strong&gt;
&lt;br&gt;
A web based call is bound to time-out after a few minutes. If you task takes longer
than that, this may abort the call depending on how you programmed it, and what webserver
settings are used with regards to disconnected clients. To ensure a time-out does
not interfere, you can spawn a new thread and have it call the function. That way
the thread handling the request can return a response to the client, and the function
is carried out regardless. One issue that may arise there is that the function itself
hangs or takes too long. You may want to add logic to ensure that it's aborted after
a certain time, and add logging to notify you of this, and possibly also ensure that
the function can only be&amp;nbsp;run&amp;nbsp;by one caller&amp;nbsp;at a time.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=c88e5ffd-0600-4bff-8c83-44b41265b345" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,c88e5ffd-0600-4bff-8c83-44b41265b345.aspx</comments>
      <category>.NET</category>
      <category>ASP.NET</category>
      <category>Development</category>
      <category>English</category>
      <category>Services</category>
      <category>Windows</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=55b4fa49-ff92-4e60-b3eb-f32e6374ad9e</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,55b4fa49-ff92-4e60-b3eb-f32e6374ad9e.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,55b4fa49-ff92-4e60-b3eb-f32e6374ad9e.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=55b4fa49-ff92-4e60-b3eb-f32e6374ad9e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I keep forgetting that I need to use GPEDIT.MSC to configure the Windows Shutdown
Event Tracker (which you <u>really</u> don't need in a virtual machine).
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=55b4fa49-ff92-4e60-b3eb-f32e6374ad9e" />
      </body>
      <title>Note to self: Windows Shutdown Event Tracker</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,55b4fa49-ff92-4e60-b3eb-f32e6374ad9e.aspx</guid>
      <link>http://michiel.vanotegem.nl/2010/06/07/NoteToSelfWindowsShutdownEventTracker.aspx</link>
      <pubDate>Mon, 07 Jun 2010 16:20:01 GMT</pubDate>
      <description>&lt;p&gt;
I keep forgetting that I need to use GPEDIT.MSC to configure the Windows Shutdown
Event Tracker (which you &lt;u&gt;really&lt;/u&gt; don't need in a virtual machine).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=55b4fa49-ff92-4e60-b3eb-f32e6374ad9e" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,55b4fa49-ff92-4e60-b3eb-f32e6374ad9e.aspx</comments>
      <category>English</category>
      <category>Windows</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=9a66392a-057f-4378-93d5-de1580e41bcd</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,9a66392a-057f-4378-93d5-de1580e41bcd.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,9a66392a-057f-4378-93d5-de1580e41bcd.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=9a66392a-057f-4378-93d5-de1580e41bcd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Sometimes we come across integration scenario's that look straighforward, but where
the devil is in the details. We needed to integrate our asp.net/silverlight application
in an existing ASP "classic" site (yes, the still exist). The catch was that we needed
to call the ASP "classic" site in a server to server call to get some information,
but we needed to do this under the context of the current user. You may be wondering
why we didn't go through a shared database or someting, but the problem is that there
is little knowledge left of the old app, so changing the existing app was a no go.
</p>
        <p>
So, in order to impersonate the user, you need your server-sided request look like
that user. This means forwarding the cookies the user sends, and sending back the
cookies the server sends to the user. Below is code that demonstrates that.
</p>
        <pre>
          <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: black; FONT-SIZE: 11px">HttpWebRequest
webRequestToServer <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span> (HttpWebRequest)HttpWebRequest.Create(<span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px">"http://somedomain/somepage.asp"</span>);
webRequestToServer.CookieContainer <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">new</span> CookieContainer(); <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">foreach</span> (String
cookieKey <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">in</span> Request.Cookies)
{ HttpCookie cookie <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span> Request.Cookies[cookieKey];
Cookie serverCookie <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">new</span> Cookie(cookie.Name,
cookie.Value, <span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px">"/"</span>, <span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px">"somedomain"</span>);
webRequestToServer.CookieContainer.Add(serverCookie); } HttpWebResponse webResponseFromServer <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span> (HttpWebResponse)webRequestToServer.GetResponse(); <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">foreach</span> (Cookie
serverCookie <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">in</span> webResponseFromServer.Cookies)
{ HttpCookie clientCookie <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span> Response.Cookies[serverCookie.Name]; <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">if</span> (clientCookie
== <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">null</span>)
{ clientCookie <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">new</span> HttpCookie(serverCookie.Name);
} clientCookie.Value <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span> serverCookie.Value;
clientCookie.Expires <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span> serverCookie.Expires;
Response.Cookies.Add(clientCookie); } webResponseFromServer.Close();</span>
        </pre>
        <p>
This code works fine in a test environment, but there is a catch... in some cases
the domain of the server is not set in the cookie you get on the server side. The
problem with that is that when you set the domain, it doesn't correspond to what the
server expects. You can see this if you write out the cookies you send/receive (both
on the browser connection and te server-server connection) to a log or something (including
the domain. It took a while to figure out, but replacing "somedomain" with <font face="Courier New">Request.ServerVariables["LOCAL_ADDR"]</font> did
the trick. 
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=9a66392a-057f-4378-93d5-de1580e41bcd" />
      </body>
      <title>Forwarding cookies</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,9a66392a-057f-4378-93d5-de1580e41bcd.aspx</guid>
      <link>http://michiel.vanotegem.nl/2010/06/04/ForwardingCookies.aspx</link>
      <pubDate>Fri, 04 Jun 2010 20:23:31 GMT</pubDate>
      <description>&lt;p&gt;
Sometimes we come across integration scenario's that look straighforward, but where
the devil is in the details. We needed to integrate our asp.net/silverlight application
in an existing ASP "classic" site (yes, the still exist). The catch was that we needed
to call the ASP "classic" site in a server to server call to get some information,
but we needed to do this under the context of the current user. You may be wondering
why we didn't go through a shared database or someting, but the problem is that there
is little knowledge left of the old app, so changing the existing app was a no go.
&lt;/p&gt;
&lt;p&gt;
So, in order to impersonate the user, you need your server-sided request look like
that user. This means forwarding the cookies the user sends, and sending back the
cookies the server sends to the user. Below is code that demonstrates that.
&lt;/p&gt;
&lt;pre&gt;&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: black; FONT-SIZE: 11px"&gt;HttpWebRequest
webRequestToServer &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; (HttpWebRequest)HttpWebRequest.Create(&lt;span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px"&gt;"http://somedomain/somepage.asp"&lt;/span&gt;);
webRequestToServer.CookieContainer &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;new&lt;/span&gt; CookieContainer(); &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;foreach&lt;/span&gt; (String
cookieKey &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;in&lt;/span&gt; Request.Cookies)
{ HttpCookie cookie &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; Request.Cookies[cookieKey];
Cookie serverCookie &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;new&lt;/span&gt; Cookie(cookie.Name,
cookie.Value, &lt;span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px"&gt;"/"&lt;/span&gt;, &lt;span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px"&gt;"somedomain"&lt;/span&gt;);
webRequestToServer.CookieContainer.Add(serverCookie); } HttpWebResponse webResponseFromServer &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; (HttpWebResponse)webRequestToServer.GetResponse(); &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;foreach&lt;/span&gt; (Cookie
serverCookie &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;in&lt;/span&gt; webResponseFromServer.Cookies)
{ HttpCookie clientCookie &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; Response.Cookies[serverCookie.Name]; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;if&lt;/span&gt; (clientCookie
== &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;null&lt;/span&gt;)
{ clientCookie &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;new&lt;/span&gt; HttpCookie(serverCookie.Name);
} clientCookie.Value &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; serverCookie.Value;
clientCookie.Expires &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; serverCookie.Expires;
Response.Cookies.Add(clientCookie); } webResponseFromServer.Close();&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
This code works fine in a test environment, but there is a catch... in some cases
the domain of the server is not set in the cookie you get on the server side. The
problem with that is that when you set the domain, it doesn't correspond to what the
server expects. You can see this if you write out the cookies you send/receive (both
on the browser connection and te server-server connection) to a log or something (including
the domain. It took a while to figure out, but replacing "somedomain" with &lt;font face="Courier New"&gt;Request.ServerVariables["LOCAL_ADDR"]&lt;/font&gt; did
the trick. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=9a66392a-057f-4378-93d5-de1580e41bcd" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,9a66392a-057f-4378-93d5-de1580e41bcd.aspx</comments>
      <category>ASP.NET</category>
      <category>Development</category>
      <category>English</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=1e6a3b74-5ae4-4e5a-a93e-9c9d751a1a9c</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,1e6a3b74-5ae4-4e5a-a93e-9c9d751a1a9c.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,1e6a3b74-5ae4-4e5a-a93e-9c9d751a1a9c.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=1e6a3b74-5ae4-4e5a-a93e-9c9d751a1a9c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
An important reason I have a Windows phone is because I have control over which applications
I buy and from whom. I decide what I can or cannot install on my phone. With
Windows Phone 7 Series Microsoft is blocking this "sideloading", so users can only
download and install new software through Marketplace. Basically Microsoft is following
the Apple iPhone model with this, and the reason is for this is clear: follow the
money. Microsoft has realized that Apple is making millions of dollars from the percentage
they get on apps sold through the app store. This is logical, because ultimately it
is not your device that makes the difference, but what you can do with it. Functionality
and content sell, it's as simple as that.
</p>
        <p>
As I said an important reason for me to have a Windows phone, and not an iPhone, was
the control I have over my device. I think I am not alone in this, and I've heard
a lot of people using Apple products (iPhone in particular) complain about
this too. It's the one thing the makes Apple impopular compared to Microsoft, so I
guess Microsoft just wants to be the impopular company. Windows Phone 7 Series
will also be impopular to vendors. On that front Microsoft is thightning the screws
as well. Microsoft now determines the hardware specs and as vendor you have little
options to alter the appearance of the OS. This means there are less options to differentiate
yourself from competitors.
</p>
        <p>
I think the new Microsoft policy will ultimately drive people away, rather than gain
momentum. It will drive people to Android based phones where phone vendors and users
are still in control. If you look at the momentum Android already has, more people
will also choose Android over iPhone for the same reasons.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=1e6a3b74-5ae4-4e5a-a93e-9c9d751a1a9c" />
      </body>
      <title>Microsoft and Apple promote Android phones</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,1e6a3b74-5ae4-4e5a-a93e-9c9d751a1a9c.aspx</guid>
      <link>http://michiel.vanotegem.nl/2010/06/03/MicrosoftAndApplePromoteAndroidPhones.aspx</link>
      <pubDate>Thu, 03 Jun 2010 08:29:27 GMT</pubDate>
      <description>&lt;p&gt;
An important reason I have a Windows phone is because I have control over which applications
I buy and from whom. I decide what I can or cannot install on my phone.&amp;nbsp;With
Windows Phone 7 Series Microsoft is blocking this "sideloading", so users can only
download and install new software through Marketplace. Basically Microsoft is following
the Apple iPhone model with this, and the reason is for this is clear: follow the
money. Microsoft has realized that Apple is making millions of dollars from the percentage
they get on apps sold through the app store. This is logical, because ultimately it
is not your device that makes the difference, but what you can do with it. Functionality
and content sell, it's as simple as that.
&lt;/p&gt;
&lt;p&gt;
As I said an important reason for me to have a Windows phone, and not an iPhone, was
the control I have over my device. I think I am not alone in this, and I've heard
a lot of people using&amp;nbsp;Apple products (iPhone in&amp;nbsp;particular) complain&amp;nbsp;about
this too. It's the one thing the makes Apple impopular compared to Microsoft, so I
guess Microsoft just wants to be the impopular company.&amp;nbsp;Windows Phone 7 Series
will also be impopular to vendors. On that front Microsoft is thightning the screws
as well. Microsoft now determines the hardware specs and as vendor you have little
options to alter the appearance of the OS. This means there are less options to differentiate
yourself from competitors.
&lt;/p&gt;
&lt;p&gt;
I think the new Microsoft policy will ultimately drive people away, rather than gain
momentum. It will drive people to Android based phones where phone vendors and users
are still in control. If you look at the momentum Android already has, more people
will also choose Android over iPhone for the same reasons.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=1e6a3b74-5ae4-4e5a-a93e-9c9d751a1a9c" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,1e6a3b74-5ae4-4e5a-a93e-9c9d751a1a9c.aspx</comments>
      <category>English</category>
      <category>Windows Mobile</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=2fd5a82a-8ba2-4896-b447-e86d66c990d2</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,2fd5a82a-8ba2-4896-b447-e86d66c990d2.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,2fd5a82a-8ba2-4896-b447-e86d66c990d2.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=2fd5a82a-8ba2-4896-b447-e86d66c990d2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
When you're using signing or encryption on your SOAP requests, WCF exepects the response
to be signed/encrypted too. When the response is not signed/encrypted the message
encoder throws a MessageSecurityException. This is perfectly fine behavior, but in
interop scenario's can really bug you, because some WS-* implementations don't sign/encrypt
Fault messages. Now, because the message encoder throws the exception, you can't get
to the underlying SOAP fault. This means that you have no clue why you received a
fault in the first place.
</p>
        <p>
To fix this, Microsoft has provided a <a href="http://support.microsoft.com/kb/971493">hotfix</a>.
With this hotfix in place you can specify <strong>enableUnsecuredResponse="true"</strong> in
the binding configuration to allow unsecured responses. Unfortunately this means that
also valid responses don't have to be signed/encrypted, defeating the purpose of signing
and encryption altogether!
</p>
        <p>
As an alternative, you can implement your own message encoder that wraps the encoder
that is actually used. In the wrapper you can either store the received XML for
use higher up in the call stack, or retrieve the fault and throw a FaultException&lt;&gt;.
Without jumping through hoops the latter option does require your wrapper to
know about the fault types it needs to handle. With the former option you can handle
the exception higher up in the call stack by catching the MessageSecurityException
and throwing a new exception with the XML of the message as a property.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=2fd5a82a-8ba2-4896-b447-e86d66c990d2" />
      </body>
      <title>Receiving unsecured response with WCF</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,2fd5a82a-8ba2-4896-b447-e86d66c990d2.aspx</guid>
      <link>http://michiel.vanotegem.nl/2010/05/28/ReceivingUnsecuredResponseWithWCF.aspx</link>
      <pubDate>Fri, 28 May 2010 14:09:27 GMT</pubDate>
      <description>&lt;p&gt;
When you're using signing or encryption on your SOAP requests, WCF exepects the response
to be signed/encrypted too. When the response is not signed/encrypted the message
encoder throws a MessageSecurityException. This is perfectly fine behavior, but in
interop scenario's can really bug you, because some WS-* implementations don't sign/encrypt
Fault messages. Now, because the message encoder throws the exception, you can't get
to the underlying SOAP fault. This means that you have no clue why you received a
fault in the first place.
&lt;/p&gt;
&lt;p&gt;
To fix this, Microsoft has provided&amp;nbsp;a &lt;a href="http://support.microsoft.com/kb/971493"&gt;hotfix&lt;/a&gt;.
With this hotfix in place you can specify &lt;strong&gt;enableUnsecuredResponse="true"&lt;/strong&gt; in
the binding configuration to allow unsecured responses. Unfortunately this means that
also valid responses don't have to be signed/encrypted, defeating the purpose of signing
and encryption altogether!
&lt;/p&gt;
&lt;p&gt;
As an alternative, you can implement your own message encoder that wraps the encoder
that is actually used.&amp;nbsp;In the wrapper you can either store the received XML for
use higher up in the call stack, or retrieve the fault and throw a FaultException&amp;lt;&amp;gt;.
Without jumping through hoops the latter option&amp;nbsp;does require your wrapper to
know about the fault types it needs to handle. With the former option you can handle
the exception higher up in the call stack by catching the MessageSecurityException
and throwing a new exception with the XML of the message as a property.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=2fd5a82a-8ba2-4896-b447-e86d66c990d2" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,2fd5a82a-8ba2-4896-b447-e86d66c990d2.aspx</comments>
      <category>Development</category>
      <category>English</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=cbe11e95-41b7-43f1-9939-f0fe3a814499</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,cbe11e95-41b7-43f1-9939-f0fe3a814499.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,cbe11e95-41b7-43f1-9939-f0fe3a814499.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=cbe11e95-41b7-43f1-9939-f0fe3a814499</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Two months ago I spoke at WDI 2010 in Warsaw, Poland on ASP.NET Web Forms vs. ASP.NET
MVC. I should have posted the slides for that session soon after, but just didn't
get around to it because of all the work thrown at me. Here they are... finally. <a href="http://michiel.vanotegem.nl/content/binary/WebForms%20vs%20MVC.pdf">Slides
(668.34 KB)</a></p>
        <p>
Thanks to the great folks organizing the conference. They took great care of me and
managed to get a good crowd together. Even though it was a pretty large audience,
the level of interaction was very good.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=cbe11e95-41b7-43f1-9939-f0fe3a814499" />
      </body>
      <title>WDI 2010 slides: ASP.NET WebForms vs. ASP.NET MVC</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,cbe11e95-41b7-43f1-9939-f0fe3a814499.aspx</guid>
      <link>http://michiel.vanotegem.nl/2010/05/28/WDI2010SlidesASPNETWebFormsVsASPNETMVC.aspx</link>
      <pubDate>Fri, 28 May 2010 13:36:20 GMT</pubDate>
      <description>&lt;p&gt;
Two months ago I spoke at WDI 2010 in Warsaw, Poland on ASP.NET Web Forms vs. ASP.NET
MVC. I should have posted the slides for that session soon after, but just didn't
get around to it because of all the work thrown at me. Here they are... finally. &lt;a href="http://michiel.vanotegem.nl/content/binary/WebForms%20vs%20MVC.pdf"&gt;Slides
(668.34 KB)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Thanks to the great folks organizing the conference. They took great care of me and
managed to get a good crowd together. Even though it was a pretty large audience,
the level of interaction was very good.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=cbe11e95-41b7-43f1-9939-f0fe3a814499" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,cbe11e95-41b7-43f1-9939-f0fe3a814499.aspx</comments>
      <category>ASP.NET</category>
      <category>English</category>
      <category>Events</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=ea4122b2-1a86-4eb2-88bf-8dd16b237ff6</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,ea4122b2-1a86-4eb2-88bf-8dd16b237ff6.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,ea4122b2-1a86-4eb2-88bf-8dd16b237ff6.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=ea4122b2-1a86-4eb2-88bf-8dd16b237ff6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Microsoft has been kind enough to give me the Microsoft Most Valuable Professional
Award again. That's the 8th year I can call myself an MVP. Thanks Microsoft for the
recognition. As a token of my gratitude I've made some long overdue blog posts :).
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=ea4122b2-1a86-4eb2-88bf-8dd16b237ff6" />
      </body>
      <title>MVP again</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,ea4122b2-1a86-4eb2-88bf-8dd16b237ff6.aspx</guid>
      <link>http://michiel.vanotegem.nl/2010/04/02/MVPAgain.aspx</link>
      <pubDate>Fri, 02 Apr 2010 13:05:00 GMT</pubDate>
      <description>&lt;p&gt;
Microsoft has been kind enough to give me the Microsoft Most Valuable Professional
Award again. That's the 8th year I can call myself an MVP. Thanks Microsoft for the
recognition. As a token of my gratitude I've made some long overdue blog posts :).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=ea4122b2-1a86-4eb2-88bf-8dd16b237ff6" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,ea4122b2-1a86-4eb2-88bf-8dd16b237ff6.aspx</comments>
      <category>English</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=6615dee7-3844-44c7-bd5e-b359dea96cb2</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,6615dee7-3844-44c7-bd5e-b359dea96cb2.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,6615dee7-3844-44c7-bd5e-b359dea96cb2.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=6615dee7-3844-44c7-bd5e-b359dea96cb2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you've ever tried svcutil.exe to import WSDL which has doesn't have <font face="Courier New">&lt;sp:OnlySignEntireHeadersAndBody&gt;</font> specified
in the security policy, you'll know that this doens't fly. SvcUtil will tell you the
the security policy is not supported. So why is this? I assume this has something
to do with the a statement in paragraph 6.6 in the <a href="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512/ws-securitypolicy-1.2-spec-cd-01.html">WS-SecurityPolicy
specification</a>, which states:
</p>
        <p>
          <em>Setting the value of this property to 'true' mitigates against some possible re-writing
attacks.</em>
        </p>
        <p>
So apparently Microsoft decided that setting it to false is not a good idea, and decided
not to support setting it to false (omitting the element).
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=6615dee7-3844-44c7-bd5e-b359dea96cb2" />
      </body>
      <title>WSDL and WCF: WCF requires &amp;lt;sp:OnlySignEntireHeadersAndBody&amp;gt;</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,6615dee7-3844-44c7-bd5e-b359dea96cb2.aspx</guid>
      <link>http://michiel.vanotegem.nl/2010/04/02/WSDLAndWCFWCFRequiresLtspOnlySignEntireHeadersAndBodygt.aspx</link>
      <pubDate>Fri, 02 Apr 2010 13:01:07 GMT</pubDate>
      <description>&lt;p&gt;
If you've ever tried svcutil.exe to import WSDL which has doesn't have &lt;font face="Courier New"&gt;&amp;lt;sp:OnlySignEntireHeadersAndBody&amp;gt;&lt;/font&gt; specified
in the security policy, you'll know that this doens't fly. SvcUtil will tell you the
the security policy is not supported. So why is this? I assume this has something
to do with the a statement in paragraph 6.6 in the&amp;nbsp;&lt;a href="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512/ws-securitypolicy-1.2-spec-cd-01.html"&gt;WS-SecurityPolicy
specification&lt;/a&gt;, which states:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Setting the value of this property to 'true' mitigates against some possible re-writing
attacks.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
So apparently Microsoft decided that setting it to false is not a good idea, and decided
not to support setting it to false (omitting the element).
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=6615dee7-3844-44c7-bd5e-b359dea96cb2" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,6615dee7-3844-44c7-bd5e-b359dea96cb2.aspx</comments>
      <category>Development</category>
      <category>English</category>
      <category>Services</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=c8f101e0-0877-44df-b4c1-041a7d14d4eb</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,c8f101e0-0877-44df-b4c1-041a7d14d4eb.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,c8f101e0-0877-44df-b4c1-041a7d14d4eb.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=c8f101e0-0877-44df-b4c1-041a7d14d4eb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Talking to a non-WCF webservice is like a box of chocolates... you never know what
you're going to get. After solving the issue mentioned in my previous blog post,
I had another problem. For some reason the service didn't expect a &lt;wsa:ReplyTo&gt;
element if the value was anonymous. Later on the other party adjusted the service
so it actually worked as expected from WCF, but in the mean time I did write a message
inspector to solve the problem. Besides solving the problem it also is a nice little
example of a message inspector.
</p>
        <pre>
          <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: black; FONT-SIZE: 11px">
            <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">public</span>
            <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">class</span> RemoveAnonymousReplyToMessageInspector
: IClientMessageInspector { <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">private</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">const</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">string</span> ReplyToNode <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span><span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px">"ReplyTo"</span>; <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">private</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">const</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">string</span> WSAddressingNamespace <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span><span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px">"http://www.w3.org/2005/08/addressing"</span>; <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">public</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">void</span> AfterReceiveReply(<span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">ref</span> System.ServiceModel.Channels.Message
reply, <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">object</span> correlationState)
{} <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: green; FONT-SIZE: 11px">//
Not used for this scenario.</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">public</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">object</span> BeforeSendRequest(<span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">ref</span> System.ServiceModel.Channels.Message
request, System.ServiceModel.IClientChannel channel) { <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: green; FONT-SIZE: 11px">//
This method is called before the request is sent. You can read/manipulate the message
here. // If you're using signing or encryption, that is done after this, this is the
// unencrypted/unsigned mesage.</span> request <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span> RemoveAnonymousReplyTo(request); <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">return</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">null</span>;
} <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">private</span> Message
RemoveAnonymousReplyTo(Message message) { <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">if</span> (message.Headers.ReplyTo.IsAnonymous
== <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">true</span>)
{ <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">int</span> index <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span> message.Headers.FindHeader(ReplyToNode,
WSAddressingNamespace); message.Headers.RemoveAt(index); } <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">return</span> message;
} } </span>
        </pre>
        <p>
To use this, you'll need to create a class implementing the IEndpoint behavior and
add the MessageInspector in ApplyClientBehavior, as follows:
</p>
        <pre>
          <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: black; FONT-SIZE: 11px">
            <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">public</span>
            <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">void</span> ApplyClientBehavior(ServiceEndpoint
endpoint, ClientRuntime clientRuntime) { RemoveAnonymousReplyToMessageInspector inspector <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">new</span> RemoveAnonymousReplyToMessageInspector();
clientRuntime.MessageInspectors.Add(inspector); }</span>
        </pre>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=c8f101e0-0877-44df-b4c1-041a7d14d4eb" />
      </body>
      <title>Removing the ReplyTo element if it is anonymous</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,c8f101e0-0877-44df-b4c1-041a7d14d4eb.aspx</guid>
      <link>http://michiel.vanotegem.nl/2010/04/02/RemovingTheReplyToElementIfItIsAnonymous.aspx</link>
      <pubDate>Fri, 02 Apr 2010 12:52:50 GMT</pubDate>
      <description>&lt;p&gt;
Talking to a non-WCF webservice is like a box of chocolates... you never know what
you're going to get. After solving the&amp;nbsp;issue mentioned in my previous blog post,
I had another problem. For some reason the service didn't expect a &amp;lt;wsa:ReplyTo&amp;gt;
element if the value was anonymous. Later on the other party adjusted the service
so it actually worked as expected from WCF, but in the mean time I did write a message
inspector to solve the problem. Besides solving the problem it also is a nice little
example of a message inspector.
&lt;/p&gt;
&lt;pre&gt;&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: black; FONT-SIZE: 11px"&gt;&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;public&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;class&lt;/span&gt; RemoveAnonymousReplyToMessageInspector
: IClientMessageInspector { &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;private&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;const&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;string&lt;/span&gt; ReplyToNode &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px"&gt;"ReplyTo"&lt;/span&gt;; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;private&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;const&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;string&lt;/span&gt; WSAddressingNamespace &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px"&gt;"http://www.w3.org/2005/08/addressing"&lt;/span&gt;; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;public&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;void&lt;/span&gt; AfterReceiveReply(&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;ref&lt;/span&gt; System.ServiceModel.Channels.Message
reply, &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;object&lt;/span&gt; correlationState)
{} &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: green; FONT-SIZE: 11px"&gt;//
Not used for this scenario.&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;public&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;object&lt;/span&gt; BeforeSendRequest(&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;ref&lt;/span&gt; System.ServiceModel.Channels.Message
request, System.ServiceModel.IClientChannel channel) { &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: green; FONT-SIZE: 11px"&gt;//
This method is called before the request is sent. You can read/manipulate the message
here. // If you're using signing or encryption, that is done after this, this is the
// unencrypted/unsigned mesage.&lt;/span&gt; request &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; RemoveAnonymousReplyTo(request); &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;return&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;null&lt;/span&gt;;
} &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;private&lt;/span&gt; Message
RemoveAnonymousReplyTo(Message message) { &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;if&lt;/span&gt; (message.Headers.ReplyTo.IsAnonymous
== &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;true&lt;/span&gt;)
{ &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;int&lt;/span&gt; index &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; message.Headers.FindHeader(ReplyToNode,
WSAddressingNamespace); message.Headers.RemoveAt(index); } &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;return&lt;/span&gt; message;
} } &lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
To use this, you'll need to create a class implementing the IEndpoint behavior and
add the MessageInspector in ApplyClientBehavior, as follows:
&lt;/p&gt;
&lt;pre&gt;&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: black; FONT-SIZE: 11px"&gt;&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;public&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;void&lt;/span&gt; ApplyClientBehavior(ServiceEndpoint
endpoint, ClientRuntime clientRuntime) { RemoveAnonymousReplyToMessageInspector inspector &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;new&lt;/span&gt; RemoveAnonymousReplyToMessageInspector();
clientRuntime.MessageInspectors.Add(inspector); }&lt;/span&gt;&lt;/pre&gt;&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=c8f101e0-0877-44df-b4c1-041a7d14d4eb" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,c8f101e0-0877-44df-b4c1-041a7d14d4eb.aspx</comments>
      <category>Development</category>
      <category>English</category>
      <category>Services</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=ee864e59-b26a-4716-bc62-bd252a07bbe5</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,ee864e59-b26a-4716-bc62-bd252a07bbe5.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,ee864e59-b26a-4716-bc62-bd252a07bbe5.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=ee864e59-b26a-4716-bc62-bd252a07bbe5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recently I found myself trying to talk to a webservice using signing. It was
a WCF calling a Java webservice using a certificate to sign messages. I
kept getting the following exception message:
</p>
        <p>
          <em>The incoming message was signed with a token which was different from what used
to encrypt the body. This was not expected.</em>
        </p>
        <p>
After a wild goose chase we finally figured out that the certificate was corrupted.
Just installing the certificate again solved the issue.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=ee864e59-b26a-4716-bc62-bd252a07bbe5" />
      </body>
      <title>Troubles with WCF and certificate signing</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,ee864e59-b26a-4716-bc62-bd252a07bbe5.aspx</guid>
      <link>http://michiel.vanotegem.nl/2010/04/02/TroublesWithWCFAndCertificateSigning.aspx</link>
      <pubDate>Fri, 02 Apr 2010 12:40:56 GMT</pubDate>
      <description>&lt;p&gt;
Recently I found myself trying to talk to a webservice using signing.&amp;nbsp;It was
a&amp;nbsp;WCF&amp;nbsp;calling a Java webservice using a certificate to sign messages. I
kept getting the following exception message:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;The incoming message was signed with a token which was different from what used
to encrypt the body. This was not expected.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
After a wild goose chase we finally figured out that the certificate was corrupted.
Just installing the certificate again solved the issue.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=ee864e59-b26a-4716-bc62-bd252a07bbe5" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,ee864e59-b26a-4716-bc62-bd252a07bbe5.aspx</comments>
      <category>Development</category>
      <category>English</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=67cadfcd-eb82-40ff-9fd5-aca6eea083ac</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,67cadfcd-eb82-40ff-9fd5-aca6eea083ac.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,67cadfcd-eb82-40ff-9fd5-aca6eea083ac.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=67cadfcd-eb82-40ff-9fd5-aca6eea083ac</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've written quite a few functional designs over the years and I've found that for
users needing to validate it having visuals is key. In most cases prospective users
don't understand what they really get until they see screens. On the opposite side
of the spectrum telling developers what to do also is much easier with a screen, especially
when you are debating what would be the best and most efficient (coding wise) way
to give a user certain functionality. In these situations just getting a piece of
paper and draw is the best you can do. The last few years I've done this on and off
on my tablet. I can sketch on it, but the results are often so poor to see (and read!),
that I can't possible put it in a functional design. This is where a good mockup tool
comes in.
</p>
        <p>
A good mockup tool should make you feel like you are drawing, but provide you with
predefined controls to make your job fast and easy. Recently I came across <a href="http://www.balsamiq.com/products/mockups">Balsamiq
Mockups</a>, which is simply jaw dropping. Let's start with the result, which looks
pretty much like a hand drawn thing. At first glance that may not seem like a big
deal, but it is. It states clearly "<em>This is a mockup, the actual thing may look
different</em>". If you give a user something that looks like a screen shot, that
is what to expect to get. With this they know it will look differently when it is
done, and this also makes it much easier to debate your choices and come up with better
ideas (to quote David Platt, "Thy User Is Not You", so they will come up with stuff
you didn't even dream about).
</p>
        <p>
Ok, so the result is great, what about getting there? Well, that's a piece of cake,
really. Balsamiq is as intuitive a tool as I've seen and I was able to create a pretty
complex screen in about 10 minutes. There's a bunch of commonly used controls (and
some less common), and you can easily find what you need. Also, you can download tons
of additional controls from <a href="http://mockupstogo.net">http://mockupstogo.net</a>. Placing,
moving, resizing etc. is all very easy because of the snapping support. Want to see
for yourself? Look <a href="http://www.balsamiq.com/products/mockups/tour">here</a>.
</p>
        <p>
The last things that I find refreshing is the licensing model and fee. It only costs
$79 for a single license, and that comes with updates forever (and they update frequently,
so they say). Because the tool is already so good, this means you can use it for years,
without having to worry about support or having to get a new version.
</p>
        <p>
This is just a great tool. I am sure I will be using it often.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=67cadfcd-eb82-40ff-9fd5-aca6eea083ac" />
      </body>
      <title>Awesome mockup tool</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,67cadfcd-eb82-40ff-9fd5-aca6eea083ac.aspx</guid>
      <link>http://michiel.vanotegem.nl/2010/01/24/AwesomeMockupTool.aspx</link>
      <pubDate>Sun, 24 Jan 2010 21:37:03 GMT</pubDate>
      <description>&lt;p&gt;
I've written quite a few functional designs over the years and I've found that for
users needing to validate it having visuals is key. In most cases prospective users
don't understand what they really get until they see screens. On the opposite side
of the spectrum telling developers what to do also is much easier with a screen, especially
when you are debating what would be the best and most efficient (coding wise)&amp;nbsp;way
to give a user certain functionality. In these situations just getting a piece of
paper and draw is the best you can do. The last few years I've done this on and off
on my tablet. I can sketch on it, but the results are often so poor to see (and read!),
that I can't possible put it in a functional design. This is where a good mockup tool
comes in.
&lt;/p&gt;
&lt;p&gt;
A good mockup tool should make you feel like you are drawing, but provide you with
predefined controls to make your job fast and easy. Recently I came across &lt;a href="http://www.balsamiq.com/products/mockups"&gt;Balsamiq
Mockups&lt;/a&gt;, which is simply jaw dropping. Let's start with the result, which looks
pretty much like a hand drawn thing. At first glance that may not seem like a big
deal, but it is. It states clearly "&lt;em&gt;This is a mockup, the actual thing may look
different&lt;/em&gt;". If you give a user something that looks like a screen shot, that
is what to expect to get. With this they know it will look differently when it is
done, and this also makes it much easier to debate your choices and come up with better
ideas (to quote David Platt, "Thy User Is Not You", so they will come up with stuff
you didn't even dream about).
&lt;/p&gt;
&lt;p&gt;
Ok, so the result is great, what about getting there? Well, that's a piece of cake,
really. Balsamiq is as intuitive a tool as I've seen and I was able to create a pretty
complex screen in about 10 minutes. There's a bunch of commonly used controls (and
some less common), and you can easily find what you need. Also, you can download tons
of&amp;nbsp;additional controls from &lt;a href="http://mockupstogo.net"&gt;http://mockupstogo.net&lt;/a&gt;.&amp;nbsp;Placing,
moving, resizing etc. is all very easy because of the snapping support. Want to see
for yourself? Look &lt;a href="http://www.balsamiq.com/products/mockups/tour"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The last things that I find refreshing is the licensing model and fee. It only costs
$79 for a single license, and that comes with updates forever (and they update frequently,
so they say). Because the tool is already so good, this means you can use it for years,
without having to worry about support or having to get a new version.
&lt;/p&gt;
&lt;p&gt;
This is just a great tool. I am sure I will be using it often.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=67cadfcd-eb82-40ff-9fd5-aca6eea083ac" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,67cadfcd-eb82-40ff-9fd5-aca6eea083ac.aspx</comments>
      <category>Development</category>
      <category>English</category>
      <category>Review</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=5ccc606c-7f09-423b-ac8a-f92ead8ae2e9</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,5ccc606c-7f09-423b-ac8a-f92ead8ae2e9.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,5ccc606c-7f09-423b-ac8a-f92ead8ae2e9.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=5ccc606c-7f09-423b-ac8a-f92ead8ae2e9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Just a few days ago <a href="http://go-mono.com/moonlight/">Moonlight 2.0</a> was
released. Moonlight is an open source Linux implementation of Silverlight. Moonlight
2.0 should be compatible with Silverlight 2.0, but it also already supports some Silverlight
3.0 features, such as writeable bitmaps, some out-of-browser functionality, and
the Silverlight 3 pluggable media pipeline (source: <a href="http://arstechnica.com/open-source/news/2009/12/moonlight-2-brings-silverlight-2-and-parts-of-3-to-linux.ars">ARS
Technica</a>). For us this is very interesting, because we are working on a project
involving Silverlight which will run in a public website. The client was worried about
the possible reach, and this at least opens the door. According to Microsoft 60% of
the PC's in the Netherlands now have Silverlight installed, so this is good news for
our client.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=5ccc606c-7f09-423b-ac8a-f92ead8ae2e9" />
      </body>
      <title>Moonlight 2.0 released</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,5ccc606c-7f09-423b-ac8a-f92ead8ae2e9.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/12/21/Moonlight20Released.aspx</link>
      <pubDate>Mon, 21 Dec 2009 12:17:37 GMT</pubDate>
      <description>&lt;p&gt;
Just a few days ago &lt;a href="http://go-mono.com/moonlight/"&gt;Moonlight 2.0&lt;/a&gt; was
released. Moonlight is an open source Linux implementation of Silverlight. Moonlight
2.0 should be compatible with Silverlight 2.0, but it also already supports some Silverlight
3.0 features, such as&amp;nbsp;writeable bitmaps, some out-of-browser functionality, and
the Silverlight 3 pluggable media pipeline (source: &lt;a href="http://arstechnica.com/open-source/news/2009/12/moonlight-2-brings-silverlight-2-and-parts-of-3-to-linux.ars"&gt;ARS
Technica&lt;/a&gt;). For us this is very interesting, because we are working on a project
involving Silverlight which will run in a public website. The client was worried about
the possible reach, and this at least opens the door. According to Microsoft 60% of
the PC's in the Netherlands now have Silverlight installed, so this is good news for
our client.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=5ccc606c-7f09-423b-ac8a-f92ead8ae2e9" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,5ccc606c-7f09-423b-ac8a-f92ead8ae2e9.aspx</comments>
      <category>English</category>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=6d2a1db8-9976-4f16-9acc-adf5899fc362</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,6d2a1db8-9976-4f16-9acc-adf5899fc362.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,6d2a1db8-9976-4f16-9acc-adf5899fc362.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=6d2a1db8-9976-4f16-9acc-adf5899fc362</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recently we moved our projects to a new TFS server. This means that all workspaces
link to the old TFS, and you will get the error message "The path [path] is already
mapped in workspace [workspace]" when you try to add a new reference to a project
you've already worked on. I keep running into this every once in a while, because
we develop from virtual machines and we have different ones for different projects.
I also keep forgetting what to do, so this is partly a message to self.
</p>
        <p>
You can solve this by opening the Visual Studio command prompt and typing:
</p>
        <p>
          <font face="Courier New">tf workspaces /remove:[projectname]</font>
        </p>
        <p>
If you want to remove all of them (which is the case when switching to a new TFS),
you can use a wildcard, like this:
</p>
        <p>
          <font face="Courier New">tf workspaces /remove:*</font>
        </p>
        <p>
Thanks to <a href="http://gregdoesit.com/2009/01/tfs-deleting-old-workspaces/">Gergely
Orosz's post</a> on the topic.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=6d2a1db8-9976-4f16-9acc-adf5899fc362" />
      </body>
      <title>Solving "The path [path] is already mapped in workspace [workspace]"</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,6d2a1db8-9976-4f16-9acc-adf5899fc362.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/12/21/SolvingThePathPathIsAlreadyMappedInWorkspaceWorkspace.aspx</link>
      <pubDate>Mon, 21 Dec 2009 11:32:52 GMT</pubDate>
      <description>&lt;p&gt;
Recently we moved our projects to a new TFS server. This means that all workspaces
link to the old TFS, and you will get the error message "The path [path] is already
mapped in workspace [workspace]" when you try to add a new reference to a project
you've already worked on.&amp;nbsp;I keep running into this every once in a while, because
we develop from virtual machines and we have different ones for different projects.
I also keep forgetting what to do, so this is partly a message to self.
&lt;/p&gt;
&lt;p&gt;
You can solve this by opening the Visual Studio command prompt and typing:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;tf workspaces /remove:[projectname]&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
If you want to remove all of them (which is the case when switching to a new TFS),
you can use a wildcard, like this:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;tf workspaces /remove:*&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Thanks to &lt;a href="http://gregdoesit.com/2009/01/tfs-deleting-old-workspaces/"&gt;Gergely
Orosz's post&lt;/a&gt; on the topic.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=6d2a1db8-9976-4f16-9acc-adf5899fc362" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,6d2a1db8-9976-4f16-9acc-adf5899fc362.aspx</comments>
      <category>Development</category>
      <category>English</category>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=39ccbf90-f724-4f79-9af3-478c6ae2ba37</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,39ccbf90-f724-4f79-9af3-478c6ae2ba37.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,39ccbf90-f724-4f79-9af3-478c6ae2ba37.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=39ccbf90-f724-4f79-9af3-478c6ae2ba37</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've been reading parts of this book on and off for a long time, and I've pretty much
read the whole book and some sections more than once, so it is time for a review (even
though this is an "older" book).
</p>
        <p>
If you're a software developer, this is a must read. It gives you a kick in the head
about what you should think of when you develop software. The examples David Platt
uses in this book are very striking, and will make you think about what you've built
yourself. You may feel embarrased sometimes and think "I did that too, shame on me!"
However, in the end it will make you a better developer. Platt shows very well that
IT is no longer about technology, but about the people operating the technology.
</p>
        <p>
This book is also a fun read. Platt has a good sense of humor, and in some cases
the stories he tells themselves are pretty hilarious. The only downside of the book
is that at some point repetition kicks in. The message is clear, so you want to move
on, but there are still more examples explaining the same thing.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=39ccbf90-f724-4f79-9af3-478c6ae2ba37" />
      </body>
      <title>Book Review: Why software sucks and what you can do about it</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,39ccbf90-f724-4f79-9af3-478c6ae2ba37.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/12/16/BookReviewWhySoftwareSucksAndWhatYouCanDoAboutIt.aspx</link>
      <pubDate>Wed, 16 Dec 2009 13:46:03 GMT</pubDate>
      <description>&lt;p&gt;
I've been reading parts of this book on and off for a long time, and I've pretty much
read the whole book and some sections more than once, so it is time for a review (even
though this is an "older" book).
&lt;/p&gt;
&lt;p&gt;
If you're a software developer, this is a must read. It gives you a kick in the head
about what you should think of when you develop software. The examples David Platt
uses in this book are very striking, and will make you think about what you've built
yourself. You may feel embarrased sometimes and think "I did that too, shame on me!"
However, in the end it will make you a better developer. Platt shows very well that
IT is no longer about technology, but about the people operating the technology.
&lt;/p&gt;
&lt;p&gt;
This book is also a fun read. Platt has a&amp;nbsp;good sense of humor, and in some cases
the stories he tells themselves are pretty hilarious. The only downside of the book
is that at some point repetition kicks in. The message is clear, so you want to move
on, but there are still more examples explaining the same thing.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=39ccbf90-f724-4f79-9af3-478c6ae2ba37" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,39ccbf90-f724-4f79-9af3-478c6ae2ba37.aspx</comments>
      <category>Development</category>
      <category>English</category>
      <category>Review</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=356e9de2-da7e-4db2-ac5b-ad6f8e0de7e3</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,356e9de2-da7e-4db2-ac5b-ad6f8e0de7e3.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,356e9de2-da7e-4db2-ac5b-ad6f8e0de7e3.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=356e9de2-da7e-4db2-ac5b-ad6f8e0de7e3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We're doing a project where were talking to non-.NET web services and this means that
sometimes we have to see what the exact message looks like. In case you ever
need to do this: a MessageInspector will not (always) be suitable for this.
This is particularly the case where you're using a certificate to sign the message.
Signing happens after the MessageInspector is invoked, so it will just show you the
unsigned message. One thing you can do is setup a URL you can post to that logs the
incoming message as is. We have a "service" like that available to all developers,
because it is a quick and easy solution that doesn't require installing additional
tooling or modify code. Another option is to configure message logging (see the MSDN
article <a href="http://msdn.microsoft.com/en-us/library/aa702726.aspx">Recommended
Settings for Tracing and Message Logging</a>).
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=356e9de2-da7e-4db2-ac5b-ad6f8e0de7e3" />
      </body>
      <title>WCF MessageInspector Pitfall</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,356e9de2-da7e-4db2-ac5b-ad6f8e0de7e3.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/12/16/WCFMessageInspectorPitfall.aspx</link>
      <pubDate>Wed, 16 Dec 2009 13:36:14 GMT</pubDate>
      <description>&lt;p&gt;
We're doing a project where were talking to non-.NET web services and this means that
sometimes we have to see what the exact message looks like.&amp;nbsp;In case you ever
need to do this:&amp;nbsp;a&amp;nbsp;MessageInspector will not (always) be suitable for this.
This is particularly the case where you're using a certificate to sign the message.
Signing happens after the MessageInspector is invoked, so it will just show you the
unsigned message. One thing you can do is setup a URL you can post to that logs the
incoming message as is. We have a "service" like that available to all developers,
because it is a quick and easy solution that doesn't require installing additional
tooling or modify code. Another option is to configure message logging (see the MSDN
article &lt;a href="http://msdn.microsoft.com/en-us/library/aa702726.aspx"&gt;Recommended
Settings for Tracing and Message Logging&lt;/a&gt;).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=356e9de2-da7e-4db2-ac5b-ad6f8e0de7e3" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,356e9de2-da7e-4db2-ac5b-ad6f8e0de7e3.aspx</comments>
      <category>Development</category>
      <category>English</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=a8a54c98-4644-4000-a8b9-1df60e0fcfc2</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,a8a54c98-4644-4000-a8b9-1df60e0fcfc2.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,a8a54c98-4644-4000-a8b9-1df60e0fcfc2.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=a8a54c98-4644-4000-a8b9-1df60e0fcfc2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
At my company we we're looking at creating a generic STS that does not require Active
Directory Federation Services 2.0, and we were also thinking about putting it up on
CodePlex. Dominick Baier from Thinktecture beat us to it with <a href="http://startersts.codeplex.com">StarterSTS</a>.
He's also posted some webcasts on how to use it. Good stuff, so instead rolling our
own, we'll be using/extending this one.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=a8a54c98-4644-4000-a8b9-1df60e0fcfc2" />
      </body>
      <title>Starter STS</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,a8a54c98-4644-4000-a8b9-1df60e0fcfc2.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/12/01/StarterSTS.aspx</link>
      <pubDate>Tue, 01 Dec 2009 22:20:19 GMT</pubDate>
      <description>&lt;p&gt;
At my company we we're looking at creating a generic STS that does not require Active
Directory Federation Services 2.0, and we were also thinking about putting it up on
CodePlex. Dominick Baier from Thinktecture beat us to it with &lt;a href="http://startersts.codeplex.com"&gt;StarterSTS&lt;/a&gt;.
He's also posted some webcasts on how to use it. Good stuff, so instead rolling our
own, we'll be using/extending this one.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=a8a54c98-4644-4000-a8b9-1df60e0fcfc2" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,a8a54c98-4644-4000-a8b9-1df60e0fcfc2.aspx</comments>
      <category>Development</category>
      <category>English</category>
      <category>Windows Identity Foundation</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=8ea66fbe-d4dc-4d49-a9f3-9356576fbfab</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,8ea66fbe-d4dc-4d49-a9f3-9356576fbfab.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,8ea66fbe-d4dc-4d49-a9f3-9356576fbfab.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=8ea66fbe-d4dc-4d49-a9f3-9356576fbfab</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A while back I blogged about <a href="http://michiel.vanotegem.nl/2009/11/16/TestingVirtualBox.aspx">testing
VirtualBox</a>. At the same time we've tested Windows Virtual PC, and it's been disappointing
pretty much across the board:
</p>
        <ol>
          <li>
It doesn't run on our company's Lenovo T61's, which displays some vague error message.
Since most of our developers have a T61, this means they can't use it at all. Virtual
PC 2007 and VirtualBox run fine, so it isn't clear why WVPC can't. We have some different
machines where it does work, so we went on testing on those to see how well it works,
in case Microsoft steps up and fixes the T61 problem <u>and</u> starts supporting
64-bit guests. See the remaining points for my experience... 
</li>
          <li>
The integration features of WVPC suck. Even something simple like dragging a file
from the guest to the host or vice versa doesn't work. The reason is that with Integration
Mode enabled, you're actually connected to the guest through Remote Desktop Connection.
Microsoft has done this to leverage some of the advantages of RDP (as <a href="http://blogs.msdn.com/virtual_pc_guy/archive/2009/06/17/what-is-integrated-mode-in-windows-virtual-pc.aspx">Ben
Armstrong explains</a>), but IMHO they should find a different way to do so. 
</li>
          <li>
Starting/stopping a guest takes forever, and renders my laptop inoperable while doing
so. With VPC 2007 hibernating or restoring a hibernated VPC with 1.5 GB of memory
takes several tens of seconds, but I can easily use all other applications while doing
so. WIth WVPC just restarting a hibernated image tages 3-5 minutes and during that
time my other applicaties are pretty much frozen. I can get a cup of coffee (if I'd
drink coffee), eat a sandwich, and go to the John, during the wait. I have no
clue why this works as bad as it does, because VPC does this perfectly fine.</li>
        </ol>
        <p>
The only thing that's been a positive experience is the performance once it has started.
That said, I can't really tell if VPC 2007 or VirtualBox work better or worse, so
I can't even praise WVPC on this point.
</p>
        <p>
So for now it is back to VPC 2007, with our final decision on switching to VirtualBox
postponed until we really need 64-bit support. 
</p>
        <p>
On a side note, we've been trying to get the open source version of VirtualBox working,
and that appears to be quite a challenge. There are no binaries, so you need to compile
yourself. Even though we have a recent build, getting all the prerequisits is hardly
possible. Some of the needed SDKs are no longer available. Our conclusion up until
now: the open source version is  not really viable (at least for Windows), and
possible only there for marketing reasons ("see, we do open source"). 
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=8ea66fbe-d4dc-4d49-a9f3-9356576fbfab" />
      </body>
      <title>Uninstalled Windows Virtual PC</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,8ea66fbe-d4dc-4d49-a9f3-9356576fbfab.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/11/28/UninstalledWindowsVirtualPC.aspx</link>
      <pubDate>Sat, 28 Nov 2009 23:59:40 GMT</pubDate>
      <description>&lt;p&gt;
A while back I blogged about &lt;a href="http://michiel.vanotegem.nl/2009/11/16/TestingVirtualBox.aspx"&gt;testing
VirtualBox&lt;/a&gt;. At the same time we've tested Windows Virtual PC, and it's been disappointing
pretty much across the board:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
It doesn't run on our company's Lenovo T61's, which displays some vague error message.
Since most of our developers have a T61, this means they can't use it at all. Virtual
PC 2007 and VirtualBox run fine, so it isn't clear why WVPC can't. We have some different
machines where it does work, so we went on testing on those to see how well it works,
in case Microsoft steps up and fixes the T61 problem &lt;u&gt;and&lt;/u&gt; starts supporting
64-bit guests. See the remaining points for my experience... 
&lt;li&gt;
The integration features of WVPC suck. Even something simple like dragging a file
from the guest to the host or vice versa doesn't work. The reason is that with Integration
Mode enabled, you're actually connected to the guest through Remote Desktop Connection.
Microsoft has done this to leverage some of the advantages of RDP (as &lt;a href="http://blogs.msdn.com/virtual_pc_guy/archive/2009/06/17/what-is-integrated-mode-in-windows-virtual-pc.aspx"&gt;Ben
Armstrong explains&lt;/a&gt;), but IMHO they should find a different way to do so. 
&lt;li&gt;
Starting/stopping a guest takes forever, and renders my laptop inoperable while doing
so. With VPC 2007 hibernating or restoring a hibernated VPC with 1.5 GB of memory
takes several tens of seconds, but I can easily use all other applications while doing
so. WIth WVPC just restarting a hibernated image tages 3-5 minutes and during that
time my other applicaties are pretty much frozen. I can get a cup of coffee (if I'd
drink coffee), eat a sandwich, and go to the John, during&amp;nbsp;the wait. I have no
clue why this works as bad as it does, because VPC does this perfectly fine.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
The only thing that's been a positive experience is the performance once it has started.
That said, I can't really tell if VPC 2007 or VirtualBox work better or worse, so
I can't even praise WVPC on this point.
&lt;/p&gt;
&lt;p&gt;
So for now it is back to VPC 2007, with our final decision on switching to VirtualBox
postponed until we really need 64-bit support. 
&lt;/p&gt;
&lt;p&gt;
On a side note, we've been trying to get the open source version of VirtualBox&amp;nbsp;working,
and that appears to be quite a challenge. There are no binaries, so you need to compile
yourself. Even though we have a recent build, getting all the prerequisits is hardly
possible. Some of the needed SDKs are no longer available. Our conclusion up until
now: the open source version is&amp;nbsp; not really viable (at least for Windows), and
possible only there for marketing reasons ("see, we do open source"). 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=8ea66fbe-d4dc-4d49-a9f3-9356576fbfab" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,8ea66fbe-d4dc-4d49-a9f3-9356576fbfab.aspx</comments>
      <category>English</category>
      <category>Review</category>
      <category>Virtualization</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=f940e046-6a9a-4d91-98e4-b41ebb8eac91</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,f940e046-6a9a-4d91-98e4-b41ebb8eac91.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,f940e046-6a9a-4d91-98e4-b41ebb8eac91.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=f940e046-6a9a-4d91-98e4-b41ebb8eac91</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Windows Identity Foundation introduces a new ClaimTypes class. It contains predefined
claim type URIs for claims defined by OASIS and Microsoft. In the WIF SDK
project templates for a custom STS this ClaimTypes class is mixed with the one
already in System.IdentityModel.Claims, which is rather confusing. So, what's the
difference?
</p>
        <p>
Functionally: None. All claim type URIs in Microsoft.IdentityModel.Claims.ClaimTypes
are identical to corresponding types in System.IdentityModel.Claims.ClaimTypes. That
said, Microsoft.IdentityModel.Claims.ClaimTypes adds a few new claim types.
</p>
        <p>
Technically: Claim types in System.IdentityModel.Claims.ClaimTypes are defined
as static read only string properties, whereas in Microsoft.IdentityModel.Claims.ClaimTypes
the claim types are string constants.
</p>
        <p>
My advice: for clarity always use Microsoft.IdentityModel.Claims.ClaimTypes.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=f940e046-6a9a-4d91-98e4-b41ebb8eac91" />
      </body>
      <title>System.IdentityModel.Claims.ClaimTypes vs. Microsoft.IdentityModel.Claims.ClaimTypes</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,f940e046-6a9a-4d91-98e4-b41ebb8eac91.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/11/25/SystemIdentityModelClaimsClaimTypesVsMicrosoftIdentityModelClaimsClaimTypes.aspx</link>
      <pubDate>Wed, 25 Nov 2009 12:33:08 GMT</pubDate>
      <description>&lt;p&gt;
Windows Identity Foundation introduces a new ClaimTypes class. It contains&amp;nbsp;predefined
claim type URIs for claims defined by OASIS and Microsoft.&amp;nbsp;In the WIF&amp;nbsp;SDK
project templates for a custom STS&amp;nbsp;this ClaimTypes class is mixed with the one
already in System.IdentityModel.Claims, which is rather confusing. So, what's the
difference?
&lt;/p&gt;
&lt;p&gt;
Functionally: None. All claim type URIs in Microsoft.IdentityModel.Claims.ClaimTypes
are identical to corresponding types in System.IdentityModel.Claims.ClaimTypes. That
said, Microsoft.IdentityModel.Claims.ClaimTypes adds a few new claim types.
&lt;/p&gt;
&lt;p&gt;
Technically: Claim types in System.IdentityModel.Claims.ClaimTypes&amp;nbsp;are defined
as&amp;nbsp;static read only string properties, whereas in Microsoft.IdentityModel.Claims.ClaimTypes
the claim types are string constants.
&lt;/p&gt;
&lt;p&gt;
My advice: for clarity always use Microsoft.IdentityModel.Claims.ClaimTypes.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=f940e046-6a9a-4d91-98e4-b41ebb8eac91" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,f940e046-6a9a-4d91-98e4-b41ebb8eac91.aspx</comments>
      <category>.NET</category>
      <category>Development</category>
      <category>English</category>
      <category>Windows Identity Foundation</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=9a1669db-1e28-4a4f-b6dc-bc5f630c3366</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,9a1669db-1e28-4a4f-b6dc-bc5f630c3366.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,9a1669db-1e28-4a4f-b6dc-bc5f630c3366.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=9a1669db-1e28-4a4f-b6dc-bc5f630c3366</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Earlier this year I was pretty <a href="http://michiel.vanotegem.nl/2009/03/26/WindowsAzureLicensingDisappointment.aspx">negative
about the Azure story</a> from Microsoft. My main gripe was that (from my perspective
at the time) it was not a write-once, run-anywhere story, so you couldn't run your
current apps in Azure without modification. I'm very pleased about what I've seen
now from PDC. Microsoft has opened up Azure in many ways, giving you much more control
over what's happening. In fact, you can get your own virtual machines and have complete
remote admin access. Also, they've been really thinking about how to tie your existing
hosting environment to Azure and vice versa. It will be possible to connect a
web app inside Azure securely to a database server in your own data center.
</p>
        <p>
I must say I'm impressed at how well Microsoft has listened to all the feedback about
Azure. With all the changes they've implemented I feel that it has now become interesting
for some of the services my company is implementing, whereas previously we weren't
even considering Azure.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=9a1669db-1e28-4a4f-b6dc-bc5f630c3366" />
      </body>
      <title>Azure story much better from PDC 09</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,9a1669db-1e28-4a4f-b6dc-bc5f630c3366.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/11/23/AzureStoryMuchBetterFromPDC09.aspx</link>
      <pubDate>Mon, 23 Nov 2009 17:07:34 GMT</pubDate>
      <description>&lt;p&gt;
Earlier this year I was pretty &lt;a href="http://michiel.vanotegem.nl/2009/03/26/WindowsAzureLicensingDisappointment.aspx"&gt;negative
about the Azure story&lt;/a&gt; from Microsoft. My main gripe was that (from my perspective
at the time) it was not a write-once, run-anywhere story, so you couldn't run your
current apps in Azure without modification. I'm very pleased about what I've seen
now from PDC. Microsoft has opened up Azure in many ways, giving you much more control
over what's happening. In fact, you can get your own virtual machines and have complete
remote admin access. Also, they've been really thinking about how to tie your existing
hosting environment to Azure and vice versa. It will be possible to&amp;nbsp;connect a
web app inside Azure securely to a database server in your own data center.
&lt;/p&gt;
&lt;p&gt;
I must say I'm impressed at how well Microsoft has listened to all the feedback about
Azure. With all the changes they've implemented I feel that it has now become interesting
for some of the services my company is implementing, whereas previously we weren't
even considering Azure.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=9a1669db-1e28-4a4f-b6dc-bc5f630c3366" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,9a1669db-1e28-4a4f-b6dc-bc5f630c3366.aspx</comments>
      <category>English</category>
      <category>Events</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=9781323c-7fef-4e91-8728-6a4b6ef35cdf</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,9781323c-7fef-4e91-8728-6a4b6ef35cdf.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,9781323c-7fef-4e91-8728-6a4b6ef35cdf.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=9781323c-7fef-4e91-8728-6a4b6ef35cdf</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Windows Identity Foundation, formerly known as "Geneva", has shipped. I've been talking
about Geneva/WIF on several occasions and I absolutely love it. It opens the door
for a whole new realm of authentication/authorization scenario's. SharePoint 2010
will be the first Microsoft Product to support it, apart from the new Active Directory
Federation Services 2.0, which was part of the development effort and was formerly
known as "Geneva" Server. Be sure to <a href="http://msdn.microsoft.com/en-us/security/aa570351.aspx">check
it out</a>!
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=9781323c-7fef-4e91-8728-6a4b6ef35cdf" />
      </body>
      <title>Windows Identity Foundation released</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,9781323c-7fef-4e91-8728-6a4b6ef35cdf.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/11/19/WindowsIdentityFoundationReleased.aspx</link>
      <pubDate>Thu, 19 Nov 2009 14:09:16 GMT</pubDate>
      <description>&lt;p&gt;
Windows Identity Foundation, formerly known as "Geneva", has shipped. I've been talking
about Geneva/WIF on several occasions and I absolutely love it. It opens the door
for a whole new realm of authentication/authorization scenario's. SharePoint 2010
will be the first Microsoft Product to support it, apart from the new Active Directory
Federation Services 2.0, which was part of the development effort and was formerly
known as "Geneva" Server. Be sure to &lt;a href="http://msdn.microsoft.com/en-us/security/aa570351.aspx"&gt;check
it out&lt;/a&gt;!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=9781323c-7fef-4e91-8728-6a4b6ef35cdf" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,9781323c-7fef-4e91-8728-6a4b6ef35cdf.aspx</comments>
      <category>.NET</category>
      <category>English</category>
      <category>Security</category>
      <category>Windows Identity Foundation</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=7fadcd0f-fbdb-4c3f-8cc1-8529f71be334</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,7fadcd0f-fbdb-4c3f-8cc1-8529f71be334.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,7fadcd0f-fbdb-4c3f-8cc1-8529f71be334.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=7fadcd0f-fbdb-4c3f-8cc1-8529f71be334</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've been a proponent of development inside virtual machine for years. At my previous
employer I pretty much moved the whole dev-department from host based development
to VM development in 2004 when Virtual PC 2004 came out. Up until now I've always
been pretty happy with Virtual PC considering its cost-benefit ratio (it's free and
only was only slightly less powerfull than paid offrings from other vendors). However,
with Windows Virtual PC Microsoft has seriously dropped the ball. Where all hypervisor
based VM software enables you to run 64-bit guests, Microsoft only supports that with
Hyper-V on Windows 2008 Server. Since we're not letting our devs run Windows Server
on their laptops for several reasons, this is rapidly becoming a problem. Windows
2008 R2 is not available in 32-bit and SharePoint 2010 will also not run in a 32-bit
environment. Because of this we've been forced to look for alternatives. VMWare Workstation was
our first bet, but it'll take converting all our current VHD images, and I was
not really impressed by the overall performance and manageability. Today we started
testing <a href="http://www.virtualbox.org">VirtualBox</a> and I'm impressed.
It'll run our existing VHDs natively, also those that use differencing disks. In fact,
the media manager makes it very intuitive to work with differencing disks and shows
you the disk hierarchy. It also runs very smoothly, even before installing the add-ons
in the virtual images.
</p>
        <p>
VirtualBox comes in a free open source version that you'll have to compile yourself
(how hard is it for Sun to also post the binaries?). It lacks some features, such
as USB support, but we don't need the additional features. Even so, we are still considering
the commercial license just for ease. It's only $50 per machine, with $30 for a subscription
(starting at 50 users minium, so not for us though). Unless Microsoft steps up its
Virtual PC development and offers 64-bit support within the next six months or so,
we will likely move to VirtualBox.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=7fadcd0f-fbdb-4c3f-8cc1-8529f71be334" />
      </body>
      <title>Testing VirtualBox</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,7fadcd0f-fbdb-4c3f-8cc1-8529f71be334.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/11/16/TestingVirtualBox.aspx</link>
      <pubDate>Mon, 16 Nov 2009 23:01:51 GMT</pubDate>
      <description>&lt;p&gt;
I've been a proponent of development inside virtual machine for years. At my previous
employer I pretty much moved the whole dev-department from host based development
to VM development in 2004 when Virtual PC 2004 came out. Up until now I've always
been pretty happy with Virtual PC considering its cost-benefit ratio (it's free and
only was only slightly less powerfull than paid offrings from other vendors). However,
with Windows Virtual PC Microsoft has seriously dropped the ball. Where all hypervisor
based VM software enables you to run 64-bit guests, Microsoft only supports that with
Hyper-V on Windows 2008 Server. Since we're not letting our devs run Windows Server
on their laptops for several reasons, this is rapidly becoming a problem. Windows
2008 R2 is not available in 32-bit and SharePoint 2010 will also not run in a 32-bit
environment. Because of this we've been forced to look for alternatives. VMWare Workstation&amp;nbsp;was
our first bet, but it'll take converting all our current VHD images, and&amp;nbsp;I was
not really impressed by the overall performance and manageability. Today we started
testing &lt;a href="http://www.virtualbox.org"&gt;VirtualBox&lt;/a&gt; and&amp;nbsp;I'm impressed.
It'll run our existing VHDs natively, also those that use differencing disks. In fact,
the media manager makes it very intuitive to work with differencing disks and shows
you the disk hierarchy. It also runs very smoothly, even before installing the add-ons
in the virtual images.
&lt;/p&gt;
&lt;p&gt;
VirtualBox comes in a free open source version that you'll have to compile yourself
(how hard is it for Sun to also post the binaries?). It lacks some features, such
as USB support, but we don't need the additional features. Even so, we are still considering
the commercial license just for ease. It's only $50 per machine, with $30 for a subscription
(starting at 50 users minium, so not for us though). Unless Microsoft steps up its
Virtual PC development and offers 64-bit support within the next six months or so,
we will likely move to VirtualBox.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=7fadcd0f-fbdb-4c3f-8cc1-8529f71be334" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,7fadcd0f-fbdb-4c3f-8cc1-8529f71be334.aspx</comments>
      <category>English</category>
      <category>Review</category>
      <category>Virtualization</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=01bdc425-c0eb-48a2-9243-f2c29aeb6d33</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,01bdc425-c0eb-48a2-9243-f2c29aeb6d33.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,01bdc425-c0eb-48a2-9243-f2c29aeb6d33.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=01bdc425-c0eb-48a2-9243-f2c29aeb6d33</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
As many BizTalk developers we've been using the SSO (Single Sign On) database for
more than just SSO. We've been storing configuration data in that database too.
This used to be a work around, and we were using some custom tool to edit the
entries in the SSO database. However, we recently learned that Microsoft has
release an MMC snap-in to manage the values. You can download it <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=94e07de1-1d33-4245-b430-9216979cd587">here</a>.
Microsoft itself states this about the tool:
</p>
        <p>
          <em>This tool provides the ability to add and manage applications, add and manage
key value pairs, as well as import and export configuration applications so that they
can be deployed to different environments.</em>
        </p>
        <p>
That apparently means that even Redmond has "officially" accepted that SSO is used
for configuration as well.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=01bdc425-c0eb-48a2-9243-f2c29aeb6d33" />
      </body>
      <title>BizTalk SSO Configuration tool</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,01bdc425-c0eb-48a2-9243-f2c29aeb6d33.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/11/16/BizTalkSSOConfigurationTool.aspx</link>
      <pubDate>Mon, 16 Nov 2009 22:45:28 GMT</pubDate>
      <description>&lt;p&gt;
As many BizTalk developers we've been using the SSO (Single Sign On) database for
more than just SSO. We've been&amp;nbsp;storing configuration data in that database too.
This used to be a work around, and we were using&amp;nbsp;some custom tool to edit the
entries in the SSO database. However,&amp;nbsp;we recently learned that Microsoft has
release an MMC snap-in to manage the values. You can download it &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=94e07de1-1d33-4245-b430-9216979cd587"&gt;here&lt;/a&gt;.
Microsoft itself&amp;nbsp;states this about the tool:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;This tool provides the ability to add and manage applications, add and manage
key value pairs, as well as import and export configuration applications so that they
can be deployed to different environments.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
That apparently means that even Redmond has "officially" accepted that SSO is used
for configuration as well.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=01bdc425-c0eb-48a2-9243-f2c29aeb6d33" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,01bdc425-c0eb-48a2-9243-f2c29aeb6d33.aspx</comments>
      <category>Development</category>
      <category>English</category>
      <category>BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=39cf5c6c-3a2e-4a16-90a5-7fa9eccafd13</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,39cf5c6c-3a2e-4a16-90a5-7fa9eccafd13.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,39cf5c6c-3a2e-4a16-90a5-7fa9eccafd13.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=39cf5c6c-3a2e-4a16-90a5-7fa9eccafd13</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
As an MVP I've had the fortune of being involved early in the VS2010 beta. Because
the number of beta participants is relatively small in the beginning, Microsoft is
able to have a much more interaction with the testing population and excplicitly goes
out for feedback and discussion of some of the features. VS2010 is a great example
of Microsoft putting that to good use. Something simple like the Add Reference dialog
has improved greatly in VS2010, as Scott Guthrie explains <a href="http://weblogs.asp.net/scottgu/archive/2009/10/29/add-reference-dialog-improvements-vs-2010-and-net-4-0-series.aspx">here</a>.
I remember the discussion about it, because there were quite a few different ideas
about what should come up first and what you use the most. As you can see, Microsoft
decided that the Projects tab is the most likely to be used first, so I'm assuming
most developers agree on that (I do anyway).
</p>
        <p>
BTW, the rest of the series on <a href="http://weblogs.asp.net/scottgu/archive/2009/08/25/vs-2010-and-net-4-series.aspx">VS2010
and .NET 4.0</a> provides a good overview of what you can expect of the new release.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=39cf5c6c-3a2e-4a16-90a5-7fa9eccafd13" />
      </body>
      <title>VS2010, Microsoft has been listening</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,39cf5c6c-3a2e-4a16-90a5-7fa9eccafd13.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/11/12/VS2010MicrosoftHasBeenListening.aspx</link>
      <pubDate>Thu, 12 Nov 2009 01:37:54 GMT</pubDate>
      <description>&lt;p&gt;
As an MVP I've had the fortune of being involved early in the VS2010 beta. Because
the number of beta participants is relatively small in the beginning, Microsoft is
able to have a much more interaction with the testing population and excplicitly goes
out for feedback and discussion of some of the features. VS2010 is a great example
of Microsoft putting that to good use. Something simple like the Add Reference dialog
has improved greatly in VS2010, as Scott Guthrie explains &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/10/29/add-reference-dialog-improvements-vs-2010-and-net-4-0-series.aspx"&gt;here&lt;/a&gt;.
I remember the discussion about it, because there were quite a few different ideas
about what should come up first and what you use the most. As you can see, Microsoft
decided that the Projects tab is the most likely to be used first, so I'm assuming
most developers agree on that (I do anyway).
&lt;/p&gt;
&lt;p&gt;
BTW, the rest of the series on &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/08/25/vs-2010-and-net-4-series.aspx"&gt;VS2010
and .NET 4.0&lt;/a&gt; provides a good overview of what you can expect of the new release.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=39cf5c6c-3a2e-4a16-90a5-7fa9eccafd13" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,39cf5c6c-3a2e-4a16-90a5-7fa9eccafd13.aspx</comments>
      <category>.NET</category>
      <category>English</category>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=d6e1a20d-d255-4648-aa07-2709d3577866</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,d6e1a20d-d255-4648-aa07-2709d3577866.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,d6e1a20d-d255-4648-aa07-2709d3577866.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=d6e1a20d-d255-4648-aa07-2709d3577866</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recently I found myself having to debug a large stored procedure that calls all sorts
of sub-procedures. Also, the data set was rather large and it only failed sometimes.
SQL Management Studio in this scenario isn't very helpful for several reasons:
</p>
        <ul>
          <li>
The number of PRINT messages that it'll show is limited, so if the error is out of
range... tough luck.</li>
          <li>
Even with PRINT messages it can be hard to pin down which statement is actually in
error.</li>
          <li>
Line numbers are never accurate.</li>
          <li>
It seems View Dendencies sometimes misses out on dependencies.</li>
          <li>
View Dependencies doesn't show the number of times a proc is called from another proc.</li>
        </ul>
        <p>
SQL Profiler, which also comes with SQL Server is a much better tool when it comes
to pin-pointing the erronous statement(s), after which you can modify your code to
show an error message that prints the values causing the hickup. When you use SQL
Profiler, be sure to select more than just the default events. Click Show All Events
and select all Error events, as well as the Stored Procedure events that show Starting
and Completed of SQL statements with stored procedures. Then, once the root procedure
is done, do a Find through the trace for "Error", and you can see exactly which statement
is causing the error.
</p>
        <p>
 
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=d6e1a20d-d255-4648-aa07-2709d3577866" />
      </body>
      <title>Debugging SQL Server (large) stored procedures</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,d6e1a20d-d255-4648-aa07-2709d3577866.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/11/11/DebuggingSQLServerLargeStoredProcedures.aspx</link>
      <pubDate>Wed, 11 Nov 2009 00:33:56 GMT</pubDate>
      <description>&lt;p&gt;
Recently I found myself having to debug a large stored procedure that calls all sorts
of sub-procedures. Also, the data set was rather large and it only failed sometimes.
SQL Management Studio in this scenario isn't very helpful for several reasons:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The number of PRINT messages that it'll show is limited, so if the error is out of
range... tough luck.&lt;/li&gt;
&lt;li&gt;
Even with PRINT messages it can be hard to pin down which statement is actually in
error.&lt;/li&gt;
&lt;li&gt;
Line numbers are never accurate.&lt;/li&gt;
&lt;li&gt;
It seems View Dendencies sometimes misses out on dependencies.&lt;/li&gt;
&lt;li&gt;
View Dependencies doesn't show the number of times a proc is called from another proc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
SQL Profiler, which also comes with SQL Server is a much better tool when it comes
to pin-pointing the erronous statement(s), after which you can modify your code to
show an error message that prints the values causing the hickup. When you use SQL
Profiler, be sure to select more than just the default events. Click Show All Events
and select all Error events, as well as the Stored Procedure events that show Starting
and Completed of SQL statements with stored procedures. Then, once the root procedure
is done, do a Find through the trace for "Error", and you can see exactly which statement
is causing the error.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=d6e1a20d-d255-4648-aa07-2709d3577866" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,d6e1a20d-d255-4648-aa07-2709d3577866.aspx</comments>
      <category>Development</category>
      <category>English</category>
      <category>SQL Server</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=52a693f7-863d-41fa-a91a-f8b8cfa82d4a</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,52a693f7-863d-41fa-a91a-f8b8cfa82d4a.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,52a693f7-863d-41fa-a91a-f8b8cfa82d4a.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=52a693f7-863d-41fa-a91a-f8b8cfa82d4a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My company regularly works on public facing websites, and as such it is imperative
we test the sites we create with most common browsers. Naturally that means at least
Internet Explorer, FireFox, Safari, and Opera. With the last three we just download
and install om some test (virtual) machine. With IE however this is somewhat more
complicated (although not impossible to run different versions of IE side by side.
However, Microsoft provides a set of Virtual PC images known as the <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=21eabb90-958f-4b64-b5f1-73d0a413c8ef">Internet
Explorer Application Compatibility VPC Image</a>. These images enable you
to test different versions of IE on different versions of Windows. These images have
a limited lifetime (between 1-4 months), so you'll have to download a new set
on a regular basis, but other than that this is really handy. The following configurations
are available:
</p>
        <ul>
          <li>
Windows XP SP3 with IE6</li>
          <li>
Windows XP SP3 with IE7</li>
          <li>
Windows XP SP3 with IE8</li>
          <li>
Windows Vista with IE7</li>
          <li>
Windows Vista with IE8</li>
        </ul>
        <p>
Unfortunately these configurations are all en-US, so if you want to test with say
a Dutch version of Windows, you'll have to create your own images (which is what my
company has done, even for en-US).
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=52a693f7-863d-41fa-a91a-f8b8cfa82d4a" />
      </body>
      <title>Testing with different versions of IE</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,52a693f7-863d-41fa-a91a-f8b8cfa82d4a.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/11/11/TestingWithDifferentVersionsOfIE.aspx</link>
      <pubDate>Wed, 11 Nov 2009 00:20:59 GMT</pubDate>
      <description>&lt;p&gt;
My company regularly works on public facing websites, and as such it is imperative
we test the sites we create with most common browsers. Naturally that means at least
Internet Explorer, FireFox, Safari, and Opera. With the last three we just download
and install om some test (virtual) machine. With IE however this is somewhat more
complicated (although not impossible to run different versions of IE side by side.
However, Microsoft provides a set of Virtual PC images&amp;nbsp;known as the &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=21eabb90-958f-4b64-b5f1-73d0a413c8ef"&gt;Internet
Explorer Application Compatibility VPC Image&lt;/a&gt;.&amp;nbsp;These images&amp;nbsp;enable you
to test different versions of IE on different versions of Windows. These images have
a limited lifetime (between&amp;nbsp;1-4 months), so you'll have to download a new set
on a regular basis, but other than that this is really handy. The following configurations
are available:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Windows XP SP3 with IE6&lt;/li&gt;
&lt;li&gt;
Windows XP SP3 with IE7&lt;/li&gt;
&lt;li&gt;
Windows XP SP3 with IE8&lt;/li&gt;
&lt;li&gt;
Windows Vista with IE7&lt;/li&gt;
&lt;li&gt;
Windows Vista with IE8&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Unfortunately these configurations are all en-US, so if you want to test with say
a Dutch version of Windows, you'll have to create your own images (which is what my
company has done, even for en-US).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=52a693f7-863d-41fa-a91a-f8b8cfa82d4a" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,52a693f7-863d-41fa-a91a-f8b8cfa82d4a.aspx</comments>
      <category>ASP.NET</category>
      <category>Development</category>
      <category>English</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=443aa85b-f4ee-4cfb-9550-70a39b347977</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,443aa85b-f4ee-4cfb-9550-70a39b347977.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,443aa85b-f4ee-4cfb-9550-70a39b347977.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=443aa85b-f4ee-4cfb-9550-70a39b347977</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today <a href="http://orchard.codeplex.com/">http://orchard.codeplex.com/</a> went
live. Orchard is an open source Content Management System that the folks from Redmond
are working on together with the ASP.NET community, and which I've been following
with much interest. Orchard is based on ASP.NET MVC, which means I'd favor it over
something like Umbraco when it is mature enough. Why? Because this should mean that
it blends easier with your regular development efforts, rather than having to deal
with an entirely different templating technology. Umbraco for instance uses XSLT,
and even though I wrote<a href="http://www.amazon.com/exec/obidos/ASIN/0672323184/aspnlcom-20"> a
book a about XSLT</a> and my company is well versed in XSLT because we do a lot of
BizTalk, it is troublesome for plain ASP.NET developers.
</p>
        <p>
Keep in mind that Orchard is relatively new and a lot of scenario's are still not
supported. But at the pace the team is going, you'll soon see more advanced stuff
being possible. You can make yourself heard about what you'd like to see through CodePlex
or through one of the sessions at TechEd or PDC this month.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=443aa85b-f4ee-4cfb-9550-70a39b347977" />
      </body>
      <title>New ASP.NET Open Source CMS in the making</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,443aa85b-f4ee-4cfb-9550-70a39b347977.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/11/10/NewASPNETOpenSourceCMSInTheMaking.aspx</link>
      <pubDate>Tue, 10 Nov 2009 22:37:34 GMT</pubDate>
      <description>&lt;p&gt;
Today &lt;a href="http://orchard.codeplex.com/"&gt;http://orchard.codeplex.com/&lt;/a&gt;&amp;nbsp;went
live. Orchard is an open source Content Management System that the folks from Redmond
are working on together with the ASP.NET community, and which I've been following
with much interest. Orchard is based on ASP.NET MVC, which means I'd favor it over
something like Umbraco when it is mature enough. Why? Because this should mean that
it blends easier with your regular development efforts, rather than having to deal
with an entirely different templating technology. Umbraco for instance uses XSLT,
and even though I wrote&lt;a href="http://www.amazon.com/exec/obidos/ASIN/0672323184/aspnlcom-20"&gt; a
book a about XSLT&lt;/a&gt; and my company is well versed in XSLT because we do a lot of
BizTalk, it is troublesome for plain ASP.NET developers.
&lt;/p&gt;
&lt;p&gt;
Keep in mind that Orchard is relatively new and a lot of scenario's are still not
supported. But at the pace the team is going, you'll soon see more advanced stuff
being possible. You can make yourself heard about what you'd like to see through CodePlex
or through one of the sessions at TechEd or PDC this month.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=443aa85b-f4ee-4cfb-9550-70a39b347977" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,443aa85b-f4ee-4cfb-9550-70a39b347977.aspx</comments>
      <category>ASP.NET</category>
      <category>Development</category>
      <category>English</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=70768443-da91-472c-a6e5-ccd9059f55b5</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,70768443-da91-472c-a6e5-ccd9059f55b5.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,70768443-da91-472c-a6e5-ccd9059f55b5.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=70768443-da91-472c-a6e5-ccd9059f55b5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Lately I've been making time to read more again, and I thought I'd share my findings.
My most recent read is <a href="http://www.amazon.com/exec/obidos/ASIN/0735625921/aspnlcom-20" target="_blank">Solid
Code: Optimizing the Software Development Life Cycle</a> by Donis Marshall and John
Bruno. My feelings about this book are mixed. On the one hand, it gives a good overview
of software engineering practices. On the other hand, an overview is all that it is.
It doesn't really do a good job at giving any details. That said, I think it is a
good read for junior/medior developers to get a sense of all the stuff they should
be aware of when building software. For senior developers and architects a quick scan
to see if they have a gap somewhere is enough. From there you can explore books
specialized at the topic(s) you need to know more about. Some of the topics covered
include, design, testing, performance, scalabiltity, and security.
</p>
        <p>
As an aside, I've read several books now that cover Agile development methodologies.
What strikes me everytime is that the given examples are always about product development,
and this book is no different. Product development and custom software projects however
are very different. In product development you can work with fixed budget and fixed
time, and cut features if either budget or time doesn't allow you to create them.
Custom software projects can't do this as easily. Clients are not going to give you
a bag of money and a schedule and say "we'll see what makes it into the final version".
The client wants to know what he/she is going to get for the money they pay. This
means that in custom software projects, you need to have a much more detailed view
up front of what needs to be implemented. I'm not saying this precludes Agile development
practices, but there is a certainly a difference at the start of the project, because
a large chunk of the design work has to be done earlier in the project lifecycle.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=70768443-da91-472c-a6e5-ccd9059f55b5" />
      </body>
      <title>Book Review - Solid Code: Optimizing the Software Development Life Cycle </title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,70768443-da91-472c-a6e5-ccd9059f55b5.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/10/30/BookReviewSolidCodeOptimizingTheSoftwareDevelopmentLifeCycle.aspx</link>
      <pubDate>Fri, 30 Oct 2009 13:05:13 GMT</pubDate>
      <description>&lt;p&gt;
Lately I've been making time to read more again, and I thought I'd share my findings.
My most recent read is &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0735625921/aspnlcom-20" target=_blank&gt;Solid
Code: Optimizing the Software Development Life Cycle&lt;/a&gt; by Donis Marshall and John
Bruno. My feelings about this book are mixed. On the one hand, it gives a good overview
of software engineering practices. On the other hand, an overview is all that it is.
It doesn't really do a good job at giving any details. That said, I think it is a
good read for junior/medior developers to get a sense of all the stuff they should
be aware of when building software. For senior developers and architects a quick scan
to see if&amp;nbsp;they have a gap somewhere is enough. From there you can explore books
specialized at the topic(s) you need to know more about.&amp;nbsp;Some of the topics covered
include, design, testing, performance, scalabiltity, and security.
&lt;/p&gt;
&lt;p&gt;
As an aside, I've read several books now that cover Agile development methodologies.
What strikes me everytime is that the given examples are always about product development,
and this book is no different. Product development and custom software projects however
are very different. In product development you can work with fixed budget and fixed
time, and cut features if either budget or time doesn't allow you to create them.
Custom software projects can't do this as easily. Clients are not going to give you
a bag of money and a schedule and say "we'll see what makes it into the final version".
The client wants to know what he/she is going to get for the money they pay. This
means that in custom software projects, you need to have a much more detailed view
up front of what needs to be implemented. I'm not saying this precludes Agile development
practices, but there is a certainly a difference at the start of the project, because
a large chunk of the design work has to be done earlier in the project lifecycle.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=70768443-da91-472c-a6e5-ccd9059f55b5" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,70768443-da91-472c-a6e5-ccd9059f55b5.aspx</comments>
      <category>Development</category>
      <category>English</category>
      <category>Review</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=6859ff29-918a-4128-b4db-6e0cdabb4edb</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,6859ff29-918a-4128-b4db-6e0cdabb4edb.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,6859ff29-918a-4128-b4db-6e0cdabb4edb.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=6859ff29-918a-4128-b4db-6e0cdabb4edb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Every once in a while (when I use a new dev environment) I hit this error:
</p>
        <p>
Saving Changes in not permitted. The changes you have made require the following tables
to be dropped and re-created. You have either made changes to a table that can’t be
re-created or enabled the option Prevent saving changes that require the table to
be re-created
</p>
        <p>
Each time I forget how to fix this, so by posting here I know I'll never forget. Check <a href="http://blog.sqlauthority.com/2009/05/18/sql-server-fix-management-studio-error-saving-changes-in-not-permitted-the-changes-you-have-made-require-the-following-tables-to-be-dropped-and-re-created-you-have-either-made-changes-to-a-tab/">Pinal
Dave's blog post on this error</a> (hint: it's in the Option menu). Thanks Pinal!
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=6859ff29-918a-4128-b4db-6e0cdabb4edb" />
      </body>
      <title>Note to self: SQL Server Management Studio Error "Saving Changes not permitted"</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,6859ff29-918a-4128-b4db-6e0cdabb4edb.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/09/30/NoteToSelfSQLServerManagementStudioErrorSavingChangesNotPermitted.aspx</link>
      <pubDate>Wed, 30 Sep 2009 15:41:56 GMT</pubDate>
      <description>&lt;p&gt;
Every once in a while (when I use a new dev environment) I hit this error:
&lt;/p&gt;
&lt;p&gt;
Saving Changes in not permitted. The changes you have made require the following tables
to be dropped and re-created. You have either made changes to a table that can’t be
re-created or enabled the option Prevent saving changes that require the table to
be&amp;nbsp;re-created
&lt;/p&gt;
&lt;p&gt;
Each time I forget how to fix this, so by posting here I know I'll never forget. Check &lt;a href="http://blog.sqlauthority.com/2009/05/18/sql-server-fix-management-studio-error-saving-changes-in-not-permitted-the-changes-you-have-made-require-the-following-tables-to-be-dropped-and-re-created-you-have-either-made-changes-to-a-tab/"&gt;Pinal
Dave's blog post on this error&lt;/a&gt;&amp;nbsp;(hint: it's in the Option menu). Thanks Pinal!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=6859ff29-918a-4128-b4db-6e0cdabb4edb" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,6859ff29-918a-4128-b4db-6e0cdabb4edb.aspx</comments>
      <category>Development</category>
      <category>English</category>
      <category>SQL Server</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=75f0b0f7-829e-4a4a-9b8f-ba8b85baa86e</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,75f0b0f7-829e-4a4a-9b8f-ba8b85baa86e.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,75f0b0f7-829e-4a4a-9b8f-ba8b85baa86e.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=75f0b0f7-829e-4a4a-9b8f-ba8b85baa86e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I was working on this little app I wrote a while ago and wanted to add some features
requiring (de)serialization. So, I took the original class and made it a DataContract
so I could use it with the DataContractSerializer. The class then looked more or less
like this:
</p>
        <pre>
          <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: black; FONT-SIZE: 11px">[DataContract] <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">public</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">class</span> MyClass
{ List&lt;Trip&gt; m_Items <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">new</span> List&lt;Item&gt;();
[DataMember] <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">public</span> IList&lt;Item&gt;
Items { get { <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">return</span> m_Items;
} } }</span>
        </pre>
        <p>
Serialization went fine, but when I tried to deserialize the same object, I got a
null reference exception. Of course you say, you should have added a method tied to
de OnDeserializing event, because the constructor of the object doesn't work and hence
the m_Items field is never initialized. The code I added to solve this looked
like this:
</p>
        <pre>
          <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: black; FONT-SIZE: 11px">[OnDeserializing] <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">protected</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">void</span> Init(StreamingContext
context) { m_Items <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px">=</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">new</span> List&lt;Item&gt;();
}</span>
        </pre>
        <p>
To my surprise I still got the same exception. I finally figured out that the problem
was the type of Items. It is was an IList&lt;&gt; instead of a List&lt;&gt;. To avoid
tying a class to a specific implementation of a list, I usually use an interface,
which is good practice in most cases... however, not when you want to do deserialization
:).
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=75f0b0f7-829e-4a4a-9b8f-ba8b85baa86e" />
      </body>
      <title>DataContractSerializer and interfaces</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,75f0b0f7-829e-4a4a-9b8f-ba8b85baa86e.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/09/02/DataContractSerializerAndInterfaces.aspx</link>
      <pubDate>Wed, 02 Sep 2009 21:11:22 GMT</pubDate>
      <description>&lt;p&gt;
I was working on this little app I wrote a while ago and wanted to add some features
requiring (de)serialization. So, I took the original class and made it a DataContract
so I could use it with the DataContractSerializer. The class then looked more or less
like this:
&lt;/p&gt;
&lt;pre&gt;&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: black; FONT-SIZE: 11px"&gt;[DataContract] &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;public&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;class&lt;/span&gt; MyClass
{ List&amp;lt;Trip&amp;gt; m_Items &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
[DataMember] &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;public&lt;/span&gt; IList&amp;lt;Item&amp;gt;
Items { get { &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;return&lt;/span&gt; m_Items;
} } }&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
Serialization went fine, but when I tried to deserialize the same object, I got a
null reference exception. Of course you say, you should have added a method tied to
de OnDeserializing event, because the constructor of the object doesn't work and hence
the m_Items field is never initialized. The code I added to solve this&amp;nbsp;looked
like this:
&lt;/p&gt;
&lt;pre&gt;&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: black; FONT-SIZE: 11px"&gt;[OnDeserializing] &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;protected&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;void&lt;/span&gt; Init(StreamingContext
context) { m_Items &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: red; FONT-SIZE: 11px"&gt;=&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;new&lt;/span&gt; List&amp;lt;Item&amp;gt;();
}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
To my surprise I still got the same exception. I finally figured out that the problem
was the type of Items. It is was an IList&amp;lt;&amp;gt; instead of a List&amp;lt;&amp;gt;. To avoid
tying a class to a specific implementation of a list, I usually use an interface,
which is good practice in most cases... however, not when you want to do deserialization
:).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=75f0b0f7-829e-4a4a-9b8f-ba8b85baa86e" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,75f0b0f7-829e-4a4a-9b8f-ba8b85baa86e.aspx</comments>
      <category>.NET</category>
      <category>Development</category>
      <category>English</category>
      <category>Services</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=e213994d-019b-4688-8b88-6b454802d802</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,e213994d-019b-4688-8b88-6b454802d802.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,e213994d-019b-4688-8b88-6b454802d802.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=e213994d-019b-4688-8b88-6b454802d802</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
At BataviaLabs we were debating coding guidelines the other day and came across this
one: do you use #if or the ConditionalAttribute to indicate to the compiler if a method
should be compiled. Let me elaborate...
</p>
        <p>
If you have a method you only want to compile in a debug scenario, you have the following
options:
</p>
        <p>
1) Use #if DEBUG as shown below
</p>
        <pre>
          <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: black; FONT-SIZE: 11px">
            <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">class</span> Program
{ <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">static</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">void</span> Main(<span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">string</span>[]
args) { <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">#if</span> DEBUG
SomeMethod(); <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">#endif</span> Console.WriteLine(<span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px">"End"</span>);
Console.ReadKey(); } <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">#if</span> DEBUG <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">internal</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">static</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">void</span> SomeMethod()
{ Console.WriteLine(<span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px">"SomeMethod"</span>);
} <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">#endif</span> }</span>
        </pre>
        <p>
2) Use the ConditionalAttribute as shown below
</p>
        <pre>
          <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: black; FONT-SIZE: 11px">
            <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">class</span> Program
{ <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">static</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">void</span> Main(<span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">string</span>[]
args) { SomeMethod(); Console.WriteLine(<span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px">"End"</span>);
Console.ReadKey(); } [Conditional(<span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px">"DEBUG"</span>)] <span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">internal</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">static</span><span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px">void</span> SomeMethod()
{ Console.WriteLine(<span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px">"SomeMethod"</span>);
} }</span>
        </pre>
        <p>
The difference between these two methods is enormous. The first sample is very explicit.
Any code you don't want to compile into the production build is placed between #if
DEBUG and #endif. If you try to call SomeMethod in a production build, the compiler
will give you a compile error. The ConditionalAttributeon the other hand doesn't require
you to remove the calls to SomeMethod. If a method is marked [Conditional], any calls
made to that method are removed from the build by the compiler. A proviso here is
that [Conditional] only works with methods that don't return a value (i.e. void).
</p>
        <p>
I much more prefer #if DEBUG, because it is explicit. I can't run into a situation
where from reading the code I'm thinking "SomeMethod is being executed", but it actually
isn't because the compiler removed the call. Comments anyone?
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=e213994d-019b-4688-8b88-6b454802d802" />
      </body>
      <title>#if vs. ConditionalAttribute</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,e213994d-019b-4688-8b88-6b454802d802.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/08/26/ifVsConditionalAttribute.aspx</link>
      <pubDate>Wed, 26 Aug 2009 14:59:00 GMT</pubDate>
      <description>&lt;p&gt;
At BataviaLabs we were debating coding guidelines the other day and came across this
one: do you use #if or the ConditionalAttribute to indicate to the compiler if a method
should be compiled. Let me elaborate...
&lt;/p&gt;
&lt;p&gt;
If you have a method you only want to compile in a debug scenario, you have the following
options:
&lt;/p&gt;
&lt;p&gt;
1) Use #if DEBUG as shown&amp;nbsp;below
&lt;/p&gt;
&lt;pre&gt;&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: black; FONT-SIZE: 11px"&gt;&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;class&lt;/span&gt; Program
{ &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;static&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;void&lt;/span&gt; Main(&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;string&lt;/span&gt;[]
args) { &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;#if&lt;/span&gt; DEBUG
SomeMethod(); &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;#endif&lt;/span&gt; Console.WriteLine(&lt;span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px"&gt;"End"&lt;/span&gt;);
Console.ReadKey(); } &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;#if&lt;/span&gt; DEBUG &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;internal&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;static&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;void&lt;/span&gt; SomeMethod()
{ Console.WriteLine(&lt;span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px"&gt;"SomeMethod"&lt;/span&gt;);
} &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;#endif&lt;/span&gt; }&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
2) Use the ConditionalAttribute as shown below
&lt;/p&gt;
&lt;pre&gt;&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: black; FONT-SIZE: 11px"&gt;&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;class&lt;/span&gt; Program
{ &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;static&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;void&lt;/span&gt; Main(&lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;string&lt;/span&gt;[]
args) { SomeMethod(); Console.WriteLine(&lt;span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px"&gt;"End"&lt;/span&gt;);
Console.ReadKey(); } [Conditional(&lt;span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px"&gt;"DEBUG"&lt;/span&gt;)] &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;internal&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;static&lt;/span&gt; &lt;span style="BACKGROUND-COLOR: transparent; FONT-FAMILY: Courier New; COLOR: blue; FONT-SIZE: 11px"&gt;void&lt;/span&gt; SomeMethod()
{ Console.WriteLine(&lt;span style="BACKGROUND-COLOR: #e4e4e4; FONT-FAMILY: Courier New; COLOR: #666666; FONT-SIZE: 11px"&gt;"SomeMethod"&lt;/span&gt;);
} }&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
The difference between these two methods is enormous. The first sample is very explicit.
Any code you don't want to compile into the production build is placed between #if
DEBUG and #endif. If you try to call SomeMethod in a production build, the compiler
will give you a compile error. The ConditionalAttributeon the other hand doesn't require
you to remove the calls to SomeMethod. If a method is marked [Conditional], any calls
made to that method are removed from the build by the compiler. A proviso here is
that [Conditional] only works with methods that don't return a value (i.e. void).
&lt;/p&gt;
&lt;p&gt;
I much more prefer #if DEBUG, because it is explicit.&amp;nbsp;I can't run into a situation
where from reading the code I'm thinking "SomeMethod is being executed", but it actually
isn't because the compiler removed the call. Comments anyone?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=e213994d-019b-4688-8b88-6b454802d802" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,e213994d-019b-4688-8b88-6b454802d802.aspx</comments>
      <category>.NET</category>
      <category>Development</category>
      <category>English</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=45c50599-78d0-423f-97c1-b9afff9caf6f</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,45c50599-78d0-423f-97c1-b9afff9caf6f.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,45c50599-78d0-423f-97c1-b9afff9caf6f.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=45c50599-78d0-423f-97c1-b9afff9caf6f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
When testing a UI, especially a web UI, it is imperative you do so at all resolutions
you expect your users to use. So, how do you size the browser to 1024x768 on a 1680x1050
screen? The answer is a little tool called <a href="http://www.brianapps.net/sizer.html">Sizer</a>.
It allows you to set a window to a prefixed size or you can drag the window size and
it will show the actual size as a tooltip.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=45c50599-78d0-423f-97c1-b9afff9caf6f" />
      </body>
      <title>Must have tool: Sizer</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,45c50599-78d0-423f-97c1-b9afff9caf6f.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/05/02/MustHaveToolSizer.aspx</link>
      <pubDate>Sat, 02 May 2009 21:48:19 GMT</pubDate>
      <description>&lt;p&gt;
When testing a UI, especially a web UI, it is imperative you do so at all resolutions
you expect your users to use. So, how do you size the browser to 1024x768 on a 1680x1050
screen? The answer is a little tool called &lt;a href="http://www.brianapps.net/sizer.html"&gt;Sizer&lt;/a&gt;.
It allows you to set a window to a prefixed size or you can drag the window size and
it will show the actual size as a tooltip.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=45c50599-78d0-423f-97c1-b9afff9caf6f" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,45c50599-78d0-423f-97c1-b9afff9caf6f.aspx</comments>
      <category>Development</category>
      <category>English</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=52b560cc-065e-47f8-ab23-55a91d99bf79</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,52b560cc-065e-47f8-ab23-55a91d99bf79.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,52b560cc-065e-47f8-ab23-55a91d99bf79.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=52b560cc-065e-47f8-ab23-55a91d99bf79</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I keep forgetting how to force the transaction log in SQL Server to shrink, so I'm
posting here primarily so I know where to find the how to :). Often the log does not
shrink when you try to shrink from SQL Managent Studio. The solution, before you shrink
the database do:
</p>
        <p>
          <font face="Courier New">
            <span style="COLOR: blue">BACKUP </span>
            <span style="COLOR: magenta">LOG </span>
            <span style="COLOR: gray">&lt;</span>
            <span style="COLOR: black">DatabaseName</span>
            <span style="COLOR: gray">&gt; </span>
            <span style="COLOR: blue">WITH </span>
          </font>
          <span style="COLOR: black">
            <font face="Courier New">TRUNCATE_ONLY</font>
            <br />
          </span>
        </p>
        <p>
          <span style="COLOR: black">Thanks to Pinal Dave for this one (see his post <a href="http://blog.sqlauthority.com/2006/12/30/sql-server-shrinking-truncate-log-file-log-full/">SQL
SERVER - Shrinking Truncate Log File - Log Full</a>)
</span>
        </p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=52b560cc-065e-47f8-ab23-55a91d99bf79" />
      </body>
      <title>The never shrinking transaction log</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,52b560cc-065e-47f8-ab23-55a91d99bf79.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/04/16/TheNeverShrinkingTransactionLog.aspx</link>
      <pubDate>Thu, 16 Apr 2009 12:39:14 GMT</pubDate>
      <description>&lt;p&gt;
I keep forgetting how to force the transaction log in SQL Server to shrink, so I'm
posting here primarily so I know where to find the how to :). Often the log does not
shrink when you try to shrink from SQL Managent Studio. The solution, before you shrink
the database do:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&lt;span style="COLOR: blue"&gt;BACKUP &lt;/span&gt;&lt;span style="COLOR: magenta"&gt;LOG &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: black"&gt;DatabaseName&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;WITH &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: black"&gt;&lt;font face="Courier New"&gt;TRUNCATE_ONLY&lt;/font&gt;
&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="COLOR: black"&gt;Thanks to Pinal Dave for this one (see his post &lt;a href="http://blog.sqlauthority.com/2006/12/30/sql-server-shrinking-truncate-log-file-log-full/"&gt;SQL
SERVER - Shrinking Truncate Log File - Log Full&lt;/a&gt;)
&lt;/p&gt;
&gt;&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=52b560cc-065e-47f8-ab23-55a91d99bf79" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,52b560cc-065e-47f8-ab23-55a91d99bf79.aspx</comments>
      <category>English</category>
      <category>SQL Server</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=f75ad0b9-3734-4119-a167-2e8cf8e66ad9</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,f75ad0b9-3734-4119-a167-2e8cf8e66ad9.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,f75ad0b9-3734-4119-a167-2e8cf8e66ad9.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=f75ad0b9-3734-4119-a167-2e8cf8e66ad9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We have an ASP.NET application that we normally run under Forms Authentication using
the ASP.NET Membership API. For a particular client we changed this to using Windows
Authentication instead. On the production environment, we were running into the following
exception:
</p>
        <p>
          <em>
            <font color="#ff0000">A network-related or instance-specific error occurred while
establishing a connection to SQL Server. The server was not found or was not accessible.
Verify that the instance name is correct and that SQL Server is configured to allow
remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating
Server/Instance Specified)</font>
          </em>
        </p>
        <p>
We checked all the connection strings the app uses... all good. Finally, we figured
out what was wrong. We had removed the Membership section from web.config so it was
going back to the default in machine.config. That setting uses the LocalSqlServer
connection string, which we don't use. However, in the default machine.config, this
points to the App_Data folder using SQL Server Express. In most environments, this
wouldn't be an issue immediately, because SQL Server Express would just create the 
aspnet database and use that. However, in a hardened environment SQL Server Express
is either not there (our case) or has no rights to create the App_Data folder and/or
place create a new database. ASP.NET doesn't know this... it just can't access the
SQL Server instance it is looking for, hence the above exception.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=f75ad0b9-3734-4119-a167-2e8cf8e66ad9" />
      </body>
      <title>SQL Server error with ASP.NET Membership pointing to the local server</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,f75ad0b9-3734-4119-a167-2e8cf8e66ad9.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/04/12/SQLServerErrorWithASPNETMembershipPointingToTheLocalServer.aspx</link>
      <pubDate>Sun, 12 Apr 2009 15:09:23 GMT</pubDate>
      <description>&lt;p&gt;
We have an ASP.NET application that we normally run under Forms Authentication using
the ASP.NET Membership API. For a particular client we changed this to using Windows
Authentication instead. On the production environment, we were running into the following
exception:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;font color=#ff0000&gt;A network-related or instance-specific error occurred while
establishing a connection to SQL Server. The server was not found or was not accessible.
Verify that the instance name is correct and that SQL Server is configured to allow
remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating
Server/Instance Specified)&lt;/font&gt;&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
We checked all the connection strings the app uses... all good. Finally, we figured
out what was wrong. We had removed the Membership section from web.config so it was
going back to the default in machine.config. That setting uses the LocalSqlServer
connection string, which we don't use. However, in the default machine.config, this
points to the App_Data folder using SQL Server Express. In most environments, this
wouldn't be an issue immediately, because SQL Server Express would just create the&amp;nbsp;
aspnet database and use that. However, in a hardened environment SQL Server Express
is either not there (our case) or has no rights to create the App_Data folder and/or
place create a new database. ASP.NET doesn't know this... it just can't access the
SQL Server instance it is looking for, hence the above exception.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=f75ad0b9-3734-4119-a167-2e8cf8e66ad9" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,f75ad0b9-3734-4119-a167-2e8cf8e66ad9.aspx</comments>
      <category>ASP.NET</category>
      <category>English</category>
      <category>SQL Server</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=2f7ce602-cb4b-43be-a4a3-d9224f5e1e59</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,2f7ce602-cb4b-43be-a4a3-d9224f5e1e59.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,2f7ce602-cb4b-43be-a4a3-d9224f5e1e59.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=2f7ce602-cb4b-43be-a4a3-d9224f5e1e59</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm delighted to be speaking again at VSLive in June. This time at the Venetian hotel
in Las Vegas. I'll being doing two sessions on Monday, June 8:
</p>
        <ul>
          <li>
Understanding Transactions in WCF, which deals with why, how, and when to use transactions
in WCF.</li>
          <li>
Advanced Access Control with WCF, which deals with claims based authorization and
the Geneva Framework.</li>
        </ul>
        <p>
Over lunch I will be available for 1-on-1 Q&amp;A, but if you run into me at
other times outside my sessions I'm open for questions too.
</p>
        <p>
Checkout the <a href="http://vslive.com/2009/lasvegas/agenda.aspx">full conference
agenda</a> for all the great sessions and speakers at VSLive, Las Vegas. I can really
recommend going there, because the sessions are great and the speakers very accessible.
I also think the Venetian will be a great venue (I have never stayed at the Venetian,
but I have been inside and it is definitly something to see).
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=2f7ce602-cb4b-43be-a4a3-d9224f5e1e59" />
      </body>
      <title>Speaking at VSLive, Las Vegas, June 8</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,2f7ce602-cb4b-43be-a4a3-d9224f5e1e59.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/04/02/SpeakingAtVSLiveLasVegasJune8.aspx</link>
      <pubDate>Thu, 02 Apr 2009 21:44:20 GMT</pubDate>
      <description>&lt;p&gt;
I'm delighted to be speaking again at VSLive in June. This time at the Venetian hotel
in Las Vegas. I'll being doing two sessions on Monday, June 8:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Understanding Transactions in WCF, which deals with why, how, and when to use transactions
in WCF.&lt;/li&gt;
&lt;li&gt;
Advanced Access Control with WCF, which deals with claims based authorization and
the Geneva Framework.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Over lunch I will be available for 1-on-1 Q&amp;amp;A, but&amp;nbsp;if you run into me at
other times outside my sessions I'm open for questions too.
&lt;/p&gt;
&lt;p&gt;
Checkout the &lt;a href="http://vslive.com/2009/lasvegas/agenda.aspx"&gt;full conference
agenda&lt;/a&gt; for all the great sessions and speakers at VSLive, Las Vegas. I can really
recommend going there, because the sessions are great and the speakers very accessible.
I also think the Venetian will be a great venue (I have never stayed at the Venetian,
but I have been inside and it is definitly something to see).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=2f7ce602-cb4b-43be-a4a3-d9224f5e1e59" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,2f7ce602-cb4b-43be-a4a3-d9224f5e1e59.aspx</comments>
      <category>English</category>
      <category>Events</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=8a6f6e70-576c-485d-bbd9-b1e9494b06cc</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,8a6f6e70-576c-485d-bbd9-b1e9494b06cc.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,8a6f6e70-576c-485d-bbd9-b1e9494b06cc.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=8a6f6e70-576c-485d-bbd9-b1e9494b06cc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Thanks to Microsoft for my new MVP Award. It is nice to get the recognition. A thank
you is in order to the people that enable me to do the work that got me the award,
starting with my wife Annette and my children Jarod and B'Elanna. They have
a workaholic for a husband/dad, but don't complain about it (much). Others that receive
a thank you are my partners at BataviaLabs who give me the freedom to write and
speak at conferences, our team at BataviaLabs that help me code all my wild ideas,
and the people that publish my articles and invite me to speak at their conference. 
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=8a6f6e70-576c-485d-bbd9-b1e9494b06cc" />
      </body>
      <title>7x MVP</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,8a6f6e70-576c-485d-bbd9-b1e9494b06cc.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/04/01/7xMVP.aspx</link>
      <pubDate>Wed, 01 Apr 2009 14:45:09 GMT</pubDate>
      <description>&lt;p&gt;
Thanks to Microsoft for my new MVP Award. It is nice to get the recognition. A thank
you is in order to the people that enable me to do the work that got me the award,
starting with my wife&amp;nbsp;Annette&amp;nbsp;and my children Jarod and B'Elanna. They have
a workaholic for a husband/dad, but don't complain about it (much). Others that receive
a thank you are&amp;nbsp;my partners at BataviaLabs who give me the freedom to write and
speak at conferences, our team at BataviaLabs that help me code all my wild ideas,
and the people that publish my articles and invite me to speak at their conference. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=8a6f6e70-576c-485d-bbd9-b1e9494b06cc" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,8a6f6e70-576c-485d-bbd9-b1e9494b06cc.aspx</comments>
      <category>English</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=c3e7b69c-d15b-449b-90bb-36697796fba3</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,c3e7b69c-d15b-449b-90bb-36697796fba3.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,c3e7b69c-d15b-449b-90bb-36697796fba3.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=c3e7b69c-d15b-449b-90bb-36697796fba3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I read <a href="http://blogs.msdn.com/stevemar/archive/2009/03/24/windows-azure-and-windows-server-licensing-model.aspx">this
post from Steven Martin</a> at Microsoft and frankly I'm disappointed. Microsoft is
not the only company building cloud computing services, but they have a clear advantage
over most of the providers: they own the operating system. As such, a unique selling
point would definitly be that they can provide you with cloud services, but also enable
you to run your applications in your own data center <strong>without modifications</strong>.
If I build an application for the Windows platform, I want to build it once and be
able to run in on any server infrastructure. As it looks now, this is not possible.
Once built for the cloud, it must remain in the cloud unless you refactor the application
for use in your own environment. I really hope Microsoft sees that this is a mistake
and that it will actually gain them clients if they allow this. There is another factor
here and that's trust. I'd like to have a backup scenario in case Microsoft fails
to deliver. With the Azure platform as is, there is no backup scenario. You either
go for it full-blown, or you don't. It is my belief that many people will decide not
to go with Azure in the first place because of this. In fact, I am now much more reluctant
to tell my clients about Azure as an option.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=c3e7b69c-d15b-449b-90bb-36697796fba3" />
      </body>
      <title>Windows Azure licensing disappointment</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,c3e7b69c-d15b-449b-90bb-36697796fba3.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/03/26/WindowsAzureLicensingDisappointment.aspx</link>
      <pubDate>Thu, 26 Mar 2009 14:52:29 GMT</pubDate>
      <description>&lt;p&gt;
I read &lt;a href="http://blogs.msdn.com/stevemar/archive/2009/03/24/windows-azure-and-windows-server-licensing-model.aspx"&gt;this
post from Steven Martin&lt;/a&gt; at Microsoft and frankly I'm disappointed. Microsoft is
not the only company building cloud computing services, but they have a clear advantage
over most of the providers: they own the operating system. As such, a unique selling
point would definitly be that they can provide you with cloud services, but also enable
you to run your applications in your own data center &lt;strong&gt;without modifications&lt;/strong&gt;.
If I build an application for the Windows platform, I want to build it once and be
able to run in on any server infrastructure. As it looks now, this is not possible.
Once built for the cloud, it must remain in the cloud unless you refactor the application
for use in your own environment. I really hope Microsoft sees that this is a mistake
and that it will actually gain them clients if they allow this. There is another factor
here and that's trust. I'd like to have a backup scenario in case Microsoft fails
to deliver. With the Azure platform as is, there is no backup scenario. You either
go for it full-blown, or you don't. It is my belief that many people will decide not
to go with Azure in the first place because of this. In fact, I am now much more reluctant
to tell my clients about Azure as an option.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=c3e7b69c-d15b-449b-90bb-36697796fba3" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,c3e7b69c-d15b-449b-90bb-36697796fba3.aspx</comments>
      <category>Development</category>
      <category>English</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=076ef433-1a6b-4f85-b21a-4daff33b7a39</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,076ef433-1a6b-4f85-b21a-4daff33b7a39.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,076ef433-1a6b-4f85-b21a-4daff33b7a39.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=076ef433-1a6b-4f85-b21a-4daff33b7a39</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recently I encountered an exception related to System.Security.Permissions.FileIOPermission
while trying to send email from ASP.NET (dasBlog actually). This has <u>nothing</u> to
do with rights set on folders! It is a trust (code access permission) issue, and it
will happen if your application is running under Medium Trust. Elevating the trust
level will definitly help. From what I've read, defaulting to the system defined SMTP
settings (i.e. removing any SMTP settings form web.config) will also work, but I have
not tried this yet.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=076ef433-1a6b-4f85-b21a-4daff33b7a39" />
      </body>
      <title>FileIOPermission Error When Sending Email From ASP.NET </title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,076ef433-1a6b-4f85-b21a-4daff33b7a39.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/03/05/FileIOPermissionErrorWhenSendingEmailFromASPNET.aspx</link>
      <pubDate>Thu, 05 Mar 2009 15:38:27 GMT</pubDate>
      <description>&lt;p&gt;
Recently I encountered an exception related to&amp;nbsp;System.Security.Permissions.FileIOPermission
while trying to send email from ASP.NET (dasBlog actually). This has &lt;u&gt;nothing&lt;/u&gt; to
do with rights set on folders! It is a trust (code access permission) issue, and it
will happen if your application is running under Medium Trust. Elevating the trust
level will definitly help. From what I've read, defaulting to the system defined SMTP
settings (i.e. removing any SMTP settings form web.config) will also work, but I have
not tried this yet.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=076ef433-1a6b-4f85-b21a-4daff33b7a39" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,076ef433-1a6b-4f85-b21a-4daff33b7a39.aspx</comments>
      <category>ASP.NET</category>
      <category>English</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=4ec64bdd-85ac-49e2-b744-ee1b7ec7606f</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,4ec64bdd-85ac-49e2-b744-ee1b7ec7606f.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,4ec64bdd-85ac-49e2-b744-ee1b7ec7606f.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=4ec64bdd-85ac-49e2-b744-ee1b7ec7606f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Thank you for all who attended my sessions in San Francisco. Below are the slides
and samples for my sessions.
</p>
        <p>
          <strong>VTH4 - Understanding Transactions in WCF</strong>
          <a href="http://michiel.vanotegem.nl/content/binary/VTH4_Slides.zip">Slides
(561.73 KB)</a> | <a href="http://michiel.vanotegem.nl/content/binary/WCFTransactions.zip">Samples
(540.1 KB)</a></p>
        <p>
          <strong>VTH16 - Supporting POX/REST with WCF</strong>
          <a href="http://michiel.vanotegem.nl/content/binary/VTH16_Slides.zip">Slides
(369.58 KB)</a> | <a href="http://michiel.vanotegem.nl/content/binary/WCFPoxRest.zip">Samples
(302.82 KB)</a></p>
        <p>
          <strong>VTH25 - Simplify WebPart (and Control) Development with WebPart Skinning</strong>
          <a href="http://michiel.vanotegem.nl/content/binary/VTH25_Slides.zip">Slides
(359.85 KB)</a> | <a href="http://michiel.vanotegem.nl/content/binary/Skinning.zip">Samples
(447.66 KB)</a></p>
        <p>
The VTH25 samples include the full installer. However, be sure to change the <em>uploadskinfeature.bat</em> to
point to the correct server. You can read more about the VirtualPathProvider
I mentioned in VTH25 session <a href="http://michiel.vanotegem.nl/2008/08/30/ServingPartOfASiteFromEmbeddedResources.aspx">here</a>.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=4ec64bdd-85ac-49e2-b744-ee1b7ec7606f" />
      </body>
      <title>VSLive! 2009 San Francisco slides and samples</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,4ec64bdd-85ac-49e2-b744-ee1b7ec7606f.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/03/02/VSLive2009SanFranciscoSlidesAndSamples.aspx</link>
      <pubDate>Mon, 02 Mar 2009 22:25:30 GMT</pubDate>
      <description>&lt;p&gt;
Thank you for all who attended my sessions in San Francisco. Below are the slides
and samples for my sessions.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;VTH4 - Understanding Transactions in WCF&lt;/strong&gt; &lt;a href="http://michiel.vanotegem.nl/content/binary/VTH4_Slides.zip"&gt;Slides
(561.73 KB)&lt;/a&gt; | &lt;a href="http://michiel.vanotegem.nl/content/binary/WCFTransactions.zip"&gt;Samples
(540.1 KB)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;VTH16 - Supporting POX/REST with WCF&lt;/strong&gt; &lt;a href="http://michiel.vanotegem.nl/content/binary/VTH16_Slides.zip"&gt;Slides
(369.58 KB)&lt;/a&gt; | &lt;a href="http://michiel.vanotegem.nl/content/binary/WCFPoxRest.zip"&gt;Samples
(302.82 KB)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;VTH25 - Simplify WebPart (and Control) Development with WebPart Skinning&lt;/strong&gt; &lt;a href="http://michiel.vanotegem.nl/content/binary/VTH25_Slides.zip"&gt;Slides
(359.85 KB)&lt;/a&gt; | &lt;a href="http://michiel.vanotegem.nl/content/binary/Skinning.zip"&gt;Samples
(447.66 KB)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The VTH25 samples include the full installer. However, be sure to change the &lt;em&gt;uploadskinfeature.bat&lt;/em&gt; to
point to&amp;nbsp;the correct server.&amp;nbsp;You can read more about the VirtualPathProvider
I mentioned in VTH25 session &lt;a href="http://michiel.vanotegem.nl/2008/08/30/ServingPartOfASiteFromEmbeddedResources.aspx"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=4ec64bdd-85ac-49e2-b744-ee1b7ec7606f" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,4ec64bdd-85ac-49e2-b744-ee1b7ec7606f.aspx</comments>
      <category>.NET</category>
      <category>ASP.NET</category>
      <category>English</category>
      <category>Events</category>
      <category>SharePoint</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=8524414f-7de1-48d5-894a-25d62393c665</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,8524414f-7de1-48d5-894a-25d62393c665.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,8524414f-7de1-48d5-894a-25d62393c665.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=8524414f-7de1-48d5-894a-25d62393c665</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The wonderful folks at <a href="http://www.vslive.com">VSLive!</a> have invited
me again to do three sessions at their <a href="http://vslive.com/2009/sf/default.aspx?code=VS09SF">San
Francisco</a> event from February 23 to February 27, 2009. These are the sessions
I'll do (all on Thursday 26):
</p>
        <ul>
          <li>
Understanding Transactions in WCF</li>
          <li>
Supporting POX/REST with WCF</li>
          <li>
Simplify WebPart (and Control) Development with WepPart Skinning</li>
        </ul>
        <p>
The first two are obviously about WCF. The last talk is primarily about SharePoint,
but the discussed techniques will work with ASP.NET WebParts and WebControls as well.
</p>
        <p>
I really like VSLive! because they have some great content and top tier speakers. The
speakers (myself included of course) are also very accessible, because the
event is not as huge as some of the other conferences these days. So if you intend
to go to a conference this year, VSLive! is going to be worth your money.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=8524414f-7de1-48d5-894a-25d62393c665" />
      </body>
      <title>Speaking at VSLive San Francisco, February 23-27</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,8524414f-7de1-48d5-894a-25d62393c665.aspx</guid>
      <link>http://michiel.vanotegem.nl/2009/01/07/SpeakingAtVSLiveSanFranciscoFebruary2327.aspx</link>
      <pubDate>Wed, 07 Jan 2009 21:52:13 GMT</pubDate>
      <description>&lt;p&gt;
The&amp;nbsp;wonderful folks at &lt;a href="http://www.vslive.com"&gt;VSLive!&lt;/a&gt; have invited
me again to do three sessions at their&amp;nbsp;&lt;a href="http://vslive.com/2009/sf/default.aspx?code=VS09SF"&gt;San
Francisco&lt;/a&gt;&amp;nbsp;event from February 23 to February 27, 2009. These are the sessions
I'll do (all on Thursday 26):
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Understanding Transactions in WCF&lt;/li&gt;
&lt;li&gt;
Supporting POX/REST with WCF&lt;/li&gt;
&lt;li&gt;
Simplify WebPart (and Control) Development with WepPart Skinning&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The first two are obviously about WCF. The last talk is primarily about SharePoint,
but the discussed techniques will work with ASP.NET WebParts and WebControls as well.
&lt;/p&gt;
&lt;p&gt;
I really like VSLive! because they&amp;nbsp;have some great content and top tier speakers.&amp;nbsp;The
speakers (myself included of course)&amp;nbsp;are also&amp;nbsp;very accessible, because the
event is not as huge as some of the other conferences these days. So if you intend
to go to a conference this year, VSLive! is going to be worth your money.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=8524414f-7de1-48d5-894a-25d62393c665" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,8524414f-7de1-48d5-894a-25d62393c665.aspx</comments>
      <category>.NET</category>
      <category>ASP.NET</category>
      <category>English</category>
      <category>Events</category>
      <category>SharePoint</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=fb1b75d3-3d47-48ac-8ef0-1338d4efc11c</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,fb1b75d3-3d47-48ac-8ef0-1338d4efc11c.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,fb1b75d3-3d47-48ac-8ef0-1338d4efc11c.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=fb1b75d3-3d47-48ac-8ef0-1338d4efc11c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Have you ever wondered if/when a transaction in WCF upgrades to the DTC? There two
simple ways to check this:
</p>
        <ol>
          <li>
Open Performance Monitor and add a new counter. Get the counter Active Transactions
from the Distributed Transaction Coordinator section.</li>
          <li>
Open Component Services and go to My Computer in COM+. There is a folder for Distributed
Transaction Coordinator, through which you can view the DTC statistics.</li>
        </ol>
        <p>
In both cases, you'll see the active transactions jump from 0 to 1 when a transaction
upgrades to DTC. This happens when you cross a service boundary. If you just use a
transaction within the service, WCF will stick to the Lightweight Transaction Manager
as long as you stay within you AppDomain or access a single database (SQL Server 2005
and up).
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=fb1b75d3-3d47-48ac-8ef0-1338d4efc11c" />
      </body>
      <title>WCF Transactions: Lightweight or DTC?</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,fb1b75d3-3d47-48ac-8ef0-1338d4efc11c.aspx</guid>
      <link>http://michiel.vanotegem.nl/2008/12/22/WCFTransactionsLightweightOrDTC.aspx</link>
      <pubDate>Mon, 22 Dec 2008 10:16:52 GMT</pubDate>
      <description>&lt;p&gt;
Have you ever wondered if/when a transaction in WCF upgrades to the DTC? There two
simple ways to check this:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Open Performance Monitor and add a new counter. Get the counter Active Transactions
from the Distributed Transaction Coordinator section.&lt;/li&gt;
&lt;li&gt;
Open Component Services and go to My Computer in COM+. There is a folder for Distributed
Transaction Coordinator, through which you can view the DTC statistics.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
In both cases, you'll see the active transactions jump from 0 to 1 when a transaction
upgrades to DTC. This happens when you cross a service boundary. If you just use a
transaction within the service, WCF will stick to the Lightweight Transaction Manager
as long as you stay within you AppDomain or access a single database (SQL Server 2005
and up).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=fb1b75d3-3d47-48ac-8ef0-1338d4efc11c" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,fb1b75d3-3d47-48ac-8ef0-1338d4efc11c.aspx</comments>
      <category>English</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=52a4a823-5273-45e4-a6a1-049066fff92d</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,52a4a823-5273-45e4-a6a1-049066fff92d.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,52a4a823-5273-45e4-a6a1-049066fff92d.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=52a4a823-5273-45e4-a6a1-049066fff92d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For those of you that attended my sessions in Dallas, here are the demo's for
</p>
        <ul>
          <li>
            <a href="http://michiel.vanotegem.nl/content/binary/DTH11%20Samples.zip">POX/REST
Strategies with WCF (194.22 KB)</a>
          </li>
          <li>
            <a href="http://michiel.vanotegem.nl/content/binary/DTH18%20Samples.zip">Understanding
Transactions in WCF (396.18 KB)</a>
          </li>
        </ul>
        <p>
If you attended the latter, you'll remember that I wrecked my prepared demo (note
to self: never change configs just before a session). I finally figured out what was
wrong. I changed some configuration on the server side and I thought I did the same
on the client. Apparently I did not, because when I updated the service reference
on the client it worked.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=52a4a823-5273-45e4-a6a1-049066fff92d" />
      </body>
      <title>VSLive Dallas Demo's</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,52a4a823-5273-45e4-a6a1-049066fff92d.aspx</guid>
      <link>http://michiel.vanotegem.nl/2008/12/22/VSLiveDallasDemos.aspx</link>
      <pubDate>Mon, 22 Dec 2008 10:11:49 GMT</pubDate>
      <description>&lt;p&gt;
For those of you that attended my sessions in Dallas, here are the demo's for
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://michiel.vanotegem.nl/content/binary/DTH11%20Samples.zip"&gt;POX/REST
Strategies with WCF (194.22 KB)&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://michiel.vanotegem.nl/content/binary/DTH18%20Samples.zip"&gt;Understanding
Transactions in WCF (396.18 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If you attended the latter, you'll remember that I wrecked my prepared demo (note
to self: never change configs just before a session). I finally figured out what was
wrong. I changed some configuration on the server side and I thought I did the same
on the client. Apparently I did not, because when I updated the service reference
on the client it worked.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=52a4a823-5273-45e4-a6a1-049066fff92d" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,52a4a823-5273-45e4-a6a1-049066fff92d.aspx</comments>
      <category>English</category>
      <category>Events</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=8f249e46-fc8c-4788-b995-2f10ab9dbac0</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,8f249e46-fc8c-4788-b995-2f10ab9dbac0.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,8f249e46-fc8c-4788-b995-2f10ab9dbac0.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=8f249e46-fc8c-4788-b995-2f10ab9dbac0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
At a session about ASP.NET DynamicData at VSLive in Dallas, one of the attendees asked
me about my thoughts of DynamicData becoming a part of ASP.NET MVC. I commented that
currently DynamicData is very much based on the current ASP.NET paradigm of pages
and controls, whereas ASP.NET MVC is not. ASP.NET MVC presents a new way of thinking
to the ASP.NET world and I find it hard to believe that millions of developers will
jump on the ASP.NET MVC bandwagon immediately after its release (let's face it,
it hasn't even been released yet) and leave their old coding styles behind. You
need to learn to think differently first. Also, if ASP.NET MVC becomes the primary
ASP.NET paradigm, there is a whole lot of code that is still using ASP.NET the way
most of us do at the moment. That said, ASP.NET MVC is <u>very</u> interesting.
</p>
        <p>
Ok, so back to the original question. If you look at Scott Guthrie's post about the <a href="http://weblogs.asp.net/scottgu/archive/2008/12/19/asp-net-mvc-design-gallery-and-upcoming-view-improvements-with-the-asp-net-mvc-release-candidate.aspx">ASP.NET
MVC Release Candidate</a>, you'll see that there is scaffolding support on based on
the model, instead of table based scaffolding using in ASP.NET DynamicData. The
model based scaffolding enables you to create different views of the model in no time.This
is very cool, because it provides you with way more control over what is happening
than in DynamicData. And because it is based on the model, you're not tied to database
objects, but rather to business objects. How you persist those is up to you.
</p>
        <p>
I still think ASP.NET DynamicData and ASP.NET MVC are going to live side-by-side for
quite a while, and that they will use concepts that were created for one or the other.
The main reason for this belief is based on my earlier comment: I think ASP.NET MVC
and ASP.NET "Classic" will run side-by-side for a loooooong time. I do feel that ASP.NET
MVC ultimately provides us with more flexibility and will at some point become the
more dominant paradigm.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=8f249e46-fc8c-4788-b995-2f10ab9dbac0" />
      </body>
      <title>Thoughts on ASP.NET DynamicData vs. ASP.NET MVC</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,8f249e46-fc8c-4788-b995-2f10ab9dbac0.aspx</guid>
      <link>http://michiel.vanotegem.nl/2008/12/19/ThoughtsOnASPNETDynamicDataVsASPNETMVC.aspx</link>
      <pubDate>Fri, 19 Dec 2008 09:43:14 GMT</pubDate>
      <description>&lt;p&gt;
At a session about ASP.NET DynamicData at VSLive in Dallas, one of the attendees asked
me about my thoughts of DynamicData becoming a part of ASP.NET MVC. I commented that
currently DynamicData is very much based on the current ASP.NET paradigm of pages
and controls, whereas ASP.NET MVC is not. ASP.NET MVC presents a new way of thinking
to the ASP.NET world and I find it hard to believe that millions of developers will
jump on the ASP.NET MVC bandwagon immediately after&amp;nbsp;its release (let's face it,
it hasn't even been released yet)&amp;nbsp;and leave their old coding styles behind. You
need to learn to think differently first. Also, if ASP.NET MVC becomes the primary
ASP.NET paradigm, there is a whole lot of code that is still using ASP.NET the way
most of us do at the moment. That said, ASP.NET MVC is &lt;u&gt;very&lt;/u&gt; interesting.
&lt;/p&gt;
&lt;p&gt;
Ok, so back to the original question. If you look at Scott Guthrie's post about the &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/12/19/asp-net-mvc-design-gallery-and-upcoming-view-improvements-with-the-asp-net-mvc-release-candidate.aspx"&gt;ASP.NET
MVC Release Candidate&lt;/a&gt;, you'll see that there is scaffolding support on based on
the model, instead of table based scaffolding using in&amp;nbsp;ASP.NET DynamicData. The
model based scaffolding enables you to create different views of the model in no time.This
is very cool, because it provides you with way more control over what is happening
than in DynamicData. And because it is based on the model, you're not tied to database
objects, but rather to business objects. How you persist those is up to you.
&lt;/p&gt;
&lt;p&gt;
I still think ASP.NET DynamicData and ASP.NET MVC are going to live side-by-side for
quite a while, and that they will use concepts that were created for one or the other.
The main reason for this belief is based on my earlier comment: I think ASP.NET MVC
and ASP.NET "Classic" will run side-by-side for a loooooong time. I do feel that ASP.NET
MVC ultimately provides us with more flexibility and will at some point become the
more dominant paradigm.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=8f249e46-fc8c-4788-b995-2f10ab9dbac0" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,8f249e46-fc8c-4788-b995-2f10ab9dbac0.aspx</comments>
      <category>ASP.NET</category>
      <category>English</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=770ec6f5-70b2-43c5-ae33-f87f4cb2c99c</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,770ec6f5-70b2-43c5-ae33-f87f4cb2c99c.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,770ec6f5-70b2-43c5-ae33-f87f4cb2c99c.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=770ec6f5-70b2-43c5-ae33-f87f4cb2c99c</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
At VSLive in Dallas last week I promised to follow up with a post about securing an
ASP.NET Dynamic Data application. Your first concern is not exposing all the
tables, so although it demo's well, <u>never</u> set ScaffoldAllTables to
true. That however, does still not solve how you can provide read-only access
to certain users, while providing edit access to others. The most elegant
way to do that is at the Data Model level, using a custom security attribute. There's
a great sample on how to do that on the <a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=14473">Dynamic
Data Samples on Codeplex</a>. The specific sample you want is <a href="javascript:__doPostBack('ctl00$ctl00$MasterContent$Content$ReleasePanelOrderingContainer$ReleaseFilesCtrl$FileList$ctl07$FileNameLink','')">Secure
Dynamic Data</a>.
</p>
        <p>
If you don't want to spend the time to understand how security at the Data Model works,
you can also just use ASP.NET Roles to secure specific parts of your site. Since securing
folders/files that way has been around since ASP.NET 1.x, that should be easy enough
:). There is a gotcha though: you cannot secure dynamic folders. In other words, a
Dynamic Data path <font face="Courier New">/SomeTable/List.aspx</font> is not securable,
because SomeTable is not an actual folder. With three simple steps you can get around
this.
</p>
        <p>
Step 1: Create a folder corresponding to a specific role, for example "Readers".
</p>
        <p>
Step 2: Create a web.config in that folder limiting access to the role(s) you want
to give access.
</p>
        <p>
Step 3: In globas.asax, route the tables and actions that apply to the specific role
to that folder, like this:
</p>
        <p>
          <font face="Courier New">routes.Add(new DynamicDataRoute("<strong>Readers</strong>/{table}/{action}.aspx")<br />
{<br />
    Constraints = new RouteValueDictionary(<br />
        new<br />
        {<br />
            action = "List|Details",<br />
            table = "EvaluationSubjects|Reports",<br />
        }),<br />
        Model = model<br /></font>
          <font face="Courier New">});</font>
        </p>
        <p>
 
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=770ec6f5-70b2-43c5-ae33-f87f4cb2c99c" />
      </body>
      <title>Securing ASP.NET Dynamic Data</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,770ec6f5-70b2-43c5-ae33-f87f4cb2c99c.aspx</guid>
      <link>http://michiel.vanotegem.nl/2008/12/14/SecuringASPNETDynamicData.aspx</link>
      <pubDate>Sun, 14 Dec 2008 21:39:07 GMT</pubDate>
      <description>&lt;p&gt;
At VSLive in Dallas last week I promised to follow up with a post about securing an
ASP.NET Dynamic Data application.&amp;nbsp;Your first concern is not exposing all the
tables, so&amp;nbsp;although it demo's well,&amp;nbsp;&lt;u&gt;never&lt;/u&gt; set ScaffoldAllTables to
true.&amp;nbsp;That however, does still not solve how you&amp;nbsp;can provide read-only access
to&amp;nbsp;certain users, while providing edit access to others.&amp;nbsp;The most elegant
way to do that is at the Data Model level, using a custom security attribute. There's
a great sample on how to do that on the &lt;a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=14473"&gt;Dynamic
Data Samples on Codeplex&lt;/a&gt;. The specific sample you want is &lt;a href="javascript:__doPostBack('ctl00$ctl00$MasterContent$Content$ReleasePanelOrderingContainer$ReleaseFilesCtrl$FileList$ctl07$FileNameLink','')"&gt;Secure
Dynamic Data&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
If you don't want to spend the time to understand how security at the Data Model works,
you can also just use ASP.NET Roles to secure specific parts of your site. Since securing
folders/files that way has been around since ASP.NET 1.x, that should be easy enough
:). There is a gotcha though: you cannot secure dynamic folders. In other words, a
Dynamic Data path &lt;font face="Courier New"&gt;/SomeTable/List.aspx&lt;/font&gt; is not securable,
because SomeTable is not an actual folder. With three simple steps you can get around
this.
&lt;/p&gt;
&lt;p&gt;
Step 1: Create a folder corresponding to a specific role, for example "Readers".
&lt;/p&gt;
&lt;p&gt;
Step 2: Create a web.config in that folder limiting access to the role(s) you want
to give access.
&lt;/p&gt;
&lt;p&gt;
Step 3: In globas.asax, route the tables and actions that apply to the specific role
to that folder, like this:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;routes.Add(new DynamicDataRoute("&lt;strong&gt;Readers&lt;/strong&gt;/{table}/{action}.aspx")&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Constraints = new RouteValueDictionary(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; action = "List|Details",&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; table = "EvaluationSubjects|Reports",&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Model = model&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;});&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=770ec6f5-70b2-43c5-ae33-f87f4cb2c99c" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,770ec6f5-70b2-43c5-ae33-f87f4cb2c99c.aspx</comments>
      <category>ASP.NET</category>
      <category>English</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=e5c9a250-efa2-45ae-a801-c7b2c066d81f</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,e5c9a250-efa2-45ae-a801-c7b2c066d81f.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,e5c9a250-efa2-45ae-a801-c7b2c066d81f.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=e5c9a250-efa2-45ae-a801-c7b2c066d81f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I will be speaking at <a href="http://vslive.com/2008/dallas/default.aspx">VSLive!</a> again,
this time in Dallas from 8 until 11 December. I'll be doing the following sessions:
</p>
        <ul>
          <li>
Introduction to ASP.NET Dynamic Data (Tuesday 9 December, 11:15 AM)</li>
          <li>
POX/REST Strategies with WCF (Thursday 11 December, 1:45 PM)</li>
          <li>
Understanding Transactions in WCF (Thursday 11 December, 4:45 PM)</li>
        </ul>
        <p>
          <a href="http://vslive.com/2008/dallas/default.aspx">VSLive!</a> is a very nice and
relaxed event with <a href="http://vslive.com/2008/dallas/agenda.aspx">great content</a>.
So it's a great opportunity to learn new stuff and new people. If you want to attend
the Dallas show and see me speak, you can get a $300 discount by entering the discount
code <strong>SPVAN</strong>. I hope to see you there.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=e5c9a250-efa2-45ae-a801-c7b2c066d81f" />
      </body>
      <title>Speaking at VSLive in Dallas 8-11 December</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,e5c9a250-efa2-45ae-a801-c7b2c066d81f.aspx</guid>
      <link>http://michiel.vanotegem.nl/2008/10/28/SpeakingAtVSLiveInDallas811December.aspx</link>
      <pubDate>Tue, 28 Oct 2008 20:19:07 GMT</pubDate>
      <description>&lt;p&gt;
I will be speaking at &lt;a href="http://vslive.com/2008/dallas/default.aspx"&gt;VSLive!&lt;/a&gt; again,
this time in Dallas from 8 until 11 December. I'll be doing the following sessions:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Introduction to ASP.NET Dynamic Data (Tuesday 9 December, 11:15 AM)&lt;/li&gt;
&lt;li&gt;
POX/REST Strategies with WCF (Thursday 11 December, 1:45 PM)&lt;/li&gt;
&lt;li&gt;
Understanding Transactions in WCF (Thursday 11 December, 4:45 PM)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://vslive.com/2008/dallas/default.aspx"&gt;VSLive!&lt;/a&gt; is a very nice and
relaxed event with &lt;a href="http://vslive.com/2008/dallas/agenda.aspx"&gt;great content&lt;/a&gt;.
So it's a great opportunity to learn new stuff and new people. If you want to attend
the Dallas show and see me speak, you can get a $300 discount by entering the discount
code &lt;strong&gt;SPVAN&lt;/strong&gt;. I hope to see you there.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=e5c9a250-efa2-45ae-a801-c7b2c066d81f" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,e5c9a250-efa2-45ae-a801-c7b2c066d81f.aspx</comments>
      <category>.NET</category>
      <category>ASP.NET</category>
      <category>English</category>
      <category>Events</category>
      <category>LINQ</category>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=f2e7b003-9476-47f8-af07-d523f26ee30c</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,f2e7b003-9476-47f8-af07-d523f26ee30c.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,f2e7b003-9476-47f8-af07-d523f26ee30c.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=f2e7b003-9476-47f8-af07-d523f26ee30c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've been working on a small Windows Mobile app and I had a really weird problem.
While working in the emulator everything worked fine. However, when I deployed it
to my Smartphone (HTC S710), it didn't show the labels. Textboxes etc. worked fine,
but the labels didn't show up, no matter what I did. Some of the things I tried:
</p>
        <ul>
          <li>
redeploy 
</li>
          <li>
changing the font of the labels 
</li>
          <li>
making sure there was no overlap between labels and textboxes</li>
        </ul>
        <p>
It took me about an hour to get it working. I went into the settings and
because there wasn't anything about screen/font settings I finally looked at those
of the startup screen (option 4), thinking that this didn't have anything to do with
my app. As it turned out the culprit was a color scheme that I downloaded
from the Windows Mobile site called EarthView.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=f2e7b003-9476-47f8-af07-d523f26ee30c" />
      </body>
      <title>Windows Mobile Labels not showing because of color scheme</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,f2e7b003-9476-47f8-af07-d523f26ee30c.aspx</guid>
      <link>http://michiel.vanotegem.nl/2008/10/24/WindowsMobileLabelsNotShowingBecauseOfColorScheme.aspx</link>
      <pubDate>Fri, 24 Oct 2008 11:13:18 GMT</pubDate>
      <description>&lt;p&gt;
I've been&amp;nbsp;working on a small Windows Mobile app and I had a really weird problem.
While working in the emulator everything worked fine. However, when I deployed it
to my Smartphone (HTC S710), it didn't show the labels. Textboxes etc. worked fine,
but the labels didn't show up, no matter what I did. Some of the things I tried:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
redeploy 
&lt;li&gt;
changing the font of the labels 
&lt;li&gt;
making sure there was no overlap between labels and textboxes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
It took me about an hour to&amp;nbsp;get it working.&amp;nbsp;I went into the settings and
because there wasn't anything about screen/font settings I finally looked at those
of the startup screen (option 4), thinking that this didn't have anything to do with
my app. As it turned out&amp;nbsp;the culprit&amp;nbsp;was a color scheme that I downloaded
from the Windows Mobile site called EarthView.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=f2e7b003-9476-47f8-af07-d523f26ee30c" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,f2e7b003-9476-47f8-af07-d523f26ee30c.aspx</comments>
      <category>English</category>
      <category>Windows Mobile</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=3274a348-a8c0-40dd-9b97-9ff7aff6325f</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,3274a348-a8c0-40dd-9b97-9ff7aff6325f.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,3274a348-a8c0-40dd-9b97-9ff7aff6325f.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=3274a348-a8c0-40dd-9b97-9ff7aff6325f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
I while ago I created the control shown below. It acts a multi-select ListBox from
the API perspective, but works by selecting items and moving them over. Pretty much
all elements can be styled, such as the headers, the ListBoxes and the buttons. I'd
love to have one with some JavaScript that allows drag-n-drop, but that's too much
work for me. Feel free to copy and extend the <a href="http://michiel.vanotegem.nl/content/binary/AddRemoveListBox.zip">source
code(3.15 KB)</a>.<br /><br /><img src="http://michiel.vanotegem.nl/content/binary/AddRemoveListBox.gif" border="0" /><img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=3274a348-a8c0-40dd-9b97-9ff7aff6325f" /></body>
      <title>AddRemoveListBox</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,3274a348-a8c0-40dd-9b97-9ff7aff6325f.aspx</guid>
      <link>http://michiel.vanotegem.nl/2008/10/20/AddRemoveListBox.aspx</link>
      <pubDate>Mon, 20 Oct 2008 20:38:33 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
I while ago I created the control shown below. It acts a multi-select ListBox from
the API perspective, but works by selecting items and moving them over. Pretty much
all elements can be styled, such as the headers, the ListBoxes and the buttons. I'd
love to have one with some JavaScript that allows drag-n-drop, but that's too much
work for me. Feel free to copy and extend the &lt;a href="http://michiel.vanotegem.nl/content/binary/AddRemoveListBox.zip"&gt;source
code(3.15 KB)&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
&lt;img src="http://michiel.vanotegem.nl/content/binary/AddRemoveListBox.gif" border=0&gt;&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=3274a348-a8c0-40dd-9b97-9ff7aff6325f" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,3274a348-a8c0-40dd-9b97-9ff7aff6325f.aspx</comments>
      <category>ASP.NET</category>
      <category>English</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=7e72357e-a635-4472-bc6a-8cbd65ce8ddf</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,7e72357e-a635-4472-bc6a-8cbd65ce8ddf.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,7e72357e-a635-4472-bc6a-8cbd65ce8ddf.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=7e72357e-a635-4472-bc6a-8cbd65ce8ddf</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I run a a development team and we're working on some functionality that we're likely
going to share between different projects. The problem is that part of the functionality
are some adminstration pages that we want to be able to develop separately, deploy
as part of customer's. The requirements we have are roughly the following
</p>
        <ol>
          <li>
We can version the pages separately, so that when we patch the shared functionality,
we don't have to rebuild/redploy the entire site. 
</li>
          <li>
We don't have to copy files from one project (the project with shared functuionality)
to another (the project that is customer specific). 
</li>
          <li>
In our source control the customer's website is really a separate project and not
a branch of the project with shared functionality. 
</li>
          <li>
The administration pages should be themed to the customer's site and additional admin
pages may be added custom for the customer's website.</li>
        </ol>
        <p>
The best way, we figured, was to deploy the shared functionality as a seprate assembly,
similar to a precompiled website. A precompiled website however is one thing, AFAIK
you can't dump two precompiled websites into the same application. I did figure out
a way to deploy the site as an assembly, by putting the admin pages inside an assembly
as an embedded resource. We then pull the pages out using a VirtualPathProvider. There
are great implementations out there using the VirtualPathProvider, such as serving
a website from a <a href="http://msdn.microsoft.com/en-us/library/aa479502.aspx">ZIP-file</a> and
from a <a href="http://support.microsoft.com/kb/910441">database</a> (which is what
SharePoint does).
</p>
        <p>
          <em>If you don't know what a VirtualPathProvider is, let me quickly fill you in. When
ASP.NET gets an aspx page for the first time, compiles that page and stores the result
in a system directory. Only when you change the file will ASP.NET recompile the page.
Now, the file system that ASP.NET gets the page from is virtualized, which means that
ASP.NET does not know how the underlying file system is implemented. By default this
is the normal Windows file system, but you can create a provider that uses another
storage mechanism. As long as it works just like the file system, this will work fine.
You can use a database, XML file, ZIP file, web service, or whatever as the underlying
file system. All you have to do is create a few classes, including an implementation
of the VirtualPathProvider, register the provider in global.asax, and you're off.
The great thing is that because you're supplying ASP.NET with the page, your page
benefits from ASP.NET (pre)compilation. This means that if you build a CMS with content
in a database, the database is only hit the first time the page is requested and the
content is compiled into the page.</em>
        </p>
        <p>
So, what we can do is put the aspx pages inside an assembly as an embedded resource
and serving the pages from there. Because the pages are inside a regular .NET
assembly, it can be linked into a project and be updated when there is a patch, without
affecting the application's it is contained in. All we have to do is redeploy the
assembly. It sounds a bit weird, but it actually works, as you can see in the attached <a href="http://michiel.vanotegem.nl/content/binary/EmbeddedVirtualPathProvider.zip">demo
(51.54 KB)</a>. Be aware that this is really just a demo. It is just meant to prove
it works. The logic to get directories is flawed (which has something to do with the
fact that directories are not preserved in embedded resources), and possibly more
is. However, you can access the following pages:
</p>
        <ul>
          <li>
\AdminHome.aspx 
</li>
          <li>
\Default.aspx 
</li>
          <li>
\NewFolder1\HTMLPage1.htm (only works in VS webserver or IIS7 in integrated mode)</li>
        </ul>
        <p>
Default.aspx is kind of funny, because the code behind class is compiled in the class
and the page itself embedded. Enjoy!
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=7e72357e-a635-4472-bc6a-8cbd65ce8ddf" />
      </body>
      <title>Serving (part of) a site from embedded resources</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,7e72357e-a635-4472-bc6a-8cbd65ce8ddf.aspx</guid>
      <link>http://michiel.vanotegem.nl/2008/08/30/ServingPartOfASiteFromEmbeddedResources.aspx</link>
      <pubDate>Sat, 30 Aug 2008 21:15:37 GMT</pubDate>
      <description>&lt;p&gt;
I run a a development team and we're working on some functionality that we're likely
going to share between different projects. The problem is that part of the functionality
are some adminstration pages that we want to be able to develop separately, deploy
as part of&amp;nbsp;customer's. The requirements we have are roughly the following
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
We can version the pages separately, so that when we patch the shared functionality,
we don't have to rebuild/redploy the entire site. 
&lt;li&gt;
We don't have to copy files from one project (the project with shared functuionality)
to another (the project that is customer specific). 
&lt;li&gt;
In our source control the customer's website is really a separate project and not
a branch of the project with shared functionality. 
&lt;li&gt;
The administration pages should be themed to the customer's site and additional admin
pages may be added custom for the customer's website.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
The best way, we figured, was to deploy the shared functionality as a seprate assembly,
similar to a precompiled website. A precompiled website however is one thing, AFAIK
you can't dump two precompiled websites into the same application. I did figure out
a way to deploy the site as an assembly, by putting the admin pages inside an assembly
as an embedded resource. We then pull the pages out using a VirtualPathProvider. There
are great implementations out there using the VirtualPathProvider, such as serving
a website from a &lt;a href="http://msdn.microsoft.com/en-us/library/aa479502.aspx"&gt;ZIP-file&lt;/a&gt; and
from a &lt;a href="http://support.microsoft.com/kb/910441"&gt;database&lt;/a&gt; (which is what
SharePoint does).
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;If you don't know what a VirtualPathProvider is, let me quickly fill you in. When
ASP.NET gets an aspx page for the first time, compiles that page and stores the result
in a system directory. Only when you change the file will ASP.NET recompile the page.
Now, the file system that ASP.NET gets the page from is virtualized, which means that
ASP.NET does not know how the underlying file system is implemented. By default this
is the normal Windows file system, but you can create a provider that uses another
storage mechanism. As long as it works just like the file system, this will work fine.
You can use a database, XML file, ZIP file, web service, or whatever as the underlying
file system. All you have to do is create a few classes, including an implementation
of the VirtualPathProvider, register the provider in global.asax, and you're off.
The great thing is that because you're supplying ASP.NET with the page, your page
benefits from ASP.NET (pre)compilation. This means that if you build a CMS with content
in a database, the database is only hit the first time the page is requested and the
content is compiled into the page.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
So, what we can do&amp;nbsp;is put the aspx pages inside an assembly as an embedded resource
and serving the pages from there. Because&amp;nbsp;the pages are inside a regular .NET
assembly, it can be linked into a project and be updated when there is a patch, without
affecting the application's it is contained in. All we have to do is redeploy the
assembly. It sounds a bit weird, but it actually works, as you can see in the attached &lt;a href="http://michiel.vanotegem.nl/content/binary/EmbeddedVirtualPathProvider.zip"&gt;demo
(51.54 KB)&lt;/a&gt;. Be aware that this is really just a demo. It is just meant to prove
it works. The logic to get directories is flawed (which has something to do with the
fact that directories are not preserved in embedded resources), and possibly more
is. However, you can access the following pages:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
\AdminHome.aspx 
&lt;li&gt;
\Default.aspx 
&lt;li&gt;
\NewFolder1\HTMLPage1.htm (only works in VS webserver or IIS7 in integrated mode)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Default.aspx is kind of funny, because the code behind class is compiled in the class
and the page itself embedded. Enjoy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=7e72357e-a635-4472-bc6a-8cbd65ce8ddf" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,7e72357e-a635-4472-bc6a-8cbd65ce8ddf.aspx</comments>
      <category>ASP.NET</category>
      <category>English</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=0b29940a-ae3f-463f-bea1-fbd23d7a6fc3</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,0b29940a-ae3f-463f-bea1-fbd23d7a6fc3.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,0b29940a-ae3f-463f-bea1-fbd23d7a6fc3.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=0b29940a-ae3f-463f-bea1-fbd23d7a6fc3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've now read several books on SharePoint development, such as <a href="http://www.amazon.com/Developers-SharePoint-Services-Platform-Programming/dp/1584505001/aspnlcom-20">Developer's
Guide to the Windows SharePoint Services v3 Platform </a>, <a href="http://www.amazon.com/Microsoft-SharePoint-2007-Development-Unleashed/dp/0672329034/aspnlcom-20">Microsoft
harePoint 2007 Development Unleashed</a>, and <a href="http://www.amazon.com/Programming-Excel-Services-PRO-Developer-Bruney/dp/0735624070/aspnlcom-20">Programming
Excel Services</a>. I've found each of these books lacking, particularly the last
two. The Unleashed book is more a reference than anything else and especially in the
more advanced topics I really didn't find what I was looking for, which is not what
you'd expect from an Unleashed title. The Excel Services book is a disappointment
if you are looking for good information about Excel Services. If you want to learn
to develop WebParts it is quite good however. In that sense the book has been completely
misnamed. I hope that my next pick will be better (that said, two of the three books
were given to me).
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=0b29940a-ae3f-463f-bea1-fbd23d7a6fc3" />
      </body>
      <title>Good books on SharePoint development are rare (or I haven't found them yet)</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,0b29940a-ae3f-463f-bea1-fbd23d7a6fc3.aspx</guid>
      <link>http://michiel.vanotegem.nl/2008/07/23/GoodBooksOnSharePointDevelopmentAreRareOrIHaventFoundThemYet.aspx</link>
      <pubDate>Wed, 23 Jul 2008 09:37:33 GMT</pubDate>
      <description>&lt;p&gt;
I've now read several books on SharePoint development, such as &lt;a href="http://www.amazon.com/Developers-SharePoint-Services-Platform-Programming/dp/1584505001/aspnlcom-20"&gt;Developer's
Guide to the Windows SharePoint Services v3 Platform &lt;/a&gt;, &lt;a href="http://www.amazon.com/Microsoft-SharePoint-2007-Development-Unleashed/dp/0672329034/aspnlcom-20"&gt;Microsoft
harePoint 2007 Development Unleashed&lt;/a&gt;, and &lt;a href="http://www.amazon.com/Programming-Excel-Services-PRO-Developer-Bruney/dp/0735624070/aspnlcom-20"&gt;Programming
Excel Services&lt;/a&gt;. I've found each of these books lacking, particularly the last
two. The Unleashed book is more a reference than anything else and especially in the
more advanced topics I really didn't find what I was looking for, which is not what
you'd expect from an Unleashed title. The Excel Services book is a disappointment
if you are looking for good information about Excel Services. If you want to learn
to develop WebParts it is quite good however. In that sense the book has been completely
misnamed. I hope that my next pick will be better (that said, two of the three books
were given to me).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=0b29940a-ae3f-463f-bea1-fbd23d7a6fc3" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,0b29940a-ae3f-463f-bea1-fbd23d7a6fc3.aspx</comments>
      <category>.NET</category>
      <category>English</category>
      <category>SharePoint</category>
    </item>
    <item>
      <trackback:ping>http://michiel.vanotegem.nl/Trackback.aspx?guid=3b82a54a-5aac-4c86-a47a-e7284990ecb2</trackback:ping>
      <pingback:server>http://michiel.vanotegem.nl/pingback.aspx</pingback:server>
      <pingback:target>http://michiel.vanotegem.nl/PermaLink,guid,3b82a54a-5aac-4c86-a47a-e7284990ecb2.aspx</pingback:target>
      <dc:creator>Michiel van Otegem</dc:creator>
      <wfw:comment>http://michiel.vanotegem.nl/CommentView,guid,3b82a54a-5aac-4c86-a47a-e7284990ecb2.aspx</wfw:comment>
      <wfw:commentRss>http://michiel.vanotegem.nl/SyndicationService.asmx/GetEntryCommentsRss?guid=3b82a54a-5aac-4c86-a47a-e7284990ecb2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just moved my blog to a new server and in the process did a long overdue upgrade
of dasBlog. Unfortunately now all download links fail and some images are missing.
I will be correcting this, but if you find a link/image that doesn't work, please
drop me a line. Thanks.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=3b82a54a-5aac-4c86-a47a-e7284990ecb2" />
      </body>
      <title>New version, new server</title>
      <guid isPermaLink="false">http://michiel.vanotegem.nl/PermaLink,guid,3b82a54a-5aac-4c86-a47a-e7284990ecb2.aspx</guid>
      <link>http://michiel.vanotegem.nl/2008/07/19/NewVersionNewServer.aspx</link>
      <pubDate>Sat, 19 Jul 2008 18:32:44 GMT</pubDate>
      <description>&lt;p&gt;
I just moved my blog to a new server and in the process did a long overdue upgrade
of dasBlog. Unfortunately now all download links fail and some images are missing.
I will be correcting this, but if you find a link/image that doesn't work, please
drop me a line. Thanks.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=3b82a54a-5aac-4c86-a47a-e7284990ecb2" /&gt;</description>
      <comments>http://michiel.vanotegem.nl/CommentView,guid,3b82a54a-5aac-4c86-a47a-e7284990ecb2.aspx</comments>
      <category>English</category>
    </item>
  </channel>
</rss>