<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Patrice Calve</title>
        <link>http://geekswithblogs.net/Patware/Default.aspx</link>
        <description>Life's short, have fun</description>
        <language>en-US</language>
        <copyright>Patrice Calve</copyright>
        <managingEditor>patware@hotmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>Patrice Calve</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/Patware/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Simple Sql script for finding a Guid/Uniqueidentifier in your database</title>
            <link>http://geekswithblogs.net/Patware/archive/2009/05/28/132475.aspx</link>
            <description>&lt;p&gt;So...&lt;/p&gt;
&lt;p&gt;You're trying to debug an application that is using a large (100&amp;gt; tables) database and for a reason or an other, you don't understand where this darn Id is coming from!&lt;/p&gt;
&lt;p&gt;Here's a simple Sql Script that browses your database for this darn Id...&lt;/p&gt;
&lt;p&gt;Just change the @Id = '' for the id you're looking for!&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;declare &lt;/span&gt;@id &lt;span style="COLOR: blue"&gt;as varchar&lt;/span&gt;(50)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    &lt;/span&gt;    &lt;span style="COLOR: green"&gt;idToRemove.ToString()    ""    String&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;select &lt;/span&gt;@id = &lt;span style="COLOR: #a31515"&gt;'2eda82d8-9dcb-dd11-965a-001279d8c645'&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;set nocount on&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;declare &lt;/span&gt;@template &lt;span style="COLOR: blue"&gt;as varchar&lt;/span&gt;(5000)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;set &lt;/span&gt;@template = &lt;span style="COLOR: #a31515"&gt;'declare @id as uniqueidentifier&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #a31515"&gt;select @id = ''' &lt;/span&gt;+ @id + &lt;span style="COLOR: #a31515"&gt;'''&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: #a31515"&gt;if exists(select * from [&amp;lt;%=TableName%&amp;gt;] where &amp;lt;%=ColumnNamesToInclude%&amp;gt;)&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: #a31515"&gt;begin&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: #a31515"&gt;print ''&amp;lt;%=TableName%&amp;gt;''&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: #a31515"&gt;select * from [&amp;lt;%=TableName%&amp;gt;] where &amp;lt;%=ColumnNamesToInclude%&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: #a31515"&gt;end'&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;declare &lt;/span&gt;@TableName &lt;span style="COLOR: blue"&gt;as varchar&lt;/span&gt;(250)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;DECLARE &lt;/span&gt;TAB_CURSOR &lt;span style="COLOR: blue"&gt;CURSOR FOR&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;SELECT &lt;/span&gt;TABLE_NAME &lt;span style="COLOR: blue"&gt;as &lt;/span&gt;TableName &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;FROM &lt;/span&gt;INFORMATION_SCHEMA.TABLES &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;WHERE &lt;/span&gt;TABLE_TYPE = &lt;span style="COLOR: #a31515"&gt;'BASE TABLE'&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;ORDER BY &lt;/span&gt;TableName&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;OPEN &lt;/span&gt;TAB_CURSOR&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;FETCH NEXT FROM &lt;/span&gt;TAB_CURSOR&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;INTO &lt;/span&gt;@TableName&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;WHILE &lt;/span&gt;@@FETCH_STATUS=0&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;BEGIN&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;DECLARE &lt;/span&gt;@sql &lt;span style="COLOR: blue"&gt;as varchar&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;max&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;DECLARE &lt;/span&gt;@columnCount &lt;span style="COLOR: blue"&gt;as int&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;DECLARE &lt;/span&gt;@colName &lt;span style="COLOR: blue"&gt;as varchar&lt;/span&gt;(500)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;DECLARE &lt;/span&gt;@columnDataType &lt;span style="COLOR: blue"&gt;as varchar&lt;/span&gt;(50)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;DECLARE &lt;/span&gt;@delimiter &lt;span style="COLOR: blue"&gt;as varchar&lt;/span&gt;(10)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;DECLARE &lt;/span&gt;@columnNamesToInclude &lt;span style="COLOR: blue"&gt;as varchar&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;max&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    print '--------------------------------------------------------'&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    print '-- '&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    print '-- ' + @tableName &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    print '-- '&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    print '-- '&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;set &lt;/span&gt;@colName = &lt;span style="COLOR: #a31515"&gt;''&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;set &lt;/span&gt;@delimiter = &lt;span style="COLOR: #a31515"&gt;''&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;set &lt;/span&gt;@columnNamesToInclude = &lt;span style="COLOR: #a31515"&gt;''&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;set &lt;/span&gt;@columnCount = 0&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;DECLARE &lt;/span&gt;COL_CURSOR &lt;span style="COLOR: blue"&gt;CURSOR FOR&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;select &lt;/span&gt;COLUMN_NAME &lt;span style="COLOR: blue"&gt;as &lt;/span&gt;[columnName]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;FROM &lt;/span&gt;INFORMATION_SCHEMA.COLUMNS&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;WHERE &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            TABLE_NAME = @tableName&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;AND &lt;/span&gt;DATA_TYPE = &lt;span style="COLOR: #a31515"&gt;'uniqueidentifier'&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;ORDER BY &lt;/span&gt;ORDINAL_POSITION&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;OPEN &lt;/span&gt;COL_CURSOR&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;FETCH NEXT FROM &lt;/span&gt;COL_CURSOR&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;INTO &lt;/span&gt;@colName&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;WHILE &lt;/span&gt;@@FETCH_STATUS=0&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;BEGIN&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;set &lt;/span&gt;@columnCount = @columnCount + 1&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;set &lt;/span&gt;@columnNamesToInclude = @columnNamesToInclude + @delimiter + &lt;span style="COLOR: #a31515"&gt;'[' &lt;/span&gt;+ @colName + &lt;span style="COLOR: #a31515"&gt;'] = @Id'&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;set &lt;/span&gt;@delimiter = &lt;span style="COLOR: #a31515"&gt;' OR ' &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;FETCH NEXT FROM &lt;/span&gt;COL_CURSOR &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;INTO &lt;/span&gt;@colName&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;END&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;CLOSE &lt;/span&gt;COL_CURSOR &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;DEALLOCATE &lt;/span&gt;COL_CURSOR  &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;if &lt;/span&gt;@columnCount &amp;gt; 0 &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;BEGIN&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;set &lt;/span&gt;@sql = @template&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;set &lt;/span&gt;@sql = &lt;span style="COLOR: blue"&gt;replace&lt;/span&gt;(@sql, &lt;span style="COLOR: #a31515"&gt;'&amp;lt;%=TableName%&amp;gt;'&lt;/span&gt;, @tableName)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;set &lt;/span&gt;@sql = &lt;span style="COLOR: blue"&gt;replace&lt;/span&gt;(@sql, &lt;span style="COLOR: #a31515"&gt;'&amp;lt;%=ColumnNamesToInclude%&amp;gt;'&lt;/span&gt;, @columnNamesToInclude)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;set &lt;/span&gt;@sql = &lt;span style="COLOR: blue"&gt;replace&lt;/span&gt;(@sql, &lt;span style="COLOR: #a31515"&gt;'&amp;lt;%=ScriptDateTime%&amp;gt;'&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;getdate&lt;/span&gt;())&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;exec &lt;/span&gt;(@sql)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    &lt;/span&gt;    &lt;span style="COLOR: green"&gt;print ''&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    &lt;/span&gt;    &lt;span style="COLOR: green"&gt;print ''&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    &lt;/span&gt;    &lt;span style="COLOR: green"&gt;print @sql&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    &lt;/span&gt;    &lt;span style="COLOR: green"&gt;print ''&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    &lt;/span&gt;    &lt;span style="COLOR: green"&gt;print 'GO'&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    &lt;/span&gt;    &lt;span style="COLOR: green"&gt;print ''&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    &lt;/span&gt;    &lt;span style="COLOR: green"&gt;print ''&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    &lt;/span&gt;    &lt;span style="COLOR: green"&gt;print ''&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: green"&gt;--    &lt;/span&gt;    &lt;span style="COLOR: green"&gt;print ''&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;END&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;FETCH NEXT FROM &lt;/span&gt;TAB_CURSOR &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;INTO &lt;/span&gt;@tableName&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;END&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;CLOSE &lt;/span&gt;TAB_CURSOR&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;DEALLOCATE &lt;/span&gt;TAB_CURSOR &lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;!--EndFragment--&gt;&lt;/p&gt;
&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt; &lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132475"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132475" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/132475.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2009/05/28/132475.aspx</guid>
            <pubDate>Thu, 28 May 2009 19:29:57 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/132475.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2009/05/28/132475.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/132475.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/132475.aspx</trackback:ping>
        </item>
        <item>
            <title>Very simple Log() method in VB</title>
            <link>http://geekswithblogs.net/Patware/archive/2009/05/06/131846.aspx</link>
            <description>&lt;p&gt;A long time ago, I wrote a very simple log method.  It was used to print the number of times a function/method was called.  I just changed it a bit and added an optional dumpAll parameter for printing the whole results.&lt;/p&gt;
&lt;p&gt;It tracks 3 things: the name of the method, the number of times it was called, and stack level.&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;Private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Sub&lt;/span&gt; log(&lt;span style="COLOR: blue"&gt;Optional&lt;/span&gt; &lt;span style="COLOR: blue"&gt;ByVal&lt;/span&gt; dumpAll &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Boolean&lt;/span&gt; = &lt;span style="COLOR: blue"&gt;False&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;Static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Dim&lt;/span&gt; h &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;New&lt;/span&gt; Generic.Dictionary(&lt;span style="COLOR: blue"&gt;Of&lt;/span&gt; &lt;span style="COLOR: blue"&gt;String&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;Integer&lt;/span&gt;)()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;If&lt;/span&gt; dumpAll &lt;span style="COLOR: blue"&gt;Then&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;For&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Each&lt;/span&gt; d &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; Generic.KeyValuePair(&lt;span style="COLOR: blue"&gt;Of&lt;/span&gt; &lt;span style="COLOR: blue"&gt;String&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;Integer&lt;/span&gt;) &lt;span style="COLOR: blue"&gt;In&lt;/span&gt; h&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                System.Diagnostics.Debug.Print(&lt;span style="COLOR: #a31515"&gt;"[{0}] was called [{1}] times"&lt;/span&gt;, d.Key, d.Value)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;Next&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;Else&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;Dim&lt;/span&gt; st &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; &lt;span style="COLOR: blue"&gt;New&lt;/span&gt; StackTrace(&lt;span style="COLOR: blue"&gt;True&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;Dim&lt;/span&gt; m &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; System.Reflection.MethodBase = st.GetFrame(1).GetMethod()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;If&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Not&lt;/span&gt; h.ContainsKey(m.Name) &lt;span style="COLOR: blue"&gt;Then&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                h.Add(m.Name, 1)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;Else&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                h(m.Name) = h(m.Name) + 1&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;If&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            System.Diagnostics.Debug.Print(&lt;span style="COLOR: #a31515"&gt;"Method [{0}],(stack [{1}]),called [{2}] times"&lt;/span&gt;, m.Name, st.FrameCount, h(m.Name))&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;If&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Sub&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;All you need to do is to add the call to the log() method in your method/function. &lt;/p&gt;
&lt;p&gt;Ex:&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;&lt;pre style="MARGIN: 0px"&gt;   &lt;span style="COLOR: blue"&gt;Public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Overrides&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Sub&lt;/span&gt; MyMethod()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        log()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        mSomeThing.DoSomethingEl()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Sub&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;!--EndFragment--&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--EndFragment--&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;It would be nice to have a macro/addin to add/remove this log() call to every method/function in a class.  Mmm...&lt;/p&gt;
&lt;p&gt;Pat&lt;!--EndFragment--&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131846"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131846" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/131846.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2009/05/06/131846.aspx</guid>
            <pubDate>Wed, 06 May 2009 14:47:01 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/131846.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2009/05/06/131846.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/131846.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/131846.aspx</trackback:ping>
        </item>
        <item>
            <title>The Current state of Unit Testing in the software industry.</title>
            <link>http://geekswithblogs.net/Patware/archive/2009/04/01/130658.aspx</link>
            <description>&lt;meta content="text/html; charset=utf-8" http-equiv="CONTENT-TYPE" /&gt;
&lt;title&gt;&lt;/title&gt;
&lt;meta content="OpenOffice.org 3.0  (Win32)" name="GENERATOR" /&gt;&lt;style type="text/css"&gt;&lt;!--
		@page { margin: 0.79in }
		P { margin-bottom: 0.08in }
	--&gt;&lt;/style&gt;
&lt;p style="margin-bottom: 0in;"&gt;The Current state of Unit Testing in the software industry.&lt;/p&gt;
&lt;p style="margin-bottom: 0in;"&gt;10 years ago, when the web boom started and applications were built with classic asp and ado, Unit Testing wasn't much on developers minds.&lt;/p&gt;
&lt;p style="margin-bottom: 0in;"&gt;But, in 2009, I'm amazed by the lack of unit testing in most environments I've encountered...&lt;/p&gt;
&lt;p style="margin-bottom: 0in;"&gt;In fact, most environments (not all, but most) I've seen don't even have a dedicated QA team, or even testers!!!&lt;/p&gt;
&lt;p style="margin-bottom: 0in;"&gt;There are no excuses.   &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Visual Studio (since 2005) have right-click generation of unit test projects and test method stubs.&lt;/li&gt;
    &lt;li&gt;There are plenty of documentation, add ons/tools and frameworks.&lt;/li&gt;
    &lt;li&gt;Most Pattern &amp;amp; Practices (CAB/SCSF, Prism, Asp.Net Mvc, etc.) are greatly oriented towards unit testing.&lt;/li&gt;
    &lt;li&gt;We know now that the teams that include unit testing (especially TDD) are far more productive than teams that don't.  (less time and better quality)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p style="margin-bottom: 0in;"&gt;So, I blame:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Superiors/Bosses without a vision&lt;/li&gt;
    &lt;li&gt;Senior architects/developers without a vision or balls to push unit testing&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Architects that don't show the way, or even block it (yeah, I know)&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Project Leaders who didn't plan for Unit Testing in the "project plan"&lt;/li&gt;
    &lt;li&gt;Developers/programmers who don't care&lt;/li&gt;
    &lt;li&gt;Clients who accept mediocre applications&lt;/li&gt;
    &lt;li&gt;"The Media" who doesn't care because Unit Testing is not sexy and doesn't bring in the dough&lt;/li&gt;
    &lt;li&gt;A mentality of more "know-at-whatever-quality" instead of more "quality"&lt;/li&gt;
    &lt;li&gt;Demos that become applications&lt;/li&gt;
    &lt;li&gt;Sample Codes and snippets available on the web that hints away from Unit Testing&lt;/li&gt;
    &lt;li&gt;Projects that are either already started without unit testing or that start with a demo ware attitude&lt;/li&gt;
    &lt;li&gt;Microsoft for creating development tools that make it easier to write bad than it is to write good.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-bottom: 0in;"&gt;Visual Studio should have two template groups:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Simple throw away templates (or templates that we have right now)&lt;/li&gt;
    &lt;li&gt;Enterprise class templates&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="margin-bottom: 0in;"&gt;In 2) Enterprise templates, it should be impossible to write code that doesn't follow best practices like high availability, security, unit testability (if that word exists), for instance:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Tight Coupling should be "deprecated" !&lt;/li&gt;
    &lt;li&gt;The use of Interfaces should be mandatory ?&lt;/li&gt;
    &lt;li&gt;Ho and so much more&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-bottom: 0in;"&gt;Since Visual Studio can throw a warning if a variable is used before it's set, if a variable is just not used, or if not all paths within a function return a value, lets include "hey, this is bad code".&lt;/p&gt;
&lt;p style="margin-bottom: 0in;"&gt;In the next few years, we'll see development environments, frameworks and utilities that will make it easier to do right than it is to do wrong, making this blog obsolete, in the meantime, push the Unit Testing.&lt;/p&gt;
&lt;p style="margin-bottom: 0in;"&gt;Finally,  &lt;/p&gt;
&lt;p style="margin-bottom: 0in;"&gt;I blame myself not working hard enough in promoting/evangelizing unit testing with my colleagues..&lt;/p&gt;
&lt;p style="margin-bottom: 0in;"&gt;Mea Culpa&lt;/p&gt;
&lt;p style="margin-bottom: 0in;"&gt; &lt;/p&gt;
Pat&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130658"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130658" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/130658.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2009/04/01/130658.aspx</guid>
            <pubDate>Thu, 02 Apr 2009 01:02:03 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/130658.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2009/04/01/130658.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/130658.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/130658.aspx</trackback:ping>
        </item>
        <item>
            <title>How to display a Reporting Services Report in a Winform application</title>
            <link>http://geekswithblogs.net/Patware/archive/2009/03/13/130070.aspx</link>
            <description>&lt;h3&gt;Step 1: prepare yourself :)&lt;/h3&gt;
&lt;p&gt;The first step to show a report on a windows application is to figure out the url and path of the report!&lt;/p&gt;
&lt;p&gt;Sql Reporting Services has 2 virtual directories:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;/Reports: renders the reports to the user in a user-friendly web page&lt;/li&gt;
    &lt;li&gt;/ReportServer: executes the report&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When your boss asks you to display a report in a winform application, he(she) will likely send you a url in the following forms:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;font face="Arial"&gt;&lt;a href="http://reportingservices/Reports"&gt;http://reportingservices/Reports&lt;/a&gt; (then you browse to a given report if you find it!)&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font face="Arial"&gt;&lt;a href="http://reportingservices/Reports/Pages/Report.aspx?ItemPath=%2fTMF+Reports%2fTMF1200+-+Project+Status"&gt;http://reportingservices/Reports/Pages/Report.aspx?ItemPath=%2fTMF+Reports%2fTMF1200+-+Project+Status&lt;/a&gt;&lt;/font&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The urls above don't translate to properties that you need in a winform (or webform)...&lt;/p&gt;
&lt;p&gt;To "consume" a report from a winform, you can't use the url above, you need another url.  Actually, you need two things:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;The Report Server Url&lt;/li&gt;
    &lt;li&gt;The Path of the report&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In the following two(2) steps, we'll see how to figure out how to discover that information.&lt;/p&gt;
&lt;h3&gt;Step 2: The Report Server Url&lt;/h3&gt;
&lt;p&gt;Ask your administrator, or find it for yourself!  The Reporting Server url is hidden in the report!&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Open the report in a browser (ie)&lt;/li&gt;
    &lt;li&gt;Right click on the report's header (ex: on the report's title) -&amp;gt; View Source&lt;/li&gt;
    &lt;li&gt;Locate the meta tag "Report Server", the "Content" attribute will contain the Report Server value: ex
    &lt;ul&gt;
        &lt;li&gt;&lt;font face="Arial"&gt;&amp;lt;META Name="Report Server" CONTENT="&lt;strong&gt;HTTP://ReportingServices/reportserver&lt;/strong&gt;"&amp;gt;&lt;/font&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;{ReportServerUrl} = "&lt;font face="Arial"&gt;&lt;a href="http://ReportingServices/reportserver"&gt;HTTP://ReportingServices/reportserver&lt;/a&gt;"&lt;/font&gt;&lt;/p&gt;
&lt;h3&gt;Step 3: The Report Path&lt;/h3&gt;
&lt;p&gt;The Report Path is something you have to "build" manually.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Open the ServerUrl in the browser (ie), a page with a list of folders will be shown&lt;/li&gt;
    &lt;li&gt;Copy the text of the folder into notepad or something like that. (referred bellow as {MyFolder})&lt;/li&gt;
    &lt;li&gt;Navigate to the folder, a page with a list of reports will be shown&lt;/li&gt;
    &lt;li&gt;Copy the text of the report into notepad: (referred bellow as {MyReportName})&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ReportPath will be the following: /{MyFolder}/{MyReportName}&lt;/p&gt;
&lt;p&gt;ex: {ReportPath} = "&lt;font face="Arial"&gt;/TMF Reports/TMF1200 - Project Status"&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Step 4: The ReportViewer in the Winform&lt;/h3&gt;
&lt;p&gt;Now, you're ready to add the report on the winform.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Open the winform in Visual Studio&lt;/li&gt;
    &lt;li&gt;Add a ReportViewer on the designer (Toolbox &amp;gt; Data &amp;gt; ReportViewer)&lt;/li&gt;
    &lt;li&gt;Set the following properties:
    &lt;ul&gt;
        &lt;li&gt;ServerReport
        &lt;ul&gt;
            &lt;li&gt;ReportServerUrl: {ReportServerUrl} = "&lt;font face="Arial"&gt;&lt;a href="http://reportingservices/reportserver"&gt;HTTP://ReportingServices/reportserver&lt;/a&gt;"&lt;/font&gt;&lt;/li&gt;
            &lt;li&gt;ReportPath: {ReportPath} = "&lt;font face="Arial"&gt;/TMF Reports/TMF1200 - Project Status"&lt;/font&gt;&lt;/li&gt;
        &lt;/ul&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Run the application.&lt;/p&gt;
&lt;p&gt;Pat&lt;/p&gt;
&lt;p&gt;Note To Microsoft&lt;/p&gt;
&lt;p&gt;It would nice if it was easier to discover reports from within Visual Studio.  A wizard where a dev could enter any of the following:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;The url of the reports (&lt;a href="http://MyServer/Reports/"&gt;http://MyServer/Reports/&lt;/a&gt; ) -&amp;gt; navigate to the report&lt;/li&gt;
    &lt;li&gt;The url of a given report (&lt;a href="http://MyServer/Reports/Pages/Report.aspx"&gt;http://MyServer/Reports/Pages/Report.aspx&lt;/a&gt;?...)&lt;/li&gt;
    &lt;li&gt;The url of the reportServer (&lt;a href="http://MyServer/ReportServer"&gt;http://MyServer/ReportServer&lt;/a&gt;) -&amp;gt; navigate to the report&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks, Pat&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130070"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130070" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/130070.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2009/03/13/130070.aspx</guid>
            <pubDate>Fri, 13 Mar 2009 19:21:46 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/130070.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2009/03/13/130070.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/130070.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/130070.aspx</trackback:ping>
        </item>
        <item>
            <title>Musician and CD pricing, i wasn't too off, was I?</title>
            <link>http://geekswithblogs.net/Patware/archive/2009/02/12/129350.aspx</link>
            <description>&lt;p&gt;Well well well...&lt;/p&gt;
&lt;p&gt;"Musician sells CD for $15.98, CD + live concert for $5000"  &lt;font face="Arial"&gt;&lt;a href="http://www.boingboing.net/2009/02/11/musician-sells-cd-fo.html"&gt;http://www.boingboing.net/2009/02/11/musician-sells-cd-fo.html&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;From John Wesley Harding's web site: &lt;/p&gt;
&lt;pre&gt;"Who was Changed and Who was Dead" &lt;br /&gt;is John Wesley Harding's first rock record since 2004. &lt;/pre&gt;
&lt;pre&gt;It will be available in stores March '09.&lt;br /&gt;But you can buy the album, not to mention &lt;strong&gt;&lt;font size="4"&gt;download&lt;/font&gt;&lt;/strong&gt; and hear it, immediately. There are various offers available to you.&lt;/pre&gt;
&lt;p&gt;I guess I wasn't too far off, was I ?  &lt;font face="Arial"&gt;&lt;a href="http://geekswithblogs.net/Patware/archive/2007/05/31/112885.aspx"&gt;http://geekswithblogs.net/Patware/archive/2007/05/31/112885.aspx&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Put a base price for a base article, and premium pricing for premium articles!&lt;/p&gt;
&lt;p&gt;I still believe that John should have offered an option "download the album for x$ and get a certificate of ownership" proving that the customer did pay for the mp3.  &lt;/p&gt;
&lt;p&gt;I don't bring my thousand CDs at work or on the bus.  I buy my CDs second hand, rip them to MP3, put them on an external hard drive, and enjoy what I paid for at work or at home.&lt;/p&gt;
&lt;p&gt;My CDs are stored in a fireproof enclosure.&lt;/p&gt;
&lt;p&gt;Pat&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129350"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129350" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/129350.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2009/02/12/129350.aspx</guid>
            <pubDate>Thu, 12 Feb 2009 13:58:09 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/129350.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2009/02/12/129350.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/129350.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/129350.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.Net MVC - inpractical web.sitemap in a dynamic context</title>
            <link>http://geekswithblogs.net/Patware/archive/2008/11/12/126987.aspx</link>
            <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The out-of-the-box StaticSiteMapProvider is great for, well, static web sites.  I don't find the StaticSiteMapProvider (and web.sitemap) model very practical for the dynamic nature of web sites/applications and especially Asp.Net Mvc applications.&lt;/p&gt;
&lt;p&gt;In an mvc application it's difficult to render a static sitemap that allows breadcrumbs like:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Home &lt;/li&gt;
    &lt;li&gt;Home &amp;gt; Cars &lt;/li&gt;
    &lt;li&gt;Home &amp;gt; Cars &amp;gt; Porsche 911 &lt;/li&gt;
    &lt;li&gt;Home &amp;gt; Cars &amp;gt; Porsche 911 &amp;gt; Edit &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the sake of discussion, and to keep the discussion as small as possible&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Home: url = /default.aspx? &lt;/li&gt;
    &lt;li&gt;Cars: url = /Cars/Index (Controller=Cars, Action=Index) &lt;/li&gt;
    &lt;li&gt;Porsche 911: /Cars/View(id) (Controller=Cars, Action=View, id = id) &lt;/li&gt;
    &lt;li&gt;Edit: /Cars/Edit(id) (Controller=Cars, Action=Edit, id = id) &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I'd like to have breadcrumb generating proper title (localized please) and url.  &lt;font face="Arial"&gt;&lt;a href="http://blog.maartenballiauw.be/page/About-me.aspx"&gt;Maarten Balliauw&lt;/a&gt; wrote a nice &lt;font face="Arial"&gt;&lt;a href="http://blog.maartenballiauw.be/post/2008/08/29/Building-an-ASPNET-MVC-sitemap-provider-with-security-trimming.aspx"&gt;MvcSitemapProvider&lt;/a&gt; where you can write a sitemap with dynamic.  What I don't like with the approach by Mr Balliauw is that I have to create a separate file that needs to keep be synched with the application, ie if the controller changes, I need to remember to change the sitemap.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;So I'm offering you my "version" of a SiteMapProvider.  The angle I'm taking is to decorate classes and methods with an attribute and have a SiteMapProvider that uses builds the sitemap dynamically, using these attributes (with reflection).&lt;/p&gt;
&lt;p&gt;I understand that reflection is slower than reading a static file, but from what I've found, the SiteMapProvider gets initialized once, on startup.  Ho, and I'm no expert by the way.&lt;/p&gt;
&lt;p&gt;First, I created a blank, new AspNet Mvc (beta) application.  Then, I created 3 files:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;AspNetMvcSiteMapNode.cs &lt;/li&gt;
    &lt;li&gt;AspNetMvcSiteMapProvider.cs &lt;/li&gt;
    &lt;li&gt;AspNetMvcSiteNodeAttribute.cs &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We'll see them in details bellow, but first, let me show you how the "decoration" looks.  In the HomeController.cs, I decorated the "out-of-the-box" &lt;strong&gt;Index&lt;/strong&gt; and &lt;strong&gt;About&lt;/strong&gt; actions, and created another action called &lt;strong&gt;View&lt;/strong&gt;,  Here a sample using the About and Item actions.&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;        [&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNode&lt;/span&gt;(Key = &lt;span style="COLOR: #a31515"&gt;"HomeIndexAbout"&lt;/span&gt;, Title = &lt;span style="COLOR: #a31515"&gt;"About"&lt;/span&gt;, Description = &lt;span style="COLOR: #a31515"&gt;"Description of us"&lt;/span&gt;, ParentKey = &lt;span style="COLOR: #a31515"&gt;"HomeIndex"&lt;/span&gt;, Url = &lt;span style="COLOR: #a31515"&gt;"/Home/About"&lt;/span&gt;)]&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ActionResult&lt;/span&gt; About()&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            ViewData[&lt;span style="COLOR: #a31515"&gt;"Title"&lt;/span&gt;] = &lt;span style="COLOR: #a31515"&gt;"About Page"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; View();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        [&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNode&lt;/span&gt;(Key = &lt;span style="COLOR: #a31515"&gt;"HomeItem"&lt;/span&gt;, Description = &lt;span style="COLOR: #a31515"&gt;"An item, simple one"&lt;/span&gt;, IsDynamic = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;, ParentKey = &lt;span style="COLOR: #a31515"&gt;"HomeIndex"&lt;/span&gt;, Title = &lt;span style="COLOR: #a31515"&gt;"Item {id}"&lt;/span&gt;, Url = &lt;span style="COLOR: #a31515"&gt;@"/Home/Item/\b(?&amp;lt;id&amp;gt;\d+)"&lt;/span&gt;)]&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ActionResult&lt;/span&gt; Item(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; id)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;SiteMap&lt;/span&gt;.CurrentNode.Title = &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR: #a31515"&gt;"Item - foo[{0}]"&lt;/span&gt;, id);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            ViewData[&lt;span style="COLOR: #a31515"&gt;"id"&lt;/span&gt;] = id;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; View();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        }&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;font face="Arial"&gt;My first "pass" at the attribute pattern above was to rely on the Provider to magically render the Title at run-time based on the "rawUrl" parameter, and a mix of title and DynamicUrl regex pattern.  It didn't turn out that well, more details at the end of the post.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;So, instead of relying in the Provider, I decided to simply overwrite the node's Title myself in the actual "action".&lt;/p&gt;
&lt;p&gt;&lt;span style="COLOR: #2b91af"&gt;SiteMap&lt;/span&gt;.CurrentNode.Title = &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR: #a31515"&gt;"Item - foo[{0}]"&lt;/span&gt;, id);&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;/font&gt; With the "StaticSiteMapProvider", everything is, well, static... so the above doesn't work (pitty).  But with the AspNetMvcSiteMapNode provider, I made sure that SiteMapNodes are NOT readonly ;).&lt;/p&gt;
&lt;p&gt;In the "Edit" action, I'm actually updating the "parentNode's" title !&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;pre style="MARGIN: 0px"&gt;        [&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNode&lt;/span&gt;(Key = &lt;span style="COLOR: #a31515"&gt;"HomeItemEdit"&lt;/span&gt;, Description = &lt;span style="COLOR: #a31515"&gt;"Edit of the item, simple one"&lt;/span&gt;, IsDynamic = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;, ParentKey = &lt;span style="COLOR: #a31515"&gt;"HomeItem"&lt;/span&gt;, Title = &lt;span style="COLOR: #a31515"&gt;"Edit"&lt;/span&gt;, Url = &lt;span style="COLOR: #a31515"&gt;@"/Home/Edit/\d+"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ActionResult&lt;/span&gt; Edit(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; id)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;SiteMap&lt;/span&gt;.CurrentNode.ParentNode.Title = &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR: #a31515"&gt;"Item - foo[{0}]"&lt;/span&gt;, id);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;SiteMap&lt;/span&gt;.CurrentNode.ParentNode.Url = &lt;span style="COLOR: #a31515"&gt;"/Home/Item/"&lt;/span&gt; + id;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            ViewData[&lt;span style="COLOR: #a31515"&gt;"id"&lt;/span&gt;] = id;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            ViewData[&lt;span style="COLOR: #a31515"&gt;"name"&lt;/span&gt;] = id.ToString();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; View();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The AspNetMvcSiteNodeAttribute.cs class is very basic:&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNodeAttribute&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;Attribute&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Key { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Url { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Title { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Description { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; ParentKey { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; IsDynamic { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; IsRoot { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Nothing fancy.  The Key could actually be generated automatically, via a Guid, but it would be difficult to build the parent/child relationship with randomn data.  &lt;/p&gt;
&lt;p&gt;I also created a AspNetMvcSiteMapNode.cs class, that inherits from the SiteMapNode and implements the "dynamic" portion.&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteMapNode&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;SiteMapNode&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; If the url is dynamic (variable on the querystring, for example), set the value to True&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; IsDynamic { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; DynamicUrl { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; ParentKey { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; AspNetMvcSiteMapNode(&lt;span style="COLOR: #2b91af"&gt;SiteMapProvider&lt;/span&gt; provider, &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; key)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            : &lt;span style="COLOR: blue"&gt;base&lt;/span&gt;(provider, key)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            IsDynamic = &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The Provider AspNetMvcSiteMapProvider.cs class, that inherits from the SiteMapProvider uses Reflection to get the AspNetMvcSiteNodeAttribute.  The algorithm includes a synchronization with the roles (via the AuthorizeAttribute).  &lt;/p&gt;
&lt;p&gt;&lt;font size="5"&gt;&lt;font size="4"&gt;This is far from production ready code!!!!&lt;/font&gt;&lt;/font&gt; &lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteMapProvider&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;SiteMapProvider&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;, &lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteMapNode&lt;/span&gt;&amp;gt; _nodes;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteMapNode&lt;/span&gt; _rootNode;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SiteMapNode&lt;/span&gt; FindSiteMapNode(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; rawUrl)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;KeyValuePair&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;, &lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteMapNode&lt;/span&gt;&amp;gt; kvp &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; _nodes)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (kvp.Value.IsDynamic)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: #2b91af"&gt;Regex&lt;/span&gt; regex = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Regex&lt;/span&gt;(kvp.Value.DynamicUrl);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (regex.IsMatch(rawUrl))&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                        kvp.Value.Url = rawUrl;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                        &lt;span style="COLOR: blue"&gt;int&lt;/span&gt;[] groupNumbers = regex.GetGroupNumbers();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                        &lt;span style="COLOR: #2b91af"&gt;Match&lt;/span&gt; match = regex.Matches(rawUrl)[0];&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                        &lt;span style="COLOR: blue"&gt;for&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; i = 1; i &amp;lt; groupNumbers.Length; i++)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                            &lt;span style="COLOR: #2b91af"&gt;Group&lt;/span&gt; group = match.Groups[i];&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                            kvp.Value.Title = kvp.Value.Title.Replace(&lt;span style="COLOR: #a31515"&gt;"{"&lt;/span&gt; + regex.GroupNameFromNumber(i) + &lt;span style="COLOR: #a31515"&gt;"}"&lt;/span&gt;, group.Value);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; kvp.Value;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (kvp.Value.Url.ToUpper() == rawUrl.ToUpper())&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; kvp.Value;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SiteMapNodeCollection&lt;/span&gt; GetChildNodes(&lt;span style="COLOR: #2b91af"&gt;SiteMapNode&lt;/span&gt; node)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;SiteMapNodeCollection&lt;/span&gt; coll = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SiteMapNodeCollection&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;KeyValuePair&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;, &lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteMapNode&lt;/span&gt;&amp;gt; kvp &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; _nodes)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (kvp.Value.ParentKey != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; kvp.Value.ParentKey == node.Key)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    coll.Add(kvp.Value);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; coll;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SiteMapNode&lt;/span&gt; GetParentNode(&lt;span style="COLOR: #2b91af"&gt;SiteMapNode&lt;/span&gt; node)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (node != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; node.Key != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; node.Key != &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Empty &amp;amp;&amp;amp; _nodes.ContainsKey(node.Key))&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteMapNode&lt;/span&gt; aNode = _nodes[node.Key];&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (aNode.ParentKey != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; aNode.ParentKey != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; _nodes.ContainsKey(aNode.ParentKey))&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _nodes[aNode.ParentKey];&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;else&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;protected&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SiteMapNode&lt;/span&gt; GetRootNodeCore()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _rootNode;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Initialize(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; name, System.Collections.Specialized.&lt;span style="COLOR: #2b91af"&gt;NameValueCollection&lt;/span&gt; attributes)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;base&lt;/span&gt;.Initialize(name, attributes);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            _nodes = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;, &lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteMapNode&lt;/span&gt;&amp;gt;();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;Assembly&lt;/span&gt; a = &lt;span style="COLOR: #2b91af"&gt;Assembly&lt;/span&gt;.GetExecutingAssembly();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;Type&lt;/span&gt; t &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; a.GetTypes())&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: #2b91af"&gt;Attribute&lt;/span&gt;[] allAttributes = (&lt;span style="COLOR: #2b91af"&gt;Attribute&lt;/span&gt;[])t.GetCustomAttributes(&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNodeAttribute&lt;/span&gt;), &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;Attribute&lt;/span&gt; att &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; allAttributes)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (att.GetType() == &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNodeAttribute&lt;/span&gt;))&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                        addMvcNodeFromAttribute((&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNodeAttribute&lt;/span&gt;)att, &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;MethodInfo&lt;/span&gt; mi &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; t.GetMethods())&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;Attribute&lt;/span&gt; att &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; mi.GetCustomAttributes(&lt;span style="COLOR: blue"&gt;true&lt;/span&gt;))&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (att.GetType() == &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNodeAttribute&lt;/span&gt;))&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                            addMvcNodeFromAttribute((&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNodeAttribute&lt;/span&gt;)att, mi);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; addMvcNodeFromAttribute(&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNodeAttribute&lt;/span&gt; aspNetMvcSiteNodeAttribute, &lt;span style="COLOR: #2b91af"&gt;MethodInfo&lt;/span&gt; methodInfo)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteMapNode&lt;/span&gt; node = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteMapNode&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;, aspNetMvcSiteNodeAttribute.Key);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            node.Title = aspNetMvcSiteNodeAttribute.Title;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            node.Description = aspNetMvcSiteNodeAttribute.Description;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (aspNetMvcSiteNodeAttribute.IsRoot)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                _rootNode = node;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                node.ParentKey = aspNetMvcSiteNodeAttribute.ParentKey;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            node.ReadOnly = &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            node.IsDynamic = aspNetMvcSiteNodeAttribute.IsDynamic;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (node.IsDynamic)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                node.DynamicUrl = aspNetMvcSiteNodeAttribute.Url;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                node.Url = aspNetMvcSiteNodeAttribute.Url;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (methodInfo != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                setNodeFromMethodInfo(methodInfo, node);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            _nodes.Add(node.Key, node);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; setNodeFromMethodInfo(&lt;span style="COLOR: #2b91af"&gt;MethodInfo&lt;/span&gt; methodInfo, &lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteMapNode&lt;/span&gt; node)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {            &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;Attribute&lt;/span&gt; authAtt &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; methodInfo.GetCustomAttributes(&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;AuthorizeAttribute&lt;/span&gt;), &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;))&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (authAtt.GetType() == &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;AuthorizeAttribute&lt;/span&gt;))&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: #2b91af"&gt;AuthorizeAttribute&lt;/span&gt; authorizeAttribute = (&lt;span style="COLOR: #2b91af"&gt;AuthorizeAttribute&lt;/span&gt;)authAtt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[] roles = authorizeAttribute.Roles.Split(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[] { &lt;span style="COLOR: #a31515"&gt;","&lt;/span&gt; }, &lt;span style="COLOR: #2b91af"&gt;StringSplitOptions&lt;/span&gt;.RemoveEmptyEntries);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; role &lt;span style="COLOR: blue"&gt;in&lt;/span&gt; roles)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                        node.Roles.Add(role);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Note that the &lt;font face="Arial"&gt;AspNetMvcSiteNodeAttribute can be applied to any class.  For example, on the "Default.aspx.cs" class, I decorated the page_load method like this:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;_Default&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;Page&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        [&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNode&lt;/span&gt;(IsRoot=&lt;span style="COLOR: blue"&gt;true&lt;/span&gt;,Key=&lt;span style="COLOR: #a31515"&gt;"Root"&lt;/span&gt;, Url=&lt;span style="COLOR: #a31515"&gt;"/Default.aspx?"&lt;/span&gt;, Title=&lt;span style="COLOR: #a31515"&gt;"Home"&lt;/span&gt;, Description=&lt;span style="COLOR: #a31515"&gt;"The site's home page"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Page_Load(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, System.&lt;span style="COLOR: #2b91af"&gt;EventArgs&lt;/span&gt; e)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;HttpContext&lt;/span&gt;.Current.RewritePath(Request.ApplicationPath);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;IHttpHandler&lt;/span&gt; httpHandler = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;MvcHttpHandler&lt;/span&gt;();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            httpHandler.ProcessRequest(&lt;span style="COLOR: #2b91af"&gt;HttpContext&lt;/span&gt;.Current);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;In the code above (and in the attribute), I have to specify the url.  I don't like that.  I really would like to forget about that "static" url and rely on the System.Web.Mvc to generate the proper urls in the case of controller/action methods.  But my attempts to make it work failed...&lt;/p&gt;
&lt;p&gt;If the first page to load the web site in IIS is "/Default.aspx", then the HttpContext .Current.Handler is not the MvcHandler.    So I can't leverage the Routing.  If the first page loaded is handled by the MvcHandler, everything is fine.  Since the Provider's "initialize" gets fired once, at startup, I can't rely on the fact that it will always be the MvcHandler.&lt;/p&gt;
&lt;p&gt;The HomeController.cs code is like this:&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;namespace&lt;/span&gt; MvcApplication1.Controllers&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;{&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;HandleError&lt;/span&gt;]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    [&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNode&lt;/span&gt;(Key=&lt;span style="COLOR: #a31515"&gt;"HomeController"&lt;/span&gt;, Title=&lt;span style="COLOR: #a31515"&gt;"Home"&lt;/span&gt;, Description=&lt;span style="COLOR: #a31515"&gt;"Home Page"&lt;/span&gt;, Url=&lt;span style="COLOR: #a31515"&gt;"/Home"&lt;/span&gt;, ParentKey=&lt;span style="COLOR: #a31515"&gt;"Root"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;HomeController&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;Controller&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        [&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNode&lt;/span&gt;(Key=&lt;span style="COLOR: #a31515"&gt;"HomeIndex"&lt;/span&gt;, Title=&lt;span style="COLOR: #a31515"&gt;"Index"&lt;/span&gt;, Description=&lt;span style="COLOR: #a31515"&gt;"Description of Index"&lt;/span&gt;, Url=&lt;span style="COLOR: #a31515"&gt;"/Home/Index"&lt;/span&gt;, ParentKey=&lt;span style="COLOR: #a31515"&gt;"Root"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ActionResult&lt;/span&gt; Index()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        { &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;for&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 10; i++)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteMapNode&lt;/span&gt; node = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteMapNode&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;SiteMap&lt;/span&gt;.Provider, &lt;span style="COLOR: #a31515"&gt;"HomeItem_"&lt;/span&gt; + i.ToString());&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                node.Url = &lt;span style="COLOR: #a31515"&gt;"/Home/Item/"&lt;/span&gt; + i.ToString();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                node.Title = &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR: #a31515"&gt;"Item [id={0}]"&lt;/span&gt;, i);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                node.IsDynamic = &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;                &lt;span style="COLOR: #2b91af"&gt;SiteMap&lt;/span&gt;.CurrentNode.ChildNodes.Add(node);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            ViewData[&lt;span style="COLOR: #a31515"&gt;"Title"&lt;/span&gt;] = &lt;span style="COLOR: #a31515"&gt;"Home Page"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            ViewData[&lt;span style="COLOR: #a31515"&gt;"Message"&lt;/span&gt;] = &lt;span style="COLOR: #a31515"&gt;"Welcome to ASP.NET MVC!"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; View();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        [&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNode&lt;/span&gt;(Key = &lt;span style="COLOR: #a31515"&gt;"HomeIndexAbout"&lt;/span&gt;, Title = &lt;span style="COLOR: #a31515"&gt;"About"&lt;/span&gt;, Description = &lt;span style="COLOR: #a31515"&gt;"Description of us"&lt;/span&gt;, ParentKey = &lt;span style="COLOR: #a31515"&gt;"HomeIndex"&lt;/span&gt;, Url = &lt;span style="COLOR: #a31515"&gt;"/Home/About"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ActionResult&lt;/span&gt; About()&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            ViewData[&lt;span style="COLOR: #a31515"&gt;"Title"&lt;/span&gt;] = &lt;span style="COLOR: #a31515"&gt;"About Page"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; View();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        [&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNode&lt;/span&gt;(Key = &lt;span style="COLOR: #a31515"&gt;"HomeItem"&lt;/span&gt;, Description = &lt;span style="COLOR: #a31515"&gt;"An item, simple one"&lt;/span&gt;, IsDynamic = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;, ParentKey = &lt;span style="COLOR: #a31515"&gt;"HomeIndex"&lt;/span&gt;, Title = &lt;span style="COLOR: #a31515"&gt;"Item {id}"&lt;/span&gt;, Url = &lt;span style="COLOR: #a31515"&gt;@"/Home/Item/\b(?&amp;lt;id&amp;gt;\d+)"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ActionResult&lt;/span&gt; Item(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; id)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;SiteMap&lt;/span&gt;.CurrentNode.Title = &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR: #a31515"&gt;"Item - foo[{0}]"&lt;/span&gt;, id);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            ViewData[&lt;span style="COLOR: #a31515"&gt;"id"&lt;/span&gt;] = id;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; View();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        [&lt;span style="COLOR: #2b91af"&gt;AspNetMvcSiteNode&lt;/span&gt;(Key = &lt;span style="COLOR: #a31515"&gt;"HomeItemEdit"&lt;/span&gt;, Description = &lt;span style="COLOR: #a31515"&gt;"Edit of the item, simple one"&lt;/span&gt;, IsDynamic = &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;, ParentKey = &lt;span style="COLOR: #a31515"&gt;"HomeItem"&lt;/span&gt;, Title = &lt;span style="COLOR: #a31515"&gt;"Edit"&lt;/span&gt;, Url = &lt;span style="COLOR: #a31515"&gt;@"/Home/Edit/\d+"&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ActionResult&lt;/span&gt; Edit(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; id)&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        {&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;SiteMap&lt;/span&gt;.CurrentNode.ParentNode.Title = &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR: #a31515"&gt;"Item - foo[{0}]"&lt;/span&gt;, id);&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;SiteMap&lt;/span&gt;.CurrentNode.ParentNode.Url = &lt;span style="COLOR: #a31515"&gt;"/Home/Item/"&lt;/span&gt; + id;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            ViewData[&lt;span style="COLOR: #a31515"&gt;"id"&lt;/span&gt;] = id;&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            ViewData[&lt;span style="COLOR: #a31515"&gt;"name"&lt;/span&gt;] = id.ToString();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; View();&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;        }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt; &lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;    }&lt;/pre&gt;
&lt;pre style="MARGIN: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;You have my code, so go ahead and play with it.  If you find improvements, let me/us know.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;font face="Arial"&gt;
&lt;h3&gt;&lt;font face="Arial"&gt;Regex in the DynamicUrl &lt;/font&gt;&lt;/h3&gt;
&lt;/font&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;font face="Arial"&gt;As mentionned above, my first "pass" at the attribute pattern above was to rely on the Provider to magically render the Title at run-time based on the "rawUrl" parameter, and a mix of title and DynamicUrl regex pattern.  &lt;/font&gt;But this idea only works if the value you want to show in the Title is the "id" !  &lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;font face="Arial"&gt;Home &amp;gt; Cars [25]  // ok because id=25 is the value to show.&lt;/font&gt; &lt;/li&gt;
    &lt;li&gt;Home &amp;gt; Cars [Porsche]  // impossible because the provider can't render "Porsche" from the id 25...  so, problem 1 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Problem 2, the "rawUrl" sent to the method FindSiteMapNode(string rawUrl) only works for the "current node", so the: &lt;strong&gt;Home &amp;gt; Cars [25] &amp;gt; Edit&lt;/strong&gt; wouldn't be possible, because the "Cars [25]" portion would actually be rendered by the "parent" url being the "view", not the "edit".&lt;/p&gt;
&lt;p&gt;So I kept the regex algorithm just in case it would be useful for someone someday.  Check the: &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SiteMapNode&lt;/span&gt; FindSiteMapNode(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; rawUrl) Method from the Provider to see how I'm using it.&lt;/p&gt;
&lt;p&gt;Have fun......  life's short.&lt;/p&gt;
&lt;p&gt;Pat&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126987"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126987" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/126987.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2008/11/12/126987.aspx</guid>
            <pubDate>Thu, 13 Nov 2008 03:48:12 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/126987.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2008/11/12/126987.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/126987.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/126987.aspx</trackback:ping>
        </item>
        <item>
            <title>Migrating VSS 2005 to TFS 2008</title>
            <link>http://geekswithblogs.net/Patware/archive/2008/11/12/126980.aspx</link>
            <description>&lt;p&gt;I finally and succesfully migrated a VSS 2005 Database to TFS 2008.&lt;/p&gt;
&lt;p&gt;I got soo many problems/errors.  Things like:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Migration tool worked, but only the folders have been created in TFS. No file has been created, &lt;/li&gt;
    &lt;li&gt;&lt;font face="Arial"&gt;Another migration warned that TF60085:  No file or folder to migrate&lt;/font&gt; &lt;/li&gt;
    &lt;li&gt;DCOM errors on the server.&lt;/li&gt;
    &lt;li&gt;When re-creating a TFS Project, &lt;font face="Arial"&gt;TF30162: Task "WITs" from Group "WorkItemTracking" failed&lt;/font&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, after migrating "empty folders" the first time, I tried to delete the projects in TFS and re-importing them...  It turned to be a mess.........  I had to run the TFSDeleteProject.exe...&lt;/p&gt;
&lt;p&gt;Here are my findings that may or may not be evident for mortals.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;You must run the VSSConverter.exe from a "client" computer (not the TFS server)&lt;/li&gt;
    &lt;li&gt;The account you're using must have "project creation" priviliges on the TFS server&lt;/li&gt;
    &lt;li&gt;Check for DCOM errors on the server&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If I had time and gutts, I'd start all over again (new os and all) and re-run everything with the following steps just to QA my steps!&lt;/p&gt;
&lt;p&gt;To fix the DCOM errors, &lt;/p&gt;
&lt;p&gt;Open Component Services &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;
    &lt;div align="left"&gt;Start--&amp;gt;Administrative Tools--&amp;gt;Component Services&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div align="left"&gt;Expand Component Services, Computers, My Computer, DCOM Config.&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div align="left"&gt;Find the application (IIS WAMREG Admin Service / CLSID &lt;font size="2"&gt;{61738644-F196-11D0-9953-00C04FD919C1}&lt;/font&gt;). &lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div align="left"&gt;Right-Click--&amp;gt;Properties and select the Security tab. &lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div align="left"&gt;For the "Launch and Activation Permissions, ensure that the Customize radio button is selected, and click Edit.&lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div align="left"&gt;Add your service account (check the DCOM error message in the event viewer to find the right one), in my case, it was "&lt;font size="2"&gt;NT AUTHORITY\NETWORK SERVICE&lt;/font&gt;"&lt;/div&gt;
    &lt;ul&gt;
        &lt;li&gt;
        &lt;div align="left"&gt;Local Launch &lt;/div&gt;
        &lt;/li&gt;
        &lt;li&gt;
        &lt;div align="left"&gt;Remote Launch (not sure for this)&lt;/div&gt;
        &lt;/li&gt;
        &lt;li&gt;
        &lt;div align="left"&gt;Local Activation&lt;/div&gt;
        &lt;/li&gt;
        &lt;li&gt;
        &lt;div align="left"&gt;Remote Activation (not sure for this)&lt;/div&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div align="left"&gt;Restart IIS and continue on. &lt;/div&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This "should" fix the DCOM errors in the future..  hehe..  &lt;/p&gt;
&lt;p&gt;As for the &lt;font face="Arial"&gt;TF30162: Task "WITs" from Group "WorkItemTracking" failed.  I don't understand, but after "browsing" IIS console, re-starting IIS, I was able to re-create a new TFS Project without the &lt;font face="Arial"&gt;TF30162 error above.  mmm.  maybe we just need to wait a few minutes (for sub-processes to finish/garbage collect) and a restart iis to clear caching. anywhoooo&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;ok, now back to migration&lt;/p&gt;
&lt;p&gt;Perform the following steps from the client computer unless noted.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 1. Test Project creation on TFS&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Open Visual Studio, connect to the TFS Server, try to create a project and upload a file to the Source Control.  If all works, continue, if not, fix !&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 2: Analyze the VSS&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Run the Analyze.exe.  Something like&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;"C:\Program Files\Microsoft Visual Studio\VSS\win32\ANALYZE.EXE" -f -c -d -v1 "d:\vss\data"&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 3: get rid of checked outs files&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There will likely be files that are checked out (older/defunct projects or un-monitored projects).  &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Open VSS (client) &lt;/li&gt;
    &lt;li&gt;Search/Status Search&lt;/li&gt;
    &lt;li&gt;Choose "Display all checked out files"&lt;/li&gt;
    &lt;li&gt;Search Area "Search in in all projects"&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If there are files found, send an email to your team or kill/"Undo Checkout" all files.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Open VSS client as &lt;strong&gt;admin&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Right click the root "$/"&lt;/li&gt;
    &lt;li&gt;Choose &lt;strong&gt;Undo Checkout&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Recursive = True, Local Copy = Leave, ok&lt;/li&gt;
    &lt;li&gt;Confirm all mesages...  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 4: install proper sps and hot fixes&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;if you run the VSSConverter and run into something like this:&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Initializing...&lt;br /&gt;
VSSConverter has detected that Visual SourceSafe does not have the recommended u&lt;br /&gt;
pdates installed.  To ensure optimal results, install the updates referred to in&lt;br /&gt;
 Knowledge Base Article 950185.  Proceeding without these updates may lead to pr&lt;br /&gt;
oblems during migration.  Continue the migration without the updates (Y/N)?n&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;That's because the VSSConverter.exe needs to be updated (hotfix).&lt;/p&gt;
&lt;p&gt;Well, &lt;a href="http://support.microsoft.com/kb/950185"&gt;kb950185&lt;/a&gt;, although the information seems to be correct, it wasn't clear that the hotfix can be found at  &lt;a href="http://code.msdn.microsoft.com/"&gt;http://code.msdn.microsoft.com/&lt;/a&gt; (the url is misleading, I think).  &lt;/p&gt;
&lt;p&gt;Also, on that code.msdn page, to download the actual "exe", you have to click on "Current release"... Here's the direct link to the english (international) download page: &lt;font face="Arial"&gt;&lt;a href="http://code.msdn.microsoft.com/KB950185/Release/ProjectReleases.aspx?ReleaseId=1123"&gt;http://code.msdn.microsoft.com/KB950185/Release/ProjectReleases.aspx?ReleaseId=1123&lt;/a&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;At the time of this writting, I have the following (all in English language, OSes and software):&lt;/p&gt;
&lt;p&gt;Client: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Visual SourceSafe 2005 + Visual SourceSafe 2005 SP1&lt;/li&gt;
    &lt;li&gt;Visual Studio 2008 + Visual Studio 2008 SP1&lt;/li&gt;
    &lt;li&gt;TFS 2008 Explorer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Server:&lt;/p&gt;
&lt;p&gt;- Team Foundation Server 2008 + TFS 2008 Explorer + TFS SP1&lt;/p&gt;
&lt;p&gt;Note that all three (VSS client, TeamFoundationClient/Explorer and VSSConverter) must have the same language in order for VSSConverter to work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Step 5: Run!&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Follow the "standard" steps to migrate.  Here's my settings.xml file:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;
&amp;lt;SourceControlConverter&amp;gt;&lt;br /&gt;
  &amp;lt;ConverterSpecificSetting&amp;gt;&lt;br /&gt;
    &amp;lt;Source name="VSS"&amp;gt;&lt;br /&gt;
      &amp;lt;VSSDatabase name="E:\VSS\Patware1.0" /&amp;gt;&lt;br /&gt;
      &amp;lt;UserMap name="E:\tfs\usermapPatware1.0.xml"  /&amp;gt;&lt;br /&gt;
    &amp;lt;/Source&amp;gt;&lt;br /&gt;
    &amp;lt;ProjectMap&amp;gt;&lt;br /&gt;
      &amp;lt;Project Source="$/" Destination="$/Patware/"/&amp;gt;&lt;br /&gt;
    &amp;lt;/ProjectMap&amp;gt;&lt;br /&gt;
  &amp;lt;/ConverterSpecificSetting&amp;gt;&lt;br /&gt;
  &amp;lt;Settings&amp;gt;&lt;br /&gt;
    &amp;lt;!--&amp;lt;Output file="E:\tfs\analysisPatware1.0.xml"  /&amp;gt;--&amp;gt;&lt;br /&gt;
     &amp;lt;TeamFoundationServer name="turner" port="8080" protocol="http"&amp;gt;&amp;lt;/TeamFoundationServer&amp;gt; &lt;br /&gt;
  &amp;lt;/Settings&amp;gt;&lt;br /&gt;
&amp;lt;/SourceControlConverter&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;I "basically" used the same file for the analyze and the migrate portion.  I simply commented out the proper settings portion.&lt;/p&gt;
&lt;p&gt;Glad it can help if it does!&lt;/p&gt;
&lt;p&gt;Pat&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126980"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126980" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/126980.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2008/11/12/126980.aspx</guid>
            <pubDate>Wed, 12 Nov 2008 20:46:54 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/126980.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2008/11/12/126980.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/126980.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/126980.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.Net MVC Beta - ActionLink isn't generic anymore</title>
            <link>http://geekswithblogs.net/Patware/archive/2008/10/30/126421.aspx</link>
            <description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I just "migrated" from ASP.Net MVC Preview 5 to &lt;a href="http://www.asp.net/mvc/"&gt;ASP.Net MVC Beta&lt;/a&gt;.  I uninstalled Preview 5 and installed the Beta.  I already had checked out previous previews but spent the most time with Preview 5, and didn't want to upgrade my "Preview-5-version-of-my-test-website" just in case there were deprecated or new features, specially in the "New ASP.Net MVC Application" template.  Gutt feeling.  So I created a new Project.&lt;/p&gt;
&lt;p&gt;In Preview 5 release, the Html.ActionLink accepted a generic parameter list, with lambda expression, allowing to strongly-type the controller and it's method, including its parameters.  I really like this right now (my bubble may blow one day).&lt;/p&gt;
&lt;p&gt;The syntax would look like this:&lt;/p&gt;
&lt;p&gt; &lt;font face="Arial"&gt;&lt;font style="BACKGROUND-COLOR: #ffff00"&gt;&amp;lt;%&lt;/font&gt;= Html.ActionLink&amp;lt;CalveNet.Controllers.&lt;font color="#33cccc"&gt;PatwareController&lt;/font&gt;&amp;gt;(c =&amp;gt; c.Index(), &lt;font color="#993300"&gt;"Here"&lt;/font&gt;)&lt;font style="BACKGROUND-COLOR: #ffff00"&gt;%&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;After creating my project, I copied a few files over (aspx pages, controllers, etc.).  But Visual Studio complained that the &lt;/p&gt;
&lt;p&gt;"&lt;font face="Arial"&gt;The non-generic method 'System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper, string, string)' cannot be used with type arguments"&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;I found out that this generic/lambda version of the parameter is from a separate dll, called "&lt;font face="Arial"&gt;&lt;a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=18459"&gt;ASP.NET MVC Beta Futures&lt;/a&gt;".  &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;To make it work, unzip the file, include the "&lt;font face="Arial"&gt;Microsoft.Web.Mvc.dll" to your references, and don't forget to include the namespace in your web.config, under the path: &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;font face="Arial"&gt;
&lt;p&gt;&lt;font face="Arial"&gt;/configuration/system.web/pages/namespaces&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;add the following: &amp;lt;add namespace="Microsoft.Web.Mvc"/&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Pat&lt;/p&gt;
&lt;/font&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126421"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126421" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/126421.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2008/10/30/126421.aspx</guid>
            <pubDate>Fri, 31 Oct 2008 01:09:13 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/126421.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2008/10/30/126421.aspx#feedback</comments>
            <slash:comments>10</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/126421.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/126421.aspx</trackback:ping>
        </item>
        <item>
            <title>CAB/SCSF Mocking Asynchronous Web Methods</title>
            <category>P&amp;P Software Factories</category>
            <link>http://geekswithblogs.net/Patware/archive/2008/10/15/125854.aspx</link>
            <description>&lt;p&gt;Hi there,&lt;/p&gt;
&lt;p&gt;How do you mock an asynchronous web method (web service) call?  You can skip the background and move on directly to the &lt;a href="#Solution"&gt;solution&lt;/a&gt;...&lt;/p&gt;
&lt;h2&gt;Background: &lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;Visual Studio 2005 &lt;/li&gt;
    &lt;li&gt;CAB/SCSF May 2007 &lt;/li&gt;
    &lt;li&gt;C# 2.0 &lt;/li&gt;
    &lt;li&gt;Rhino Mocks (&lt;a href="http://ayende.com/projects/rhino-mocks/downloads.aspx"&gt;version 3.5 for 2.0&lt;/a&gt;) &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In a CAB/&lt;a href="http://www.codeplex.com/smartclient"&gt;SCSF&lt;/a&gt; project I'm working on, I'm testing a Presenter's method "OnViewReady".  In my implementation, this OnViewReady does basically 2 things:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Tells the View to Show a "Loading..." message to the user &lt;/li&gt;
    &lt;li&gt;Issues an asynchronous call to a Web Service &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When the call is returned from the Web Service, the Presenter tells the View to Show the message returned by the Web Service.  &lt;/p&gt;
&lt;p&gt;The method looks like this:&lt;font size="2"&gt; &lt;/font&gt; &lt;/p&gt;
&lt;h2&gt;&lt;a name="Solution"&gt;&lt;/a&gt;Solution&lt;/h2&gt;
&lt;font size="2"&gt;&lt;font size="2"&gt;
&lt;p dir="ltr"&gt;The solution is threefold: &lt;/p&gt;
&lt;ol dir="ltr"&gt;
    &lt;li&gt;Make the Web Service Mocking Friendly &lt;a href="#MakeTheWebServiceMockingFriendly"&gt;...&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;Make the presenter "interface friendly" &lt;a href="#InterfaceFriendly"&gt;...&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;Fine tune the Test Method! :) &lt;a href="#FineTuneTestMethod"&gt;...&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;/font&gt;&lt;/font&gt;
&lt;h3&gt;&lt;a name="MakeTheWebServiceMockingFriendly"&gt;&lt;/a&gt;Web Service Mocking friendly&lt;/h3&gt;
&lt;font size="2"&gt;&lt;font size="2"&gt;
&lt;p&gt;Making the Web Service Mocking friendly was not so evident.  Well, at least, the "mocking async methods" part.&lt;/p&gt;
&lt;p dir="ltr"&gt;To mock a Web Service, you have to extract an interface from the generated web service code (reference.cs), and make the web service code inherit from that interface.  You could make the web service "reference.cs" implement the interface, but may kill that code when you "update web reference".  The trick is to add a second "partial class" that will inherit from that interface.&lt;/p&gt;
&lt;p dir="ltr"&gt;Here goes:&lt;/p&gt;
&lt;ul dir="ltr"&gt;
    &lt;li&gt;In Visual Studio, &lt;/li&gt;
    &lt;li&gt;In your MyAppModule's project, click Add Web Reference and follow the wizard &lt;/li&gt;
    &lt;li&gt;Open the Reference.cs in the IDE (Show All Files) &lt;/li&gt;
    &lt;li&gt;Right Click on the public partial class MyWebService and choose "Refactor -&amp;gt; Extract interface" &lt;/li&gt;
    &lt;li&gt;This will create a IMyWebService interface with all of the methods from you Web Service. &lt;/li&gt;
    &lt;li&gt;Now, add a new class "MyWebService", make sure the namespace and class declaration is the same as the "real" web service.  "public partial class MyWebService", but make it implement the interface you created. &lt;/li&gt;
&lt;/ul&gt;
&lt;p dir="ltr"&gt;This is the web service's signature (in my example, the "MyWebService" is called "GeneralWS")&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeneralWS&lt;/span&gt; : System.Web.Services.Protocols.&lt;span style="COLOR: #2b91af"&gt;SoapHttpClientProtocol&lt;/span&gt; { .. }&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#000000" size="2"&gt;So nothing changed.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#000000" size="2"&gt;This is the interface extracted:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;interface&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;IGeneralWS&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; CancelAsync(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; userState);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Ping();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; PingAsync(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; userState);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; PingAsync();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;event&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;PingCompletedEventHandler&lt;/span&gt; PingCompleted;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Url { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; UseDefaultCredentials { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    }&lt;/p&gt;
&lt;/div&gt;
&lt;p dir="ltr"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;This is the second partial class.  Note that there's no code, just the interface:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeneralWS&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;IGeneralWS&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: green"&gt;//look ma, no hands&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    }&lt;/p&gt;
&lt;/div&gt;
&lt;p dir="ltr"&gt;Now, if you open the reference.cs, check the PingCompletedEventArgs code: The constructor is "internral" !   So, this means that we can't mock the async method because we can't create a new PingCompletedEventArgs when we mimic the callback.&lt;/p&gt;
&lt;p dir="ltr"&gt;Again, what you do, is create an interface and leverage the "partial" declaration of the PingCompletedEventArgs.  Repeat the steps for the Web Service class, but this time, for the EventArgs.&lt;/p&gt;
&lt;p dir="ltr"&gt;Here are my results:&lt;/p&gt;
&lt;font size="2"&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;interface&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;IPingCompletedEventArgs&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Result { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    }&lt;!--EndFragment--&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Add the second "partial" class:&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;PingCompletedEventArgs&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;IPingCompletedEventArgs&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; PingCompletedEventArgs(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; results) : &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;base&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: green"&gt;//We're hard coding the results to an 1-item array (object) since we know &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: green"&gt;//that the web service's Ping method returns a string.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.results = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: blue"&gt;object&lt;/span&gt;[1];&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.results[0] = results;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    }&lt;/p&gt;
&lt;/div&gt;
&lt;/font&gt;&lt;/font&gt;
&lt;p dir="ltr"&gt;&lt;font size="2"&gt;&lt;font color="#000000" size="2"&gt;Ok, that takes care of the "Web Service" part.  At this point, you can run the solution and it will work.  And if you update the web reference, you won't loose a thing.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;h3&gt;&lt;a name="InterfaceFriendly"&gt;&lt;/a&gt;Making the presenter "interface friendly"&lt;/h3&gt;
&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;
&lt;p&gt;&lt;font color="#000000"&gt;Making the presenter "interface friendly" is the well-known "multiple constructor" algorithm.&lt;/font&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;font size="2"&gt;&lt;font color="#000000" size="2"&gt;In a classic web service call, your method will be like this:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;font size="2"&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; doSomethingWild()&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;GeneralWS&lt;/span&gt; gws = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeneralWS&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; returnValue = gws.Ping();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            View.ShowMessage(returnValue);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        }&lt;/p&gt;
&lt;/div&gt;
&lt;p dir="ltr"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;In a "mocking friendly" class, you can't do that.  The class must work with an interface instead and the mocking framework will "mock" that interface for you.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;font color="#000000"&gt;4 steps:&lt;/font&gt;&lt;/p&gt;
&lt;ol dir="ltr"&gt;
    &lt;li&gt;&lt;font color="#000000"&gt;Add a private variable of type Interface (that you created earlier)&lt;/font&gt; &lt;/li&gt;
    &lt;li&gt;&lt;font color="#000000"&gt;&lt;font size="2"&gt;Add a default constructor that will attach a "real web service" to that private interface variable&lt;/font&gt; &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font color="#000000"&gt;&lt;font size="2"&gt;Add a "mockig friendly" constructor where pass in in the mocked interface (this is the real trick)&lt;/font&gt; &lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font color="#000000"&gt;&lt;font size="2"&gt;Change the call to the web service to not create a reference to the "real web service", but simply re-use the private variable of type interface&lt;/font&gt; &lt;/font&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p dir="ltr"&gt;&lt;font color="#000000" size="2"&gt;here's a sample from my presenter (construction part):&lt;/font&gt;&lt;/p&gt;
&lt;font color="#000000"&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;HelloWorldViewPresenter&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;Presenter&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;IHelloWorldView&lt;/span&gt;&amp;gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; PeopleCentralGeneral.&lt;span style="COLOR: #2b91af"&gt;IGeneralWS&lt;/span&gt; _gws;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: green"&gt;//default parameter-less Presenter, for normal code execution&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; HelloWorldViewPresenter()&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            _gws = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;GeneralWS&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            _gws.PingCompleted += &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;PingCompletedEventHandler&lt;/span&gt;(gws_PingCompleted);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: green"&gt;//special constructor for "Mocking Friendlyness"&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; HelloWorldViewPresenter(&lt;span style="COLOR: #2b91af"&gt;IGeneralWS&lt;/span&gt; gws)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            _gws = gws;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            _gws.PingCompleted += &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;PingCompletedEventHandler&lt;/span&gt;(gws_PingCompleted);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        ...&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; This method is a placeholder that will be called by the view when it has been loaded.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; OnViewReady()&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            View.ShowMessage(&lt;span style="COLOR: #a31515"&gt;"Loading..."&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;base&lt;/span&gt;.OnViewReady();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            pingAsync();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        }&lt;/p&gt;
&lt;/div&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;!--EndFragment--&gt;&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; pingAsync()&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: green"&gt;//note that I'm not creating a new reference to the web service but re-using the interace instead..&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: green"&gt;//proper coding would check that _gws isn't null, of course ;)&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            _gws.PingAsync();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; gws_PingCompleted(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: #2b91af"&gt;PingCompletedEventArgs&lt;/span&gt; e)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            View.ShowMessage(e.Result);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        }&lt;/p&gt;
&lt;/div&gt;
&lt;p style="MARGIN: 0px"&gt;        ...&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;}&lt;!--EndFragment--&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p dir="ltr"&gt; &lt;/p&gt;
&lt;/font&gt;&lt;font color="#000000"&gt;&lt;/font&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;h3&gt;&lt;a name="FineTuneTestMethod"&gt;&lt;/a&gt;Fine tuning the Test Method&lt;/h3&gt;
&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;
&lt;p&gt;&lt;font color="#000000"&gt;Fine tuning the Test Method for async web methods requires another trick with the Web Service.&lt;/font&gt;&lt;/p&gt;
&lt;font size="2"&gt;
&lt;p dir="ltr" align="left"&gt;&lt;font color="#000000"&gt;Finally, the Test Method !&lt;/font&gt;&lt;/p&gt;
&lt;p dir="ltr" align="left"&gt;&lt;font color="#000000"&gt;In the HelloWorldViewPresenterTest.cs, here's the Test Method for the OnViewReady:&lt;/font&gt;&lt;/p&gt;
&lt;p dir="ltr" align="left"&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt;A test for OnViewReady ()&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: gray"&gt;///&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        [&lt;span style="COLOR: #2b91af"&gt;TestMethod&lt;/span&gt;()]&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; OnViewReadyTest()&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;MockRepository&lt;/span&gt; repo = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;MockRepository&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: green"&gt;//the mocked general web service&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;IGeneralWS&lt;/span&gt; genWS = repo.StrictMock&amp;lt;&lt;span style="COLOR: #2b91af"&gt;IGeneralWS&lt;/span&gt;&amp;gt;();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: green"&gt;//the mocked view&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;IHelloWorldView&lt;/span&gt; view = repo.StrictMock&amp;lt;&lt;span style="COLOR: #2b91af"&gt;IHelloWorldView&lt;/span&gt;&amp;gt;();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            Support.&lt;span style="COLOR: #2b91af"&gt;TestableRootWorkItem&lt;/span&gt; workitem = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; Support.&lt;span style="COLOR: #2b91af"&gt;TestableRootWorkItem&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: green"&gt;//this will be used to simulate the call back from the web service&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            Rhino.Mocks.Interfaces.&lt;span style="COLOR: #2b91af"&gt;IEventRaiser&lt;/span&gt; pingCompletedRaiser;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;using&lt;/span&gt; (repo.Record())&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: #2b91af"&gt;Expect&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                    .Call(&lt;span style="COLOR: blue"&gt;delegate&lt;/span&gt; { view.ShowMessage(&lt;span style="COLOR: #a31515"&gt;"Loading..."&lt;/span&gt;); });&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: green"&gt;//Expect that the PingAsynch() method will be called&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: #2b91af"&gt;Expect&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                    .Call(&lt;span style="COLOR: blue"&gt;delegate&lt;/span&gt; { genWS.PingAsync(); });&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: green"&gt;//Provide the entry point for the call back.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                genWS.PingCompleted += &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                pingCompletedRaiser = &lt;span style="COLOR: #2b91af"&gt;LastCall&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                    .IgnoreArguments()&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                    .GetEventRaiser();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: #2b91af"&gt;Expect&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                    .Call(&lt;span style="COLOR: blue"&gt;delegate&lt;/span&gt; { view.ShowMessage(&lt;span style="COLOR: #a31515"&gt;"Pong"&lt;/span&gt;); });&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: #2b91af"&gt;HelloWorldViewPresenter&lt;/span&gt; target = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;HelloWorldViewPresenter&lt;/span&gt;(genWS);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            target.View = view;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            target.WorkItem = workitem;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;using&lt;/span&gt; (repo.Playback())&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                target.OnViewReady();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: green"&gt;//This "new EventArgs" would be impossible without the second partial class&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: #2b91af"&gt;PingCompletedEventArgs&lt;/span&gt; args = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;PingCompletedEventArgs&lt;/span&gt;(&lt;span style="COLOR: #a31515"&gt;"Pong"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: green"&gt;//make the callback call....   &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                pingCompletedRaiser.Raise(genWS, args);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: green"&gt;//we're done!&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        }&lt;/p&gt;
&lt;/div&gt;
&lt;p dir="ltr" align="left"&gt;&lt;font color="#000000"&gt;I hope this info will help you in your quest for building better applications.  &lt;/font&gt;&lt;/p&gt;
&lt;p dir="ltr" align="left"&gt;&lt;font color="#000000"&gt;Patrice Calvé&lt;/font&gt;&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=125854"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=125854" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/125854.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2008/10/15/125854.aspx</guid>
            <pubDate>Wed, 15 Oct 2008 13:35:19 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/125854.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2008/10/15/125854.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/125854.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/125854.aspx</trackback:ping>
        </item>
        <item>
            <title>You know you're a Visual Studio User when...</title>
            <link>http://geekswithblogs.net/Patware/archive/2008/09/30/125547.aspx</link>
            <description>&lt;font face="Arial"&gt;You know you're a Visual Studio User when...   &lt;/font&gt;You're typing a document in Microsoft Word and you find yourself hitting CTRL-&amp;lt;space&amp;gt;+TAB to auto-complete a long word and/or you're not too sure of the spelling (in my case, it was hierarchical)!&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=125547"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=125547" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/125547.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2008/09/30/125547.aspx</guid>
            <pubDate>Tue, 30 Sep 2008 18:28:17 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/125547.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2008/09/30/125547.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/125547.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/125547.aspx</trackback:ping>
        </item>
        <item>
            <title>Problem with .Net Web Services having values set incorrectly?</title>
            <link>http://geekswithblogs.net/Patware/archive/2008/05/28/122453.aspx</link>
            <description>&lt;p&gt;So,&lt;/p&gt;
&lt;p&gt;You have a Web Service and a test client.  They (server + client) have been working great for months and all over sudden you're getting weird values.  The values sent from the server seem good, but the Xml/SOAP received doesn't get de-serialized correctly, and everything (or some properties) is set to default values (int=0, guid=&lt;font face="Arial"&gt;{00000000-0000-0000-0000-000000000000}, ...).  Read on ! &lt;img alt="" src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/regular_smile.gif" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;The test client has a web reference to your Web Service.  A few web methods are returning objects (simple objects like Country(Id, NameEn, NameFr, etc.)).&lt;/p&gt;
&lt;p&gt;When you run the Web Service from IE, the result is as expected:&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt; &lt;/font&gt;&lt;/strong&gt; &lt;font color="#0000ff"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;
&lt;div style="MARGIN-LEFT: 1em; TEXT-INDENT: -2em"&gt;&lt;a onfocus="h()" onclick="return false" href="http://localhost:63166/PickList.asmx/GetAllCountrys#"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;-&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#990000"&gt;ArrayOfCountry&lt;/font&gt;&lt;font color="#ff0000"&gt; xmlns:xsi&lt;/font&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/font&gt;&lt;/strong&gt;&lt;font color="#0000ff"&gt;"&lt;/font&gt;&lt;font color="#ff0000"&gt; xmlns:xsd&lt;/font&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;http://www.w3.org/2001/XMLSchema&lt;/font&gt;&lt;/strong&gt;&lt;font color="#0000ff"&gt;"&lt;/font&gt;&lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;&lt;a href="http://tempuri.org/People"&gt;http://tempuri.org/People&lt;/a&gt;"&lt;/font&gt;&lt;/strong&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style="MARGIN-LEFT: 1em; TEXT-INDENT: -2em"&gt;&lt;a onfocus="h()" onclick="return false" href="http://localhost:63166/PickList.asmx/GetAllCountrys#"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;-&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#990000"&gt;Country&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style="MARGIN-LEFT: 1em; TEXT-INDENT: -2em"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt; &lt;/font&gt;&lt;/strong&gt; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#990000"&gt;CountryId&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#990000"&gt;CountryId&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style="MARGIN-LEFT: 1em; TEXT-INDENT: -2em"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt; &lt;/font&gt;&lt;/strong&gt; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#990000"&gt;NameEn&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;strong&gt;Canada&lt;/strong&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#990000"&gt;NameEn&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style="MARGIN-LEFT: 1em; TEXT-INDENT: -2em"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt; &lt;/font&gt;&lt;/strong&gt; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#990000"&gt;NameFr&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;strong&gt;Canada&lt;/strong&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#990000"&gt;NameFr&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style="MARGIN-LEFT: 1em; TEXT-INDENT: -2em"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt; &lt;/font&gt;&lt;/strong&gt; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#990000"&gt;ISOCode&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;strong&gt;CA&lt;/strong&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#990000"&gt;ISOCode&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style="MARGIN-LEFT: 1em; TEXT-INDENT: -2em"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt; &lt;/font&gt;&lt;/strong&gt; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#990000"&gt;Provinces&lt;/font&gt; &lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt; &lt;/font&gt;&lt;/strong&gt; &lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#990000"&gt;Country&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style="MARGIN-LEFT: 1em; TEXT-INDENT: -2em"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt; &lt;/font&gt;&lt;/strong&gt; &lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#990000"&gt;ArrayOfCountry&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;But for a reason or another, when you run it from your Test Client, every darn CountryId is set to 0.  If the the Id is a Guid, every row has a MyId = &lt;font face="Arial"&gt;{00000000-0000-0000-0000-000000000000}.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Try updating your Web Reference(s)!  Right click the Web References -&amp;gt; Update Web Reference.  &lt;/p&gt;
&lt;p&gt;Restart your test client.&lt;/p&gt;
&lt;p&gt;How many times have I fallen in this trap?  &lt;/p&gt;
&lt;p&gt;I hope this post will make me remember this mental note, and enlighten you!&lt;/p&gt;
&lt;p&gt;Have fun, life's short&lt;/p&gt;
&lt;p&gt;Pat&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122453"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122453" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/122453.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2008/05/28/122453.aspx</guid>
            <pubDate>Wed, 28 May 2008 18:32:18 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/122453.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2008/05/28/122453.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/122453.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/122453.aspx</trackback:ping>
        </item>
        <item>
            <title>I'm hangry at reunion.com</title>
            <link>http://geekswithblogs.net/Patware/archive/2008/05/01/121829.aspx</link>
            <description>&lt;p&gt;This morning, I received an invitation from a friend to join &lt;font face="Arial"&gt;&lt;a href="http://www.reunion.com/"&gt;http://www.reunion.com/&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;I like to discover new "networking" sites and the way they each have their own flavor.  So I joined in.&lt;/p&gt;
&lt;p&gt;The registration is nice and works as expected for a "corporate application".   After all, a site that uses SSL and "TRUSTe CERTIFIED PRIVACY" must be in the right path, right?&lt;/p&gt;
&lt;p&gt;The first thing I should have done is check the "web" for known privacy concerns or blogs that talk about it, but I didn't and shame of me, mea culpa.&lt;/p&gt;
&lt;p&gt;Once registered I did what I like to do when I join a new "networking" site, use the contact discovery tool that most have.  As you may know, it's a functionality that downloads the contacts from another web site (gmail, hotmail, yahoo, linkedin, facebook, etc.) and offers you a few options.&lt;/p&gt;
&lt;p&gt;The first thing most applications will do is tell you which downloaded contacts are already registered and offer you to "connect" with them.&lt;/p&gt;
&lt;p&gt;The second thing most applications will do is offer you too choose the "un-registered" users in order to send them an invitation to join.  The better applications will give you the ability to customize the message these people will see.  It's particularly useful when the site isn't in the same language as the contacts you're inviting.  right?&lt;/p&gt;
&lt;p&gt;Well, from my experience with reunion.com, the contact discovery utility is a virus or Trojan.  The site sent an email to everyone in my downloaded contact list without asking me first !&lt;/p&gt;
&lt;p&gt;To everyone that received the reunions invitation on my behalf, I'm sorry.....  it won't happen again, trust me !&lt;/p&gt;
&lt;p&gt;Shame on you reunion.com.  &lt;/p&gt;
&lt;p&gt;1 minute after finding out this problem, I unregistered from the site, hopping that the site was not a spamming site disguised as ligit site.  Let's just say that I changed the password on the "contact list's web site" just in case.&lt;/p&gt;
&lt;p&gt;Not impressed.&lt;/p&gt;
&lt;p&gt;Pat&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121829"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121829" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/121829.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2008/05/01/121829.aspx</guid>
            <pubDate>Thu, 01 May 2008 16:28:15 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/121829.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2008/05/01/121829.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/121829.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/121829.aspx</trackback:ping>
        </item>
        <item>
            <title>Problem with a "No audio" audio/video?</title>
            <link>http://geekswithblogs.net/Patware/archive/2008/03/11/120472.aspx</link>
            <description>So,  You've downloaded a video (screencast for example) and you can't hear a thing and you're running Vista?  You know that your "setup" is correct because you can play music.  You know that the video contains audio because you can see the oscilloscope/spectrum analyzer jump.  Yet, there's no sound.&lt;br /&gt;
&lt;br /&gt;
If you look at the audio codec (file -&amp;gt; properties), it will probably say that the audio is something "mono"...&lt;br /&gt;
&lt;br /&gt;
I bet you have a fancy 8 channel audio card with rear panel: front, rear, side, sub/center, line in, line out and front panel: mic, headphones.&lt;br /&gt;
&lt;br /&gt;
I also bet you have either earphones or left/right speakers in the "front jacks" of the "rear panel".&lt;br /&gt;
&lt;br /&gt;
Well....  depending on your audio card drivers, make sure to specify that you're setup is a "Stereo Audio Channel" and not a "Quadraphonic" or "5.1 Surround" !&lt;br /&gt;
&lt;br /&gt;
Right click the Volume icon from the system tray (or Control Panel -&amp;gt; Classic View -&amp;gt;  Sound):&lt;br /&gt;
&lt;br /&gt;
&lt;img width="411" height="461" src="/images/geekswithblogs_net/Patware/2921/o_Capture.2008.03.11.001.JPG" alt="" /&gt;&lt;br /&gt;
&lt;img alt="" src="file:///C:/Users/calvep/AppData/Local/Temp/moz-screenshot.jpg" /&gt;&lt;br /&gt;
In the playback tab, you'll see a list of playback devices.  If there's only "speakers", chances are that you need to update the audio card device drivers (check your manufacturer).&lt;br /&gt;
&lt;br /&gt;
If your default (green checkbox) is "Speakers", click configure and make sure that the "audio channel" is set to stereo:&lt;br /&gt;
&lt;br /&gt;
&lt;img width="542" height="426" src="/images/geekswithblogs_net/Patware/2921/o_Capture.2008.03.11.002.JPG" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
A trick, to see what "playback device" is currently used by the audio/video program is running, press play on the audio/video program (winamp, windows media player, etc.), the selected playback device will have the sound level progress bar moving.&lt;br /&gt;
&lt;br /&gt;
Of course, your setup (and/or problem) will be probably quite different from mine.  My computer is using an onboard RealTek audio card and I had to &lt;a href="http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=1&amp;amp;PNid=14&amp;amp;PFid=23&amp;amp;Level=4&amp;amp;Conn=3&amp;amp;DownTypeID=3&amp;amp;GetDown=false"&gt;update my driver&lt;/a&gt; since I had a very old driver and couldn't do anything above with the old drivers.&lt;br /&gt;
&lt;br /&gt;
It's "probably" not a codec issue, but a configuration issue.&lt;br /&gt;
&lt;br /&gt;
Good luck...  don't pest.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120472"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120472" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/120472.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2008/03/11/120472.aspx</guid>
            <pubDate>Tue, 11 Mar 2008 20:19:16 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/120472.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2008/03/11/120472.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/120472.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/120472.aspx</trackback:ping>
        </item>
        <item>
            <title>absolutely useless fact</title>
            <link>http://geekswithblogs.net/Patware/archive/2008/02/29/120085.aspx</link>
            <description>&lt;p&gt;Both words "database" and "dataset" are written (on a qwerty keyboard) with the left hand !&lt;/p&gt;
&lt;p&gt;that's it... nothing more&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120085"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120085" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/120085.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2008/02/29/120085.aspx</guid>
            <pubDate>Fri, 29 Feb 2008 18:47:56 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/120085.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2008/02/29/120085.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/120085.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/120085.aspx</trackback:ping>
        </item>
        <item>
            <title>Virtual Server 2005 breaks Visual Studio 2008 WebServer on Vista</title>
            <link>http://geekswithblogs.net/Patware/archive/2008/02/20/119822.aspx</link>
            <description>This weekend, I had this bright idea to install Virtual Server 2005 R2 on my Vista dev box at home to test a theory.&lt;br /&gt;
&lt;br /&gt;
Well, it seems to break Visual Studio's WebServer.  When trying to run or debug an ASP.Net application, I was hit by a "&lt;font size="-1"&gt;&lt;strong&gt;WebDev.WebServer.exe has stopped working&lt;/strong&gt;&lt;/font&gt;".&lt;br /&gt;
&lt;br /&gt;
I tried many things, as you can imagine, but a few were:&lt;br /&gt;
- Reboot&lt;br /&gt;
- Un-installed Virtual Server 2005&lt;br /&gt;
- Un-installed/re-installed the Web Development Feature from the VS installation.&lt;br /&gt;
- Re-ran the various combinations of aspnet_regiis.exe&lt;br /&gt;
&lt;br /&gt;
There was an entry in the Event Log's Application Logs:&lt;br /&gt;
&lt;br /&gt;
Fault bucket 118476878, type 5&lt;br /&gt;
Event Name: CLR20r3&lt;br /&gt;
Response: None&lt;br /&gt;
Cab Id: 0&lt;br /&gt;
&lt;br /&gt;
Problem signature:&lt;br /&gt;
P1: webdev.webserver.exe&lt;br /&gt;
P2: 9.0.0.0&lt;br /&gt;
P3: 4731664b&lt;br /&gt;
P4: System&lt;br /&gt;
P5: 2.0.0.0&lt;br /&gt;
P6: 471ebf0d&lt;br /&gt;
P7: 2c04&lt;br /&gt;
P8: 40&lt;br /&gt;
P9: System.Net.Sockets.Socket&lt;br /&gt;
P10: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System.Net.Sockets.Socket...    &lt;br /&gt;
&lt;br /&gt;
I tried running webdev.webserver.exe manually from the command line:&lt;br /&gt;
C:\Program Files\Common Files\microsoft shared\DevServer\9.0&lt;br /&gt;
C:\Windows\Microsoft.NET\Framework\v2.0.50727&lt;br /&gt;
&lt;br /&gt;
both worked (I tried port 8080 and 8888) (see note at the end)&lt;br /&gt;
&lt;br /&gt;
Anyway, what seems to have fixed the problem was the following:&lt;br /&gt;
&lt;div style="margin-left: 40px;"&gt;&lt;br /&gt;
Disable IPv6 from your network adapters&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
Control Panel -&amp;gt; Network Connections -&amp;gt; for each adapter/connection: disable the TCP/IPv6&lt;br /&gt;
&lt;br /&gt;
notes:&lt;br /&gt;
- When running the webDev exe manually, I didn't (and should have) try to run it with the same port that VS was trying with.&lt;br /&gt;
- I didn't try disabling IPv6 one connection at a time.  Maybe 1 did the trick, not sure.&lt;br /&gt;
&lt;br /&gt;
Ho yes, one weird thing: the web based admin configuration page worked when the Web page launched by VS didn't&lt;br /&gt;
&lt;br /&gt;
Anyway, I'm fixed for now and need to move on.&lt;br /&gt;
&lt;br /&gt;
If this article helps you, woohoo...&lt;br /&gt;
&lt;br /&gt;
If it doesn't, you'll find an answer in google ;)&lt;br /&gt;
&lt;br /&gt;
Pat&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119822"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119822" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Patware/aggbug/119822.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Patrice Calve</dc:creator>
            <guid>http://geekswithblogs.net/Patware/archive/2008/02/20/119822.aspx</guid>
            <pubDate>Thu, 21 Feb 2008 02:49:10 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Patware/comments/119822.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Patware/archive/2008/02/20/119822.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Patware/comments/commentRss/119822.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Patware/services/trackbacks/119822.aspx</trackback:ping>
        </item>
    </channel>
</rss>