<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jeff Lucovsky's blog</title><link>http://blogs.msdn.com/jefflu/default.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Team Foundation: Alerts missing subject line?</title><link>http://blogs.msdn.com/jefflu/archive/2006/08/02/686268.aspx</link><pubDate>Wed, 02 Aug 2006 13:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:686268</guid><dc:creator>jefflu</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/686268.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=686268</wfw:commentRss><description>&lt;P&gt;&lt;FONT color=#000080&gt;Team Foundation creates &lt;EM&gt;alerts &lt;/EM&gt;that notify users and/or web applications of certain events that have occurred. Some of these alerts are used internally by Team Foundation (e.g., notifying another TF component of an important change to group membership data). Most are used by end users to receive notification of work item changes, checkins, and build activitites. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Pete Sheill and others have discussed alerts in the past. Recently, we became aware of a problem that manifests itself through the Team Foundation eventing mechanism which includes alerts.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;When the alert subject line is blank, this often means that one of the assemblies used to process alerts prior to sending isn't working properly. In some cases, these assemblies fail to load and an event log message will be written.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;There are 3 assemblies that process alerts prior to sending to the subscribers&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Microsoft.TeamFoundation.Build.Server.EventFilter.dll&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Microsoft.TeamFoundation.VersionControl.Server.EventFilter.dll&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Microsoft.TeamFoundation.VersionControl.WorkItemTracking.Server.EventFilter.dll&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;These assemblies are loaded by the &lt;STRONG&gt;Services &lt;/STRONG&gt;web application when it starts. This web application matches events with subscription data created from Visual Studio or using the command line tool BisSubscribe&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;We've found that these assemblies do not load when the configuration settings for that web service have been changed using the ASP.NET tab of the web site properties. You can reach this by navigating to the Team Foundation web site from &lt;STRONG&gt;inetmgr, &lt;/STRONG&gt;selecting Properties and then choosing the ASP.NET tab followed by selecting &lt;STRONG&gt;Edit Configuration&lt;/STRONG&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;This causes an attribute to be added to the &lt;STRONG&gt;config&lt;/STRONG&gt; element of the corresponding web.config file. E.g., if you alter the &lt;STRONG&gt;Services&lt;/STRONG&gt; configuration, &lt;EM&gt;installPath\&lt;/EM&gt;Web Services\Services\Web.config is altered.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Before making the configuration change, the web.config files look like&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&amp;lt;configuration&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&amp;lt;!-- Team Foundation/Web application values --&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&amp;lt;/configuration&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;Following a configuration change using&amp;nbsp; &lt;STRONG&gt;Edit Properties:&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&amp;lt;configuration &lt;FONT style="BACKGROUND-COLOR: #a9a9a9"&gt;&lt;SPAN style="BACKGROUND: yellow"&gt;xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"&lt;/SPAN&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Times New Roman" color=#000080&gt;&amp;lt;!-- settings --&amp;gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Times New Roman" color=#000080&gt;&amp;lt;/configuration&amp;gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;FONT face="Times New Roman"&gt;To restore behavior, use an editor or Notepad to remove the namespace attribute. Note that you do not need to run iisreset following this change.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;SPAN style="COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;FONT face="Times New Roman"&gt;The underlying problem is a known issue and is being addressed.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=686268" width="1" height="1"&gt;</description></item><item><title>Error Reporting -- Does anybody review those Watson reports?</title><link>http://blogs.msdn.com/jefflu/archive/2006/03/24/559856.aspx</link><pubDate>Fri, 24 Mar 2006 15:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:559856</guid><dc:creator>jefflu</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/559856.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=559856</wfw:commentRss><description>&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff" color=#000000&gt;I'm part of the group that reviews Watson reports for Team Foundation. On&amp;nbsp;a weekly basis, we meet and review all Watson reports received since the last review period. Each report is first checked to see if it is for a known problem. Many reports are for issues that we have either discovered from internal users or from a previous Watson report. If the issue has not been seen before, then we will gather information and assign a bug to the responsible&amp;nbsp;developers. We also track Watson bugs and make sure that the bug is treated appropriately by the developers.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff" color=#000000&gt;Watson crashes represent a concrete occurrence of an issue -- sometimes, we find that the issue in a Watson report is not something that we can act on (e.g., a time-out condition) but we can handle better by informing the user or using an alternate algorithm.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff" color=#000000&gt;We treat problems reported through Watson seriously and I want to assure you that Team Foundation Watson reports that you permit to be sent to Microsoft will be treated appropriately and timely.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff" color=#000000&gt;Let me know if you have any concerns about sending Watson reports for Team Foundation.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=559856" width="1" height="1"&gt;</description></item><item><title>(Updated) Sample: Version Control RSS Feed</title><link>http://blogs.msdn.com/jefflu/archive/2005/09/23/473248.aspx</link><pubDate>Fri, 23 Sep 2005 15:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:473248</guid><dc:creator>jefflu</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/473248.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=473248</wfw:commentRss><description>&lt;P&gt;I have updated the &lt;STRONG&gt;sample &lt;/STRONG&gt;RSS feed; if you're using Beta 3, you should use the updated feed posted below. The sample was first posted &lt;a href="http://blogs.msdn.com/jefflu/archive/2005/07/27/443900.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The sample below allows you to subscribe to a feed which generates information for a specific user. Append &lt;STRONG&gt;?user=domain\alias &lt;/STRONG&gt;to the subscription path.&lt;/P&gt;
&lt;P&gt;&amp;lt;%@ Page Language="c#" %&amp;gt;&lt;BR&gt;&amp;lt;%@ OutputCache Duration="20" Location="Server" VaryByParam="state" VaryByCustom="minorversion" VaryByHeader="Accept-Language"%&amp;gt;&lt;BR&gt;&amp;lt;%@ Assembly Name="Microsoft.TeamFoundation.Client, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Assembly Name="Microsoft.TeamFoundation.VersionControl.Client, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Assembly Name="Microsoft.TeamFoundation.VersionControl.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Assembly Name="Microsoft.TeamFoundation.VersionControl.Common.Integration, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" %&amp;gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;lt;%&lt;BR&gt;// "Copyright © Microsoft Corporation.&amp;nbsp; All rights reserved.&amp;nbsp; These Samples are based in part on the Extensible Markup Language (XML) 1.0 (Third Edition) specification Copyright © 2004 W3C® (MIT, ERCIM, Keio. All rights reserved. &lt;A href="http://www.w3.org/consortium/legal/2002/copyright-documents-20021231"&gt;http://www.w3.org/consortium/legal/2002/copyright-documents-20021231&lt;/A&gt;."&lt;BR&gt;%&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;%&lt;BR&gt;//This posting is provided "AS IS" with no warranties of any kind and confers no rights.&amp;nbsp; Use of samples included in this posting is subject to the terms specified at &lt;A href="http://www.microsoft.com/info/cpyright.htm"&gt;http://www.microsoft.com/info/cpyright.htm&lt;/A&gt;.&lt;BR&gt;%&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;%@ Import Namespace="System" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Import Namespace="System.Collections" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Import Namespace="System.IO" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Import Namespace="System.Web" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Import Namespace="System.Xml" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Import Namespace="Microsoft.TeamFoundation.Client" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Import Namespace="Microsoft.TeamFoundation.VersionControl.Client"%&amp;gt;&lt;BR&gt;&amp;lt;%@ Import Namespace="Microsoft.TeamFoundation.VersionControl.Common" %&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;%&lt;BR&gt;// Generate an RSS feed for Team Foundation Source Code Control checkins&lt;BR&gt;// &lt;BR&gt;// Note: Only one request per "pester interval" from each system will be honored. See&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pesterInterval below.&lt;BR&gt;//&lt;BR&gt;// This feed returns information about the most recent N checkins. See maxCheckinCount &lt;BR&gt;// below.&lt;BR&gt;//&lt;BR&gt;// Invoking this page without any parameters returns information about all Team&lt;BR&gt;// Foundation checkins up to the maximum count. If a filename is supplied, information&lt;BR&gt;// about the most recent checkins for that file only are returned. Specify a filename&lt;BR&gt;// by adding ?serverPath=&amp;lt;serverPath&amp;gt;. Note that the filename must be expressed as a server&lt;BR&gt;// pathname without the leading $/.&lt;BR&gt;//&lt;BR&gt;// E.g., to see the activity for a file $/teamProjectA/myFile, add this to the Url&lt;BR&gt;// ?serverPath=teamProjectA/myfile&lt;BR&gt;//&lt;BR&gt;// This page returns no items if the file does not exist.&lt;/P&gt;
&lt;P&gt;// ***************************************************&lt;BR&gt;// (Default: on) Set this to true to throttle user requests by host/username&lt;BR&gt;// ***************************************************&lt;BR&gt;bool throttleRequests = true;&lt;/P&gt;
&lt;P&gt;// Ignore requests from the same machine within this interval&lt;BR&gt;int pesterInterval = 30 * 1000; // expressed in milliseconds&lt;/P&gt;
&lt;P&gt;int maxSubjectLength = 60;&lt;/P&gt;
&lt;P&gt;if (throttleRequests)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // If the originating system has been serviced recently, drop the request&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; object lastRequest = Context.Cache[User.Identity.Name+Request.UserHostAddress];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (lastRequest != null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((int) lastRequest + pesterInterval &amp;lt; Environment.TickCount)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;// Default -- everything under $/&lt;BR&gt;string serverPathname = VersionControlPath.RootFolder;&lt;BR&gt;string username = null;&lt;/P&gt;
&lt;P&gt;try&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check whether information on a specific file or userwas requested&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string pathname = Request.Params["serverPath"];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pathname != null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The pathname does not contain a leading '$'&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; serverPathname = VersionControlPath.Combine(VersionControlPath.RootFolder, pathname);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The pathname is valid.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; username = Request.Params["user"];&lt;BR&gt;}&lt;BR&gt;catch&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.StatusCode = 404;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.End();&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;// The maximum number of changes to return per query&lt;BR&gt;int maxCheckinCount = 50;&lt;/P&gt;
&lt;P&gt;string rssVersion = "2.0";&lt;BR&gt;string rssTtl = "5";&lt;BR&gt;string rssLanguage = "en-US";&lt;BR&gt;string rssLink = Request.Url.ToString();&lt;BR&gt;string rssEmptyComment = "None";&lt;BR&gt;string rssTitle = "Team Foundation RSS Feed for Source Code Control Checkins";&lt;BR&gt;string rssGenerator = "Sample RSS Feed Generator for Team Foundation";&lt;BR&gt;string rssDescription = "&amp;lt;p&amp;gt;This feed provides information on Team Foundation Checkins. Each Team Foundation checkin is manifested as a changeset. The changesets that have been created recently are listed here.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;This feed contains the most recent &amp;lt;i&amp;gt;{0}&amp;lt;/i&amp;gt; checkin(s).&amp;lt;/p&amp;gt;";&lt;BR&gt;string rssItemOnBehalfOf = "(on behalf of {0}) ";&lt;BR&gt;string rssItemTitle = "Check-in {0}: {1}";&lt;BR&gt;string rssItemSubject = "Check-in contains changes to {0} item(s)";&lt;BR&gt;string rssNoItemsAvailableDescription = "An error occurred obtaining the latest checkin information from Team Foundation. Try again later.";&lt;BR&gt;string rssItemDescription = "&amp;lt;p&amp;gt;&amp;lt;a href=\"{5}\"&amp;gt;Changeset {0}&amp;lt;/a&amp;gt; was checked in by &amp;lt;i&amp;gt;{1} {2}&amp;lt;/i&amp;gt;on {3}. This checkin includes changes to {4} item(s).&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Checkin comment: {6}&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;You can view the details of the checkin by selecting the provided link.&amp;lt;/p&amp;gt;";&lt;BR&gt;string exceptionMessage = "&amp;lt;p&amp;gt;An exception occurred while getting updated information from Team Foundation; the detailed exception message is &amp;lt;i&amp;gt;{0}&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;";&lt;BR&gt;string itemNotFoundErrorMessage = "&amp;lt;p&amp;gt;There were no items found.&amp;lt;/p&amp;gt;";&lt;BR&gt;string accessDeniedErrorMessage = "&amp;lt;p&amp;gt;You do not have permission to obtain the Team Foundation checkin information.&amp;lt;/p&amp;gt;";&lt;BR&gt;string otherErrorMessage = "&amp;lt;p&amp;gt;An error occurred. This may be a transient error or a permanent one. Please check the event log for messages from VSTF Source Code Control&amp;lt;/p&amp;gt;";&lt;/P&gt;
&lt;P&gt;Response.ContentType = "text/xml";&lt;BR&gt;XmlTextWriter xt = new XmlTextWriter(Response.OutputStream, null);&lt;BR&gt;// Begin creating the XML document&lt;BR&gt;xt.WriteStartElement("rss");&lt;BR&gt;xt.WriteAttributeString("version", rssVersion);&lt;BR&gt;xt.WriteStartElement("channel");&lt;BR&gt;xt.WriteElementString("title", rssTitle);&lt;BR&gt;xt.WriteElementString("ttl", rssTtl);&lt;BR&gt;xt.WriteElementString("link", rssLink);&lt;BR&gt;xt.WriteElementString("pubDate", DateTime.Now.ToString());&lt;BR&gt;xt.WriteElementString("language", rssLanguage);&lt;BR&gt;xt.WriteElementString("generator", rssGenerator);&lt;BR&gt;try&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RecursionType recursionType = RecursionType.Full;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Obtain the list of changes from the mid-tier; the number of changes is reported in&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the channel description. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IEnumerable changesetEnum = null;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TeamFoundationServer Tfs = null;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object cacheEntry = Context.Cache["TeamFoundationServer"];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (cacheEntry == null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Note: only works on localhost&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tfs = TeamFoundationServerFactory.GetServer("&lt;A href="http://localhost:8080/"&gt;http://localhost:8080&lt;/A&gt;");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Context.Cache["TeamFoundationServer"] = Tfs;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tfs = (TeamFoundationServer) cacheEntry;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VersionControlServer Vcs = (VersionControlServer) Tfs.GetService(typeof(VersionControlServer));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Return changes&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; changesetEnum = Vcs.QueryHistory(serverPathname,&amp;nbsp; // on this item&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VersionSpec.Latest, // item version&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // that are not deleted&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recursionType,&amp;nbsp;&amp;nbsp; // at or below this item&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; username,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // user&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; null,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // start version&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; null,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // stop version&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxCheckinCount, // Up to this many changes&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; true,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // include changes&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; false);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int changeCount = 0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (Changeset change in changesetEnum)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; changeCount++;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("description", String.Format(rssDescription, changeCount));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception e)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (e is ItemNotFoundException)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rssNoItemsAvailableDescription += itemNotFoundErrorMessage;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rssNoItemsAvailableDescription += otherErrorMessage;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rssNoItemsAvailableDescription += String.Format(exceptionMessage, e.Message);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("description", rssNoItemsAvailableDescription);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteEndElement(); // channel&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create an item for each returned changeset.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (Changeset change in changesetEnum)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteStartElement("item");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string onBehalfOf = null;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Include the committer if it differs from the changeset owner.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // This occurs when a proxy agent performs the checkin.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!change.Owner.Equals(change.Committer))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onBehalfOf = String.Format(rssItemOnBehalfOf, change.Owner);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Generate a subject based on the checkin comment&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string subject = rssEmptyComment;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!String.IsNullOrEmpty(change.Comment))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subject = change.Comment.Trim();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int max = Math.Min(subject.Length, maxSubjectLength);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int newline = subject.IndexOf('\n', 0, max);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (newline != -1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (newline &amp;gt; 0 &amp;amp;&amp;amp; subject[newline - 1] == '\r')&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newline--;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subject = subject.Substring(0, newline);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (subject.Length &amp;gt;= maxSubjectLength)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subject = String.Concat(subject.Substring(0, maxSubjectLength), "...");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("title", String.Format(rssItemTitle, change.ChangesetId, subject));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string csLink = HttpUtility.HtmlEncode(new ChangesetUri(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String.Format("{0}://{1}:{2}",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Request.Url.Scheme,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Request.Url.Host,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Request.Url.Port),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; change.ChangesetId,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UriType.Extended).ToUrl());&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("description", String.Format(rssItemDescription,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; change.ChangesetId,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; change.Committer,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onBehalfOf,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; change.CreationDate,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; change.Changes.Length,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; csLink,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; change.Comment));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("link", csLink);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("subject", String.Format(rssItemSubject,change.Changes.Length));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("author", onBehalfOf == null ? change.Committer : change.Owner);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("pubDate", change.CreationDate.ToString());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("guid", change.ChangesetId.ToString());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteEndElement(); // item&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;catch (Exception e)&lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.StatusCode = 404;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.End();&lt;BR&gt;}&lt;BR&gt;finally&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (throttleRequests)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Context.Cache[Request.UserHostAddress] = Environment.TickCount;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;%&amp;gt;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=473248" width="1" height="1"&gt;</description></item><item><title>Team Foundation: What's my server doing? (Part 2)</title><link>http://blogs.msdn.com/jefflu/archive/2005/08/30/457923.aspx</link><pubDate>Tue, 30 Aug 2005 13:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:457923</guid><dc:creator>jefflu</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/457923.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=457923</wfw:commentRss><description>&lt;P&gt;In my last &lt;a href="http://blogs.msdn.com/jefflu/archive/2005/08/11/450342.aspx"&gt;post&lt;/A&gt;, I wrote about the mechanism within Team Foundation that records web method activity. You can mine the database to and learn much about how Team Foundation is being used. Recall that the web method information is written to a database so the full power of SQL queries is available.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="Courier New"&gt;&lt;FONT face="Times New Roman"&gt;List all Team Foundation activity&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Combine the &lt;EM&gt;command &lt;/EM&gt;and &lt;EM&gt;parameter&lt;/EM&gt; table (the &lt;FONT face="Courier New"&gt;left join&lt;/FONT&gt; is necessary since some web method rows in the command table may not record parameter information -- more on this later)&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;select *&lt;BR&gt;from tbl_command c&lt;BR&gt;left join tbl_parameter p&lt;BR&gt;on c.commandid = p.commandid&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="Courier New"&gt;&lt;FONT face="Times New Roman"&gt;List all Team Foundation Version Control activity&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Same as the previous query with the addition of filtering on the &lt;FONT face="Courier New"&gt;Application&lt;/FONT&gt; column (&lt;EM&gt;command&lt;/EM&gt; table).&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;select *&lt;BR&gt;from tbl_command c&lt;BR&gt;left join tbl_parameter p&lt;BR&gt;on c.commandid = p.commandid&lt;BR&gt;-- Just Version Control (other choices: Data Warehouse, Integration, Work Item Tracking, Proxy)&lt;BR&gt;where c.Application = 'Version Control'&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="Courier New"&gt;&lt;FONT face="Times New Roman"&gt;Show the web methods with the longest execution time&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The &lt;FONT face="Courier New"&gt;ExecutionTime&lt;/FONT&gt; column contains the execution time, in &lt;STRONG&gt;microseconds&lt;/STRONG&gt;, of the web method.&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;select *&lt;BR&gt;from tbl_command c&lt;BR&gt;left join tbl_parameter p&lt;BR&gt;on c.commandid = p.commandid&lt;BR&gt;order by c.ExecutionTime desc&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="Courier New"&gt;&lt;FONT face="Times New Roman"&gt;Show the web methods called the most&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;select command, count (command) as TimesCalled&lt;BR&gt;from tbl_command c&lt;BR&gt;group by command&lt;BR&gt;order by TimesCalled desc&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="Courier New"&gt;&lt;FONT face="Times New Roman"&gt;Show the web method calls made by userN&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The &lt;FONT face="Courier New"&gt;IdentityName&lt;/FONT&gt; column contains the Windows account name of the caller.&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;select *&lt;BR&gt;from tbl_command c&lt;BR&gt;left join tbl_parameter p&lt;BR&gt;on c.commandid = p.commandid&lt;BR&gt;-- IdentityName contains the account name of the user&amp;nbsp;(domain\account)&lt;BR&gt;where c.IdentityName like '%userN%'&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="Courier New"&gt;&lt;FONT face="Times New Roman"&gt;Show the web method calls made from Visual Studio&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The &lt;FONT face="Courier New"&gt;UserAgent&lt;/FONT&gt; column contains the name of the executable from which the web method call originates.&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;select *&lt;BR&gt;from tbl_command c&lt;BR&gt;left join tbl_parameter p&lt;BR&gt;on c.commandid = p.commandid&lt;BR&gt;-- UserAgent contains the executable name&lt;BR&gt;where c.Useragent like '%devenv.exe%'&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&lt;STRONG&gt;Other tidbits&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL dir=ltr&gt;
&lt;LI&gt;
&lt;DIV&gt;Rows in the &lt;EM&gt;parameter &lt;/EM&gt;table contain the &lt;EM&gt;commandId&lt;/EM&gt; value of the corresponding row in the &lt;EM&gt;command &lt;/EM&gt;table. Note that there may be multiple rows in the parameter table for a single command&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;Parameters are recorded when (1) An error occurs during web method execution (indicated by the &lt;FONT face="Courier New"&gt;Status&lt;/FONT&gt; column of the command table set to -1); (2) The web method took longer than 30 seconds to execute (recall that the &lt;FONT face="Courier New"&gt;ExecutionTime&lt;/FONT&gt; values are in &lt;STRONG&gt;microseconds&lt;/STRONG&gt;) or (3) the Web method logging level is set to &lt;FONT face="Courier New"&gt;All &lt;/FONT&gt;&lt;FONT face="Times New Roman"&gt;in the &lt;FONT face="Courier New"&gt;web.config&lt;/FONT&gt; file.&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=457923" width="1" height="1"&gt;</description></item><item><title>Team Foundation: What's my server doing?</title><link>http://blogs.msdn.com/jefflu/archive/2005/08/11/450342.aspx</link><pubDate>Thu, 11 Aug 2005 13:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:450342</guid><dc:creator>jefflu</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/450342.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=450342</wfw:commentRss><description>&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #c0c0c0"&gt;We designed a mechanism to record web method activity for all of the Team Foundation web applications. Information about each web method invocation is recorded in a single database.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #c0c0c0"&gt;We don't provide any ways to get to that data -- however, if you have access to the data tier you can write a few SQL queries to see what your Team Foundation web applications are doing.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Web method logging is controlled by a setting in each web application's web.config file. The default configuration disables web method logging but it's pretty simple to enable it.&lt;/P&gt;
&lt;P&gt;Locate each &lt;FONT face="Courier New"&gt;web.config&lt;/FONT&gt; file under the installation directory, i.e., &lt;FONT face="Courier New"&gt;D:\Program Files\Microsoft Visual Studio 2005 Enterprise Server&lt;/FONT&gt;.&lt;/P&gt;
&lt;P&gt;In the &amp;lt;appSettings&amp;gt; section you should see something like the following:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT face="Courier New"&gt;&amp;lt;!--&amp;nbsp; WEB METHOD LOGGING&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Specify whether web methods are to be logged always, never, or only&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when errors occurs. Without a value for commandLogging, web methods&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; are not logged.&amp;nbsp; Valid values are:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (web methods are never logged)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Normal&amp;nbsp;&amp;nbsp; (log everything, except certain high-frequency web methods)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; All&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (log everything, even certain high-frequency web methods)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OnError&amp;nbsp; (only log web methods that have errors)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Values specified here take precedence over values set administratively via&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; web method.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add key="commandLogging" value="&lt;FONT color=#ff0000&gt;None&lt;/FONT&gt;"/&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Change &lt;FONT face="Courier New"&gt;None&lt;/FONT&gt; to &lt;FONT face="Courier New"&gt;Normal&lt;/FONT&gt; or &lt;FONT face="Courier New"&gt;All &lt;/FONT&gt;&lt;FONT face="Times New Roman"&gt;and web method activity will now be recorded.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;I'll go into the details of how we collect and record the data if enough people are interested. Note that the data is spooled for a short while before it's written to the database.&lt;/P&gt;
&lt;P&gt;The database (for now, it's will be renamed) is called VSTEAMSCCAdmin. There are some historical reasons for including SCC in the name; it'll be called TFSActivityLogging in the shipping product.&lt;/P&gt;
&lt;P&gt;There are two tables in this database: one records information about each web method and the other contains parameter information for each web method.&lt;/P&gt;
&lt;P&gt;A simple query that shows web method activity plus the parameters (SOAP parameters) is (note: the LEFT join is necessary since there may not be values from the parameter table for each command):&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;select&amp;nbsp;*&lt;BR&gt;from tbl_command (nolock) c&lt;BR&gt;left join tbl_parameter&amp;nbsp; (nolock) p&lt;BR&gt;on c.commandid = p.commandid&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The &lt;EM&gt;command table&lt;/EM&gt; contains information about the web method itself and includes:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;Command identifier &lt;/EM&gt;A unique id used as a key in the parameter table 
&lt;LI&gt;&lt;EM&gt;Application &lt;/EM&gt;Identifies the Team Foundation Web Application servicing the web method 
&lt;LI&gt;&lt;EM&gt;Command &lt;/EM&gt;The name of the web method 
&lt;LI&gt;&lt;EM&gt;StartTime &lt;/EM&gt;When the web method was invoked 
&lt;LI&gt;&lt;EM&gt;ExecutionTime &lt;/EM&gt;How long the web method executed (&lt;STRONG&gt;microseconds)&lt;/STRONG&gt; 
&lt;LI&gt;&lt;EM&gt;IdentityName &lt;/EM&gt;The user invoking the web method 
&lt;LI&gt;&lt;EM&gt;IPAddress &lt;/EM&gt;Origination of the web method execution request 
&lt;LI&gt;&lt;EM&gt;UserAgent &lt;/EM&gt;The provided user agent string (this will contain the name of the executable as well) 
&lt;LI&gt;&lt;EM&gt;UniqueIdentifier &lt;/EM&gt;(optional) When specified, this value correlates multiple web method records. E.g., a command like &lt;EM&gt;checkin&lt;/EM&gt; will perform multiple web method calls. The identifier correlates the web method calls made for a specific occurrence of the command. 
&lt;LI&gt;&lt;EM&gt;CommandIdentifier &lt;/EM&gt;(optional) The name of the command-line tool that's invoking the web method (note that a single command like &lt;EM&gt;shelve&lt;/EM&gt; will perform multiple web methods)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The &lt;EM&gt;parameter table &lt;/EM&gt;is pretty straight forward -- note that parameters are &lt;EM&gt;conditionally reported&lt;/EM&gt;.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;CommandId &lt;/EM&gt;Correlates to an entry in the command table 
&lt;LI&gt;&lt;EM&gt;ParameterName &lt;/EM&gt;The name of the parameter 
&lt;LI&gt;&lt;EM&gt;ParameterValue &lt;/EM&gt;The value of the parameter&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=450342" width="1" height="1"&gt;</description></item><item><title>Version Control RSS Feed</title><link>http://blogs.msdn.com/jefflu/archive/2005/08/09/449401.aspx</link><pubDate>Tue, 09 Aug 2005 14:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:449401</guid><dc:creator>jefflu</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/449401.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=449401</wfw:commentRss><description>Recently, I wrote about a &lt;a href="http://blogs.msdn.com/jefflu/archive/2005/07/27/443900.aspx"&gt;Team Foundation RSS feed&lt;/A&gt;. There may be a change required if you're seeing ASP.NET event log entries when your RSS reader contacts the feed complaining about the &lt;FONT face="Courier New"&gt;UriType&lt;/FONT&gt; (about line 194) not being recognized. Change &lt;FONT face="Courier New"&gt;UriType&lt;/FONT&gt; to &lt;FONT face="Courier New"&gt;ChangesetUriType&lt;/FONT&gt; and things should work.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=449401" width="1" height="1"&gt;</description></item><item><title>Team Foundation Watson Reports: We're listening</title><link>http://blogs.msdn.com/jefflu/archive/2005/08/05/448053.aspx</link><pubDate>Fri, 05 Aug 2005 14:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:448053</guid><dc:creator>jefflu</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/448053.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=448053</wfw:commentRss><description>&lt;P&gt;We've been collecting Watson reports with the Beta 2 release. As of this week, we've created 81 bugs from the Watson reports that we've received from Beta2 and internal sites. All but 2 of the bugs have been resolved.&lt;/P&gt;
&lt;P&gt;Please keep those Watson reports coming to us -- we actively review, prioritize, and follow up on them.&lt;/P&gt;
&lt;P&gt;-jeff&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=448053" width="1" height="1"&gt;</description></item><item><title>Sample: Version Control RSS Feed</title><link>http://blogs.msdn.com/jefflu/archive/2005/07/27/443900.aspx</link><pubDate>Wed, 27 Jul 2005 20:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:443900</guid><dc:creator>jefflu</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/443900.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=443900</wfw:commentRss><description>&lt;P&gt;&amp;lt;%@ Page Language="c#" %&amp;gt;&lt;BR&gt;&amp;lt;%@ OutputCache Duration="20" Location="Server" VaryByParam="state" VaryByCustom="minorversion" VaryByHeader="Accept-Language"%&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;%&lt;BR&gt;// "Copyright © Microsoft Corporation.&amp;nbsp; All rights reserved.&amp;nbsp; These Samples are based in part on the Extensible Markup Language (XML) 1.0 (Third Edition) specification Copyright © 2004 W3C® (MIT, ERCIM, Keio. All rights reserved. &lt;A href="http://www.w3.org/consortium/legal/2002/copyright-documents-20021231"&gt;http://www.w3.org/consortium/legal/2002/copyright-documents-20021231&lt;/A&gt;."&lt;BR&gt;%&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;%&lt;BR&gt;//This posting is provided "AS IS" with no warranties of any kind and confers no rights.&amp;nbsp; Use of samples included in this posting is subject to the terms specified at &lt;A href="http://www.microsoft.com/info/cpyright.htm"&gt;http://www.microsoft.com/info/cpyright.htm&lt;/A&gt;.&lt;BR&gt;%&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;%@ Import Namespace="System" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Import Namespace="System.Collections" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Import Namespace="System.IO" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Import Namespace="System.Web" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Import Namespace="System.Xml" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Import Namespace="Microsoft.TeamFoundation.Client" %&amp;gt;&lt;BR&gt;&amp;lt;%@ Import Namespace="Microsoft.TeamFoundation.VersionControl.Client"%&amp;gt;&lt;BR&gt;&amp;lt;%@ Import Namespace="Microsoft.TeamFoundation.VersionControl.Common" %&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;%&lt;BR&gt;// Generate an RSS feed for Team Foundation Source Code Control checkins&lt;BR&gt;// &lt;BR&gt;// Note: Only one request per "pester interval" from each system will be honored. See&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pesterInterval below.&lt;BR&gt;//&lt;BR&gt;// This feed returns information about the most recent N checkins. See maxCheckinCount &lt;BR&gt;// below.&lt;BR&gt;//&lt;BR&gt;// Invoking this page without any parameters returns information about all Team&lt;BR&gt;// Foundation checkins up to the maximum count. If a filename is supplied, information&lt;BR&gt;// about the most recent checkins for that file only are returned. Specify a filename&lt;BR&gt;// by adding ?serverPath=&amp;lt;serverPath&amp;gt;. Note that the filename must be expressed as a server&lt;BR&gt;// pathname without the leading $/.&lt;BR&gt;//&lt;BR&gt;// E.g., to see the activity for a file $/teamProjectA/myFile, add this to the Url&lt;BR&gt;// ?serverPath=teamProjectA/myfile&lt;BR&gt;//&lt;BR&gt;// This page returns no items if the file does not exist.&lt;/P&gt;
&lt;P&gt;// ***************************************************&lt;BR&gt;// (Default: off) Set this to true to throttle user requests by host/username&lt;BR&gt;// ***************************************************&lt;BR&gt;bool throttleRequests = false;&lt;/P&gt;
&lt;P&gt;// Ignore requests from the same machine within this interval&lt;BR&gt;int pesterInterval = 30 * 1000; // expressed in milliseconds&lt;/P&gt;
&lt;P&gt;if (throttleRequests)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // If the originating system has been serviced recently, drop the request&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; object lastRequest = Context.Cache[User.Identity.Name+Request.UserHostAddress];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (lastRequest != null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((int) lastRequest + pesterInterval &amp;lt; Environment.TickCount)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;// Default -- everything under $/&lt;BR&gt;string serverPathname = VersionControlPath.RootFolder;&lt;/P&gt;
&lt;P&gt;try&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check whether information on a specific file was requested&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string pathname = Request.Params["serverPath"];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pathname != null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The pathname does not contain a leading '$'&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; serverPathname = VersionControlPath.Combine(VersionControlPath.RootFolder, pathname);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The pathname is valid.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;catch&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.StatusCode = 404;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.End();&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;// The maximum number of changes to return per query&lt;BR&gt;int maxCheckinCount = 50;&lt;/P&gt;
&lt;P&gt;string rssVersion = "2.0";&lt;BR&gt;string rssTtl = "5";&lt;BR&gt;string rssLanguage = "en-US";&lt;BR&gt;string rssLink = Request.Url.ToString();&lt;BR&gt;string rssTitle = "Team Foundation RSS Feed for Source Code Control Checkins";&lt;BR&gt;string rssGenerator = "Sample RSS Feed Generator for Team Foundation";&lt;BR&gt;string rssDescription = "&amp;lt;p&amp;gt;This feed provides information on Team Foundation Checkins. Each Team Foundation checkin is manifested as a changeset. The changesets that have been created recently are listed here.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;This feed contains the most recent &amp;lt;i&amp;gt;{0}&amp;lt;/i&amp;gt; checkin(s).&amp;lt;/p&amp;gt;";&lt;BR&gt;string rssItemOnBehalfOf = "(on behalf of {0}) ";&lt;BR&gt;string rssItemTitle = "Checkin {0} [{1} items]";&lt;BR&gt;string rssNoItemsAvailableDescription = "An error occurred obtaining the latest checkin information from Team Foundation. Try again later.";&lt;BR&gt;string rssItemDescription = "&amp;lt;p&amp;gt;&amp;lt;a href=\"{5}\"&amp;gt;Changeset {0}&amp;lt;/a&amp;gt; was checked in by &amp;lt;i&amp;gt;{1} {2}&amp;lt;/i&amp;gt;on {3}. This checkin includes changes to {4} item(s).&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;You can view the details of the checkin by selecting the provided link.&amp;lt;/p&amp;gt;.";&lt;BR&gt;string exceptionMessage = "&amp;lt;p&amp;gt;An exception occurred while getting updated information from Team Foundation; the detailed exception message is &amp;lt;i&amp;gt;{0}&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;";&lt;BR&gt;string itemNotFoundErrorMessage = "&amp;lt;p&amp;gt;There were no items found.&amp;lt;/p&amp;gt;";&lt;BR&gt;string accessDeniedErrorMessage = "&amp;lt;p&amp;gt;You do not have permission to obtain the Team Foundation checkin information.&amp;lt;/p&amp;gt;";&lt;BR&gt;string otherErrorMessage = "&amp;lt;p&amp;gt;An error occurred. This may be a transient error or a permanent one. Please check the event log for messages from VSTF Source Code Control&amp;lt;/p&amp;gt;";&lt;/P&gt;
&lt;P&gt;Response.ContentType = "text/xml";&lt;BR&gt;XmlTextWriter xt = new XmlTextWriter(Response.OutputStream, null);&lt;BR&gt;// Begin creating the XML document&lt;BR&gt;xt.WriteStartElement("rss");&lt;BR&gt;xt.WriteAttributeString("version", rssVersion);&lt;BR&gt;xt.WriteStartElement("channel");&lt;BR&gt;xt.WriteElementString("title", rssTitle);&lt;BR&gt;xt.WriteElementString("ttl", rssTtl);&lt;BR&gt;xt.WriteElementString("link", rssLink);&lt;BR&gt;xt.WriteElementString("pubDate", DateTime.Now.ToString());&lt;BR&gt;xt.WriteElementString("language", rssLanguage);&lt;BR&gt;xt.WriteElementString("generator", rssGenerator);&lt;BR&gt;try&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RecursionType recursionType = RecursionType.Full;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Obtain the list of changes from the mid-tier; the number of changes is reported in&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the channel description. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IEnumerable changesetEnum = null;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TeamFoundationServer Tfs = null;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object cacheEntry = Context.Cache["TeamFoundationServer"];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (cacheEntry == null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Note: only works on localhost&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tfs = new TeamFoundationServer("&lt;A href="http://localhost:8080"&gt;http://localhost:8080&lt;/A&gt;");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Context.Cache["TeamFoundationServer"] = Tfs;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tfs = (TeamFoundationServer) cacheEntry;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VersionControlServer Vcs = (VersionControlServer) Tfs.GetService(typeof(VersionControlServer));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Return changes&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; changesetEnum = Vcs.QueryHistory(serverPathname,&amp;nbsp; // on this item&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VersionSpec.Latest, // item version&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // that are not deleted&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recursionType,&amp;nbsp;&amp;nbsp; // at or below this item&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; null,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // user&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; null,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // start version&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; null,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // stop version&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxCheckinCount, // Up to this many changes&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; true,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // include changes&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; false);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int changeCount = 0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (Changeset change in changesetEnum)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; changeCount++;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("description", String.Format(rssDescription, changeCount));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception e)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (e is ItemNotFoundException)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rssNoItemsAvailableDescription += itemNotFoundErrorMessage;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rssNoItemsAvailableDescription += otherErrorMessage;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rssNoItemsAvailableDescription += String.Format(exceptionMessage, e.Message);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("description", rssNoItemsAvailableDescription);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteEndElement(); // channel&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create an item for each returned changeset.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (Changeset change in changesetEnum)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteStartElement("item");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string onBehalfOf = null;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Include the committer if it differs from the changeset owner.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // This occurs when a proxy agent performs the checkin.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!change.Owner.Equals(change.Committer))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onBehalfOf = String.Format(rssItemOnBehalfOf, change.Owner);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("title", String.Format(rssItemTitle,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; change.ChangesetId,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; change.Changes.Length));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string csLink = HttpUtility.HtmlEncode(new ChangesetUri(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String.Format("{0}://{1}:{2}",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Request.Url.Scheme,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Request.Url.Host,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Request.Url.Port),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; change.ChangesetId,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UriType.Extended).ToUrl());&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("description", String.Format(rssItemDescription,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; change.ChangesetId,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; change.Committer,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onBehalfOf,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; change.CreationDate,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; change.Changes.Length,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; csLink));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("link", csLink);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("author", onBehalfOf == null ? change.Owner : change.Committer);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("pubDate", change.CreationDate.ToString());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteElementString("guid", change.ChangesetId.ToString());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.WriteEndElement(); // item&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;catch (Exception e)&lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.StatusCode = 404;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.End();&lt;BR&gt;}&lt;BR&gt;finally&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xt.Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (throttleRequests)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Context.Cache[Request.UserHostAddress] = Environment.TickCount;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;%&amp;gt;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=443900" width="1" height="1"&gt;</description></item><item><title>Part 3: What's my source control server doing? A RSS feed to keep track of checkins</title><link>http://blogs.msdn.com/jefflu/archive/2005/07/22/441733.aspx</link><pubDate>Fri, 22 Jul 2005 13:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:441733</guid><dc:creator>jefflu</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/441733.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=441733</wfw:commentRss><description>&lt;P&gt;&lt;SPAN style="BACKGROUND: silver; COLOR: windowtext"&gt;I haven't forgotten about the RSS feed generator. There were some issues that I needed to resolve with the sample code before it can be released; this required a few changes -- these include:&lt;/SPAN&gt;&lt;SPAN style="COLOR: windowtext"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list .5in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="BACKGROUND: silver"&gt;Instead of using public methods in the Version Control server assemblies, the Version Control Client Object Model (OM) is used instead. The &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:place w:st="on"&gt;OM&lt;/st1:place&gt; supports a rich API and is the intended, suggested, and supported way by which applications interact with Team Foundation. &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list .5in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="BACKGROUND: silver"&gt;You should note that the RSS feed generator is &lt;STRONG&gt;&lt;I&gt;a sample&lt;/I&gt;&lt;/STRONG&gt;&lt;EM&gt; and is provided "&lt;/EM&gt;&lt;STRONG&gt;&lt;I&gt;AS IS". &lt;/I&gt;&lt;/STRONG&gt;The file contains the disclaimers and copyright notice.&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT color=#666666&gt;&lt;STRONG&gt;&lt;SPAN style="BACKGROUND: silver"&gt;Caveats&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list .5in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="BACKGROUND: silver"&gt;This posting is provided "AS IS" with no warranties of any kind and confers no rights.&amp;nbsp; Use of samples included in this posting is subject to the terms specified at &lt;A href="http://www.microsoft.com/info/cpyright.htm"&gt;http://www.microsoft.com/info/cpyright.htm&lt;/A&gt;.&lt;/SPAN&gt; &lt;o:p&gt;&lt;/o:p&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list .5in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="BACKGROUND: silver"&gt;It may not work with the RSS reader that you're using (I've been using &lt;EM&gt;SharpReader&lt;/EM&gt;). &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list .5in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="BACKGROUND: silver"&gt;It may not work with your environment.&lt;/SPAN&gt; &lt;o:p&gt;&lt;/o:p&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list .5in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="BACKGROUND: silver"&gt;I have verified that it will work with our upcoming CTP. Changes made to Team Foundation subsequent may be incompatible with the RSS feed generator.&lt;/SPAN&gt; &lt;o:p&gt;&lt;/o:p&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list .5in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="BACKGROUND: silver"&gt;The RSS feed generator uses the credentials of the client invoking it to obtain information about checkins (&lt;STRONG&gt;read &lt;/STRONG&gt;access to at least one item in the changeset is required to obtain information about the changeset). &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT color=#666666&gt;&lt;STRONG&gt;&lt;SPAN style="BACKGROUND: silver"&gt;RSS Feed Generator Features&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list .5in; mso-list: l2 level1 lfo3"&gt;&lt;EM&gt;&lt;B&gt;&lt;SPAN style="BACKGROUND: silver"&gt;User throttle:&lt;/SPAN&gt;&lt;/B&gt;&lt;/EM&gt;&lt;SPAN style="BACKGROUND: silver"&gt; Within a 30-second interval, only the first request from each user is serviced (duplicate requests are ignored). You can disable this behavior by setting &lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: silver; FONT-FAMILY: 'Courier New'"&gt;throttleRequests&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: silver"&gt; to false. The interval is determined by &lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: silver; FONT-FAMILY: 'Courier New'"&gt;pesterInterval&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: silver"&gt;.&lt;/SPAN&gt; &lt;o:p&gt;&lt;/o:p&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list .5in; mso-list: l2 level1 lfo3"&gt;&lt;EM&gt;&lt;B&gt;&lt;SPAN style="BACKGROUND: silver"&gt;Path-specific subscriptions&lt;/SPAN&gt;&lt;/B&gt;&lt;/EM&gt;&lt;STRONG&gt;&lt;SPAN style="BACKGROUND: silver"&gt;: &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="BACKGROUND: silver"&gt;You can include a &lt;EM&gt;server path (e.g., $/teamProject/somePathOfInterest) &lt;/EM&gt;to subscribe to only the area(s) of interest. If server path specifies a folder, than any changes at or below that folder are included in the feed. If server path specifies a file, only changes to that file are in the feed. The default server path is the folder &lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: silver; FONT-FAMILY: 'Courier New'"&gt;$/&lt;/SPAN&gt; &lt;o:p&gt;&lt;/o:p&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list .5in; mso-list: l2 level1 lfo3"&gt;&lt;STRONG&gt;&lt;I&gt;Security&lt;/I&gt;&lt;/STRONG&gt;&lt;EM&gt;: &lt;/EM&gt;The caller's credentials are used to obtain information about checkin activity. The links returned in the feed are for &lt;EM&gt;changeset webviews.&lt;/EM&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT color=#666666&gt;&lt;STRONG&gt;Example&lt;/STRONG&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="COLOR: windowtext"&gt;Each checkin is represented by an individual item in the feed; e.g., this is information about the 3rd checkin:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="COLOR: windowtext"&gt;&lt;A href="http://jefflu-test:8080/VersionControl/Changeset.aspx?artifactMoniker=3&amp;amp;webView=1"&gt;&lt;SPAN style="COLOR: windowtext"&gt;Changeset 3&lt;/SPAN&gt;&lt;/A&gt; was checked in by &lt;I&gt;DOMAIN\user &lt;/I&gt;on 7/21/2005 12:56:05 PM. This checkin includes changes to 15 item(s).&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="COLOR: windowtext"&gt;You can view the details of the checkin by selecting the provided link.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="COLOR: windowtext"&gt;Selecting the changeset link will display the webview of that changeset:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A title="Check-in 3: fsdfsadf" href="http://jefflu-test:8080/VersionControl/Changeset.aspx?artifactMoniker=3&amp;amp;webView=1"&gt;&lt;B&gt;Check-in 3: fsdfsadf&lt;/B&gt;&lt;/A&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#666666&gt;&lt;B&gt;Summary&lt;/B&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;TABLE class=MsoNormalTable style="WIDTH: 90%; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 width="90%" border=0&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD style="BORDER-RIGHT: #ffffff; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ffffff; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ffffff; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ffffff; BACKGROUND-COLOR: transparent" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Team Project(s):&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #ffffff; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ffffff; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ffffff; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ffffff; BACKGROUND-COLOR: transparent" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;507211250&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1"&gt;
&lt;TD style="BORDER-RIGHT: #ffffff; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ffffff; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ffffff; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ffffff; BACKGROUND-COLOR: transparent" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Checked in by:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #ffffff; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ffffff; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ffffff; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ffffff; BACKGROUND-COLOR: transparent" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;user&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 2"&gt;
&lt;TD style="BORDER-RIGHT: #ffffff; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ffffff; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ffffff; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ffffff; BACKGROUND-COLOR: transparent" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Checked in on:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #ffffff; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ffffff; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ffffff; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ffffff; BACKGROUND-COLOR: transparent" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;7/21/2005 12:56:05 PM&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 3"&gt;
&lt;TD style="BORDER-RIGHT: #ffffff; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ffffff; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ffffff; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ffffff; BACKGROUND-COLOR: transparent" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Code Reviewer:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #ffffff; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ffffff; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ffffff; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ffffff; BACKGROUND-COLOR: transparent" vAlign=top width="35%"&gt;&lt;PRE&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;None&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 4"&gt;
&lt;TD style="BORDER-RIGHT: #ffffff; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ffffff; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ffffff; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ffffff; BACKGROUND-COLOR: transparent" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Performance Reviewer:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #ffffff; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ffffff; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ffffff; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ffffff; BACKGROUND-COLOR: transparent" vAlign=top width="35%"&gt;&lt;PRE&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;None&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 5"&gt;
&lt;TD style="BORDER-RIGHT: #ffffff; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ffffff; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ffffff; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ffffff; BACKGROUND-COLOR: transparent" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Security Reviewer:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #ffffff; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ffffff; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ffffff; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ffffff; BACKGROUND-COLOR: transparent" vAlign=top width="35%"&gt;&lt;PRE&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;None&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 6; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-RIGHT: #ffffff; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ffffff; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ffffff; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ffffff; BACKGROUND-COLOR: transparent" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Comment:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #ffffff; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ffffff; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ffffff; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ffffff; BACKGROUND-COLOR: transparent" vAlign=top width="35%"&gt;&lt;PRE&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;fsdfsadf&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#666666&gt;&lt;B&gt;Resolved Work Items&lt;/B&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;TABLE class=MsoNormalTable style="BORDER-RIGHT: #f1efe2 1pt solid; BORDER-TOP: #f1efe2 1pt solid; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 90%; BORDER-BOTTOM: #f1efe2 1pt solid; mso-cellspacing: 1.5pt; mso-border-alt: solid #F1EFE2 .75pt" cellPadding=0 width="90%" border=1&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; BACKGROUND: #f1efe2; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Type&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; BACKGROUND: #f1efe2; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 5%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="5%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;ID&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; BACKGROUND: #f1efe2; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Title&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; BACKGROUND: #f1efe2; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Status&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; BACKGROUND: #f1efe2; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Assigned To&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Task&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 5%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="5%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=1 href="http://jefflu-test:8080/WorkItemTracking/WorkItem.aspx?artifactMoniker=1"&gt;1&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Setup: Set Permissions&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Closed&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;jefflu&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 2; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Task&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 5%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="5%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=2 href="http://jefflu-test:8080/WorkItemTracking/WorkItem.aspx?artifactMoniker=2"&gt;2&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Setup: Migration of Source Code&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Closed&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;jefflu&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#666666&gt;&lt;B&gt;Items&lt;/B&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;TABLE class=MsoNormalTable style="BORDER-RIGHT: #f1efe2 1pt solid; BORDER-TOP: #f1efe2 1pt solid; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 90%; BORDER-BOTTOM: #f1efe2 1pt solid; mso-cellspacing: 1.5pt; mso-border-alt: solid #F1EFE2 .75pt" cellPadding=0 width="90%" border=1&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; BACKGROUND: #f1efe2; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; BACKGROUND: #f1efe2; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Change&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; BACKGROUND: #f1efe2; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Folder&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=WindowsApplication52 href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;WindowsApplication52&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 2"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=WindowsApplication52.sln href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%2fWindowsApplication52.sln%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;WindowsApplication52.sln&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250/WindowsApplication52&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 3"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=WindowsApplication52.vssscc href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%2fWindowsApplication52.vssscc%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;WindowsApplication52.vssscc&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250/WindowsApplication52&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 4"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=WindowsApplication52 href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%2fWindowsApplication52%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;WindowsApplication52&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250/WindowsApplication52&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 5"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=Form1.cs href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%2fWindowsApplication52%2fForm1.cs%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;Form1.cs&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250/WindowsApplication52/WindowsApplication52&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 6"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=Form1.Designer.cs href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%2fWindowsApplication52%2fForm1.Designer.cs%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;Form1.Designer.cs&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250/WindowsApplication52/WindowsApplication52&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 7"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=Program.cs href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%2fWindowsApplication52%2fProgram.cs%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;Program.cs&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250/WindowsApplication52/WindowsApplication52&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 8"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=Properties href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%2fWindowsApplication52%2fProperties%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;Properties&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250/WindowsApplication52/WindowsApplication52&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 9"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=AssemblyInfo.cs href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%2fWindowsApplication52%2fProperties%2fAssemblyInfo.cs%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;AssemblyInfo.cs&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250/WindowsApplication52/WindowsApplication52/Properties&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 10"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=Resources.Designer.cs href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%2fWindowsApplication52%2fProperties%2fResources.Designer.cs%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;Resources.Designer.cs&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250/WindowsApplication52/WindowsApplication52/Properties&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 11"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=Resources.resx href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%2fWindowsApplication52%2fProperties%2fResources.resx%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;Resources.resx&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250/WindowsApplication52/WindowsApplication52/Properties&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 12"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=Settings.Designer.cs href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%2fWindowsApplication52%2fProperties%2fSettings.Designer.cs%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;Settings.Designer.cs&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250/WindowsApplication52/WindowsApplication52/Properties&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 13"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=Settings.settings href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%2fWindowsApplication52%2fProperties%2fSettings.settings%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;Settings.settings&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250/WindowsApplication52/WindowsApplication52/Properties&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 14"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=WindowsApplication52.csproj.vspscc href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%2fWindowsApplication52%2fWindowsApplication52.csproj.vspscc%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;WindowsApplication52.csproj.vspscc&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250/WindowsApplication52/WindowsApplication52&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 15; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;A title=WindowsApplication52.csproj href="http://jefflu-test:8080/VersionControl/VersionedItem.aspx?artifactMoniker=jefflu507211250%2fWindowsApplication52%2fWindowsApplication52%2fWindowsApplication52.csproj%26changesetVersion%3d3%26deletionId%3d0%26webView%3d1"&gt;WindowsApplication52.csproj&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 10%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="10%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT: #f1efe2 1pt solid; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f1efe2 1pt solid; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f1efe2 1pt solid; WIDTH: 35%; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f1efe2 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #F1EFE2 .75pt" vAlign=top width="35%"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;$/jefflu507211250/WindowsApplication52/WindowsApplication52&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 7.5pt"&gt;&lt;BR&gt;Notes: &lt;BR&gt;- All dates and times are shown in Eastern Daylight Time (GMT -04:00:00).&lt;BR&gt;Provided by &lt;A title="Microsoft Visual Studio® 2005 Team System" href="http://msdn.microsoft.com/vstudio/teamsystem/"&gt;Microsoft Visual Studio® 2005 Team System&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#666666&gt;&lt;STRONG&gt;&lt;SPAN style="BACKGROUND: silver"&gt;Installation&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="BACKGROUND: silver; COLOR: windowtext"&gt;The RSS feed generator is a .ASPX file so all you need to do is copy the file under the Version Control subdirectory and then subscribe to the feed. The following example assumes that Team Foundation is using port &lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: silver; COLOR: windowtext; FONT-FAMILY: 'Courier New'"&gt;8080&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: silver; COLOR: windowtext"&gt; (default). &lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: silver; COLOR: windowtext; FONT-FAMILY: 'Courier New'"&gt;'SCC'&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: silver; COLOR: windowtext"&gt; is the name of the Version Control web application (you can view the web site layout using &lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: silver; COLOR: windowtext; FONT-FAMILY: 'Courier New'"&gt;inetmgr&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: silver; COLOR: windowtext"&gt;). &lt;/SPAN&gt;&lt;SPAN style="COLOR: windowtext"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="BACKGROUND: silver; COLOR: windowtext"&gt;To install and subscribe to the feedFor example,&lt;/SPAN&gt;&lt;SPAN style="COLOR: windowtext"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="COLOR: windowtext"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: silver; COLOR: windowtext; FONT-FAMILY: 'Courier New'"&gt;copy CheckinRssFeed.aspx %ProgramFiles%\Microsoft Visual Studio 2005 Enterprise Server\HATIISDIR&lt;/SPAN&gt;&lt;SPAN style="COLOR: windowtext"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="BACKGROUND: silver; COLOR: windowtext"&gt;Using your RSS reader, subscribe to&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: silver"&gt;&lt;FONT color=#666666&gt; &lt;/FONT&gt;&lt;A href="http://machine:8080/SCC/CheckinRssFeed.aspx"&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;http://machine:8080/SCC/CheckinRssFeed.aspx&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#666666&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=441733" width="1" height="1"&gt;</description></item><item><title>Why we want Watson reports</title><link>http://blogs.msdn.com/jefflu/archive/2005/04/26/412067.aspx</link><pubDate>Tue, 26 Apr 2005 12:19:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:412067</guid><dc:creator>jefflu</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/412067.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=412067</wfw:commentRss><description>&lt;P&gt;One of the features we added to the mid-tier web services was the ability to create and file reports when error and/or unexpected conditions occur. When these happen, a information about the condition is gathered and then a report is filed with the Watson reporting mechanism.&lt;/P&gt;
&lt;P&gt;The next time an administrator logs in to the mid-tier machine, the Watson reporting UI should appear asking if you want to send the queued reports. Please consider doing so -- we really need this information to see what kind of real-world problems are occurring. We include information about the error condition and stack trace of the thread active when the condition occurred in the report.&lt;/P&gt;
&lt;P&gt;You might wonder what happens to the Watson reports that are sent to Microsoft. Each week, the Team Foundation Watson Review team (a representative from the test organization and myself) review the Watson report that arrived in the last week. We focus on the newly arriving Watson reports and the reports that have been reported the most. We used to investigate only the top 10 reports (as measured by our internal Watson tool) but have now extended our focus to the top 60 or so (we look at any report that has been reported more than a few times).&lt;/P&gt;
&lt;P&gt;We look at reports from Beta 2 deployments and some other key deployments or test beds that are internal to Microsoft.&lt;/P&gt;
&lt;P&gt;After we investigate the set of Watson reports, we send a summarization that includes the Watson report, status, the bug (if any -- many problems have already been fixed) details, and the developer responsible for fixing it. This summarization gets wide visibility by design -- we even send it to our PUM's boss. I'm happy&amp;nbsp; to report that we've been making great progress in fixing issues illustrated by the Watson process.&lt;/P&gt;
&lt;P&gt;One more thing -- and I can't stress this enough -- we really do look at the Watson reports that we receive and make every attempt to correct the issue(s) that are contained in the report. Please continue to allow the reports to be sent.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=412067" width="1" height="1"&gt;</description></item><item><title>Part 2: What's my source control server doing? A RSS feed to keep track of checkins</title><link>http://blogs.msdn.com/jefflu/archive/2005/04/13/407837.aspx</link><pubDate>Wed, 13 Apr 2005 12:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:407837</guid><dc:creator>jefflu</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/407837.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=407837</wfw:commentRss><description>&lt;P&gt;In my &lt;a href="http://blogs.msdn.com/admin/blogs/posteditor.aspx?App=jefflu&amp;amp;PostID=406475"&gt;last&lt;/A&gt;&amp;nbsp;post, I started describing an RSS feed generator for Team Foundation Source Control. Note that this is an &lt;EM&gt;experimental&lt;/EM&gt; endeavor and not supported in any way by Microsoft as it &lt;STRONG&gt;is not part of the Team Foundation product.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I described, in brief, the features that it supports and touched on security. I won't repeat that information here. &lt;/P&gt;
&lt;H2&gt;Feed Contents&lt;/H2&gt;
&lt;P&gt;The RSS feed provides information about recent checkins -- there is one RSS item for each checkin that has occurred. Each item contains the following&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The date, time, and number of changes in the checkin. 
&lt;LI&gt;Who performed the checkin 
&lt;LI&gt;A link to a &lt;EM&gt;changeset webview.&lt;/EM&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The contents of the item include meta information about the checkin but not the checkin details (note the security information in my last post) and a link to the changeset webview. I'll talk about what those are in a minute.&lt;/P&gt;
&lt;P&gt;By default, i.e., if a file path is not supplied, information about all checkins is returned. When a file path is part of the Url, i.e.,g &lt;EM&gt;url?filename=filepath&lt;/EM&gt;, information about only the &lt;EM&gt;filepath&lt;/EM&gt; is returned. If it refers to a directory, information about checkins &lt;EM&gt;at or below&lt;/EM&gt; the directory is returned; otherwise, information about checkins for that file only are returned.&lt;/P&gt;
&lt;H2&gt;Changeset Webview&lt;/H2&gt;
&lt;P&gt;&lt;EM&gt;Webviews &lt;/EM&gt;are a core Team Foundation feature that provide web-based access to Team Foundation &lt;EM&gt;artifacts.&lt;/EM&gt; Each Team Foundation component has a set of artifacts. E.g., Workitem Tracking has an artifact for a work item (no surprise) and Source Control has artifacts for changesets and files.&lt;/P&gt;
&lt;P&gt;The changeset webview shows the changeset, e.g., who created the changeset, when it was created, what changes are included, etc. In Beta2, the changeset webview appearance is crude but contains all of the information from a changeset. We've polished the appearance and included extra information in the bits after Beta2.&lt;/P&gt;
&lt;H2&gt;RSS Feed Generator&lt;/H2&gt;
&lt;P dir=ltr&gt;The RSS feed provides information about checkins; for each checkin, a changeset webview link is provided. I've mentioned what a changeset webview contains so its now time to discuss the RSS feed. Once installed, you can subscribe to the RSS feed by specifying the &lt;EM&gt;.aspx&lt;/EM&gt; page that generates the feed, e.g., &lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P dir=ltr&gt;&lt;A href="http://server:port/applicationName/application/CheckinRssFeed.aspx"&gt;&lt;FONT face="Courier New"&gt;http://server:port&lt;EM&gt;/applicationName&lt;/EM&gt;&lt;EM&gt;/&lt;/EM&gt;application/CheckinRssFeed.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The RSS feed generator uses the following .NET and Team Foundation assemblies:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face="Courier New"&gt;System&lt;/FONT&gt; (System, System.Web, System.XML namespaces) 
&lt;LI&gt;&lt;FONT face="Courier New"&gt;Microsoft.VisualStudio.Hatteras.Bis&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face="Courier New"&gt;Microsoft.VisualStudio.Hatteras.Util&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face="Courier New"&gt;Microsoft.VisualStudio.Hatteras.Server&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Keep in mind that assembly names and namespaces will be changing for RTM. For Beta2, project names (e.g., Hatteras, Currituck) and temporary names (Bis) are still used. Assembly names, namespaces, classes, methods and other places where internal project names are in use will be different.&lt;/P&gt;
&lt;P&gt;In my next post, I'll start posting snippets of the feed.&lt;/P&gt;
&lt;P&gt;In the meantime, let me know if there are specific things you'd like to see.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=407837" width="1" height="1"&gt;</description></item><item><title>What's my source control server doing? A RSS feed to keep track of checkins</title><link>http://blogs.msdn.com/jefflu/archive/2005/04/08/406475.aspx</link><pubDate>Fri, 08 Apr 2005 11:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:406475</guid><dc:creator>jefflu</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/406475.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=406475</wfw:commentRss><description>&lt;H1&gt;Team Foundation RSS Feed Generator for Source Control&lt;/H1&gt;
&lt;P&gt;&lt;FONT&gt;Some time ago, I switched to a much more efficient way of keeping up with news and other events. Instead of visiting several web sites to keep up with what's happening, I started using a web-based blog aggregator. There are many out there, the one what worked the best for me and my situation is &lt;A href="http://www.bloglines.com"&gt;http://www.bloglines.com&lt;/A&gt;. This way, I could keep track of what's going on by visiting one web site and viewing the news articles that I wanted to see. Of course, if one of the sites doesn't have an RSS feed, than I was faced with either ditching that site or visiting the site. Usually, I ended up ditching the site in favor of viewing articles using the RSS reader.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;In that spirit, I started to look into creating an RSS feed for Team Foundation. I work on the Source Control part of Team Foundation, so naturally, I started there. Before I get into what I actually did to create the RSS feed, let me explain a little about Team Foundation Alerts. An alert is an out-of-band notification that some condition that you expressed interest in has occurred. When the condition occurs, Team Foundation will send an email with the details. We have alerts that notify you when&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT&gt;A work item is assigned to you (or a work item that is assigned to you changes)&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT&gt;A checkin to has occurred.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT&gt;A build has started&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT&gt;A build has completed&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT&gt;Alerts are created by &lt;EM&gt;subscribing&lt;/EM&gt;&amp;nbsp; to one of these events and &lt;EM&gt;are scoped to a Team Project&lt;/EM&gt;. When you subscribe to an alert (or more commonly, the Team Project administrator has created a subscription for you), you'll only receive alerts that related to that Team Project. You have to use Visual Studio to subscribe to an alert. Select a Team Project, then use Team -&amp;gt; Alerts. Select the event(s) and supply an email address. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;Back to RSS feeds. I receive a lot of e-mail each day and decided that I'd rather find out about checkins that have occurred differently. Thus, the RSS feed generator for Team Project Source Control was born.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;The RSS feed is implemented in a .ASPX file and makes use of public interfaces the Team Foundation source control assemblies to retrieve information about the most recent checkins. I'm not going to explain the details of what constitutes an RSS feed; there are many websites that do this. Instead, I'll focus on on this feed works.&lt;/FONT&gt;&lt;/P&gt;
&lt;H1&gt;Features&lt;/H1&gt;
&lt;UL&gt;
&lt;LI&gt;Returns information about the most recent checkins to Team Foundation 
&lt;LI&gt;If a pathname is supplied, checkins relating to that path or below are returned 
&lt;LI&gt;Only services 1 request per &lt;EM&gt;pester-interval&lt;/EM&gt; for mal-behaved RSS aggregators 
&lt;LI&gt;Only uses public interfaces in the Team Foundation assemblies&lt;/LI&gt;&lt;/UL&gt;
&lt;H1&gt;Overview&lt;/H1&gt;
&lt;P&gt;At a high level, this is what the RSS feed generator I wrote does:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Decide whether to process the request. If the sender was serviced within the &lt;EM&gt;pester interval, &lt;/EM&gt;the request is ignored. 
&lt;LI&gt;Check whether the request contains a filename. When a filename is specified, checkins to that filename (or, if it's a directory,&amp;nbsp;files in the directory tree) is returned. When a filename is not specified, information about all recent checkins is returned. 
&lt;LI&gt;Gather information about the checkins and prepare the RSS XML stream.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Sounds pretty simple, right? There are a few details buried in the .aspx file and you might be wondering about security. Team Foundation Source Control has a security model that provides authorization and information protection and has safeguards against to prevent information disclosure.&lt;/P&gt;
&lt;H2&gt;Security&lt;/H2&gt;
&lt;P&gt;A &lt;EM&gt;checkin &lt;/EM&gt;represents a set of file changes. In order for a user to "see" the checkin, the user must have access to at least one element of the checkin. When a user doesn't have access any elements of the checkin, the checkin cannot be viewed by that user.&lt;/P&gt;
&lt;P&gt;Therefore, the RSS aggregator used to obtain the feeds, must have &lt;STRONG&gt;read access &lt;/STRONG&gt;to the Source Control repository. The repository provides a hierarchical view of the files that it contains rooted at &lt;FONT face="Courier New"&gt;$/. &lt;/FONT&gt;&lt;FONT face="Times New Roman"&gt;Team Projects are created as the top most elements, e.g., a repository with Team Projects Project1 and Project2 are represented this way:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;$/Project1/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Subdirectory1&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Subdirectory2&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$/Project2/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OtherSubdirectory1&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OtherSubdirectory2&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Access to the files and directories is governed by a set of &lt;EM&gt;inheritable &lt;/EM&gt;Access Control List (ACL) entries. Each ACL specifies which identities (users and/or groups) are granted or denied access to elements. You can view the permission settings of an item from the command line using the Source Control command line tool &lt;FONT face="Courier New"&gt;h.exe&lt;/FONT&gt; (to be renamed when we ship) as follows&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;h perm $/Project1&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;===============================================================================&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Server item: $/Project1 (Inherit: Yes)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Identity: Namespace Administrators&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Allow:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Deny:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Allow (Inherited): Read, PendChange, Checkin, Label, Lock, ReviseOther,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnlockOther, UndoOther, LabelOther, AdminProjectRights, CheckinOther&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Deny (Inherited):&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Identity: Service Accounts&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Allow:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Deny:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Allow (Inherited): Read, PendChange, Checkin, Label, Lock, ReviseOther,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnlockOther, UndoOther, LabelOther, AdminProjectRights, CheckinOther&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Deny (Inherited):&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This shows that there are no &lt;EM&gt;explicit permissions&lt;STRONG&gt; &lt;/STRONG&gt;&lt;/EM&gt;assigned to $/Project1 since the Allow: and Deny: entries are empty. There are &lt;EM&gt;inherited permissions&lt;/EM&gt;, however. This example also shows the &lt;EM&gt;default permissions &lt;/EM&gt;that exist when Team Project is installed. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;NOTE: &lt;/STRONG&gt;Back to the RSS feed aggregator: &lt;EM&gt;the RSS aggregator &lt;STRONG&gt;must have &lt;/STRONG&gt;read permission to the (sub)-tree of the repository that it gathers information from. &lt;/EM&gt;You can use either the Permissions dialog within Visual Studio or, if you're a gear-head like me, use the h perm command to view and change the permission settings.&lt;/P&gt;
&lt;P&gt;What do I really mean? The &lt;EM&gt;identity of the process that requests the feed &lt;/EM&gt;&lt;STRONG&gt;must have&lt;EM&gt; &lt;/EM&gt;read access&lt;/STRONG&gt;. &lt;/P&gt;
&lt;P&gt;You're probably wondering about the huge security hole that exists here, right? You get extra points for thinking about this but I've already taken care of it. The potential security hole is this:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;An RSS aggregator gathers checkin information for a site. &lt;/LI&gt;
&lt;LI&gt;Users connect to the RSS aggregator to get checkin information&lt;/LI&gt;
&lt;LI&gt;At least one of the users in step 2 can now see checkin information that, had they requested it directly using &lt;FONT face="Courier New"&gt;h changeset&lt;/FONT&gt; &lt;EM&gt;someNumber &lt;/EM&gt;would be denied.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The RSS feed returns hyperlinks that, when followed, are processed according to the security associated with the identity opening the link. The RSS feed returns meta information about the checkin and the user uses the meta information (i.e., the &lt;EM&gt;hyperlink&lt;/EM&gt;), to actually see the details of the changeset.&lt;/P&gt;
&lt;P&gt;Whew! That's all for now, I'll write more about the details of the RSS feed in an upcoming blog. &lt;/P&gt;
&lt;P&gt;jeff&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=406475" width="1" height="1"&gt;</description></item><item><title>Team Foundation Alerts</title><link>http://blogs.msdn.com/jefflu/archive/2005/02/22/377940.aspx</link><pubDate>Tue, 22 Feb 2005 14:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:377940</guid><dc:creator>jefflu</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/377940.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=377940</wfw:commentRss><description>&lt;p&gt;&lt;font style="BACKGROUND-COLOR: #c0c0c0"&gt;Team Foundation alerts are a way for users to receive notifications when certain conditions occur. You can subscribe to these alerts on your client system through Team -&amp;gt; Alerts. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;Team Foundation sends alerts for these events -- each of these events are scoped to the active Team Project. Note that if you have subscriptions to multiple team projects and one of the following events includes items from multiple team projects, than you will only receive one e-mail notification.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;When a work item assigned to you is changed (created, modified) &lt;li&gt;When a checkin to the current Team Project occurs &lt;li&gt;When a build completes. &lt;li&gt;When build status changes.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;Where do Alerts Come From?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Alerts are generated following one of the activities listed in the alert subscription tab. The Team Foundation component that owns the activity, prepares an XML document and sends that to the Team Foundation Core Services component (aka "BIS") since that component owns the subscription data. When BIS matches an XML document (this is really an "event") with one or more subscribers, it begins the process of preparing an email for each of the subscriptions. This process includes content scrubbing by the Team Foundation component that owns the "event." Generally speaking, the event contains all of the information that is associated with the activity. E.g, a "checkin" event contains all of the changes that were made as part of that checkin. The list of changes is scrubbed or filtered so the email contains only those items to which the subscriber has read access. In other words, the email will only contain those items to which the subscriber could view directly.&amp;nbsp; If the subscriber lacks read access to a file that was checked in, the file is not included in the email alert.&lt;/p&gt; &lt;p&gt;After the event has been scrubbed, BIS takes over and prepares the actual email by invoking the XSL transform associated with the event. After the transformation, the email is then sent to the email address associated with the subscription. &lt;/p&gt; &lt;p&gt;This process repeats for each subscriber. You don't need to create a subscription for each user; the email address can be for a group of users.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Alert Appearance&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Alerts are created from an XML document containing the alert information and an XSL transform. The XSL transforms are located on the app-tier in &lt;font face="Courier New"&gt;BISIISDIR\bisserver\events\eventschemas&lt;/font&gt;. The schemas for the XML documents are currently in one of two places:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Team Foundation registration data &lt;li&gt;The same directory as the XSL transforms&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Use the &lt;font face="Courier New"&gt;inetmgr&lt;/font&gt; to view the Team Foundation registration data:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Navigate to &lt;font face="Courier New"&gt;VSTFWeb&lt;/font&gt; and expand &lt;font face="Courier New"&gt;bisserver&lt;/font&gt;. &lt;li&gt;RMB on &lt;font face="Courier New"&gt;registration.asmx &lt;/font&gt;&lt;font face="Times New Roman"&gt;and select '&lt;font face="Courier New"&gt;Browse..&lt;/font&gt;."&lt;/font&gt;&amp;nbsp; This will start IE navigated to this page. &lt;li&gt;Select the &lt;font face="Courier New"&gt;GetRegistrationEntries&lt;/font&gt; method. &lt;li&gt;After the page loads, press &lt;font face="Courier New"&gt;invoke&lt;/font&gt; &lt;li&gt;You'll see the registration information for the services. As of CTP, not all services were registering their schemas.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;The XSL transform directly controls the look and feel of the alert. We've put a lot of effort into the upcoming Beta2 alert appearance and they should be very close to what you'll see in the shipping product. The CTP alerts contain most of the information but are inconsistent and certainly not polished.&lt;/p&gt; &lt;p&gt;You can change the appearance of the alerts by modifying the transform that creates the alert.&amp;nbsp; If you make changes to the transform that introduce XSL processing errors (if you don't know what these are, you might not want to make any changes to the transforms!) you will have prevented the alert from being sent. Be careful.&lt;/p&gt; &lt;p&gt;I'll discuss alerts and web views in an upcoming blog.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=377940" width="1" height="1"&gt;</description></item><item><title>Why BisRegEdit is sometimes the reported culprit of a failed install.</title><link>http://blogs.msdn.com/jefflu/archive/2005/02/07/368634.aspx</link><pubDate>Mon, 07 Feb 2005 22:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:368634</guid><dc:creator>jefflu</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/368634.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=368634</wfw:commentRss><description>&lt;p&gt;I've been reading the newsgroup postings setup for Team System. Of particular interest, are those dealing with setup issues as I've spent a fair amount of time working with "setup" to make sure that the pieces work together.&lt;/p&gt; &lt;p&gt;There are two types of installs that we do around here. &lt;/p&gt; &lt;ol&gt; &lt;li&gt;Scripted installs using a combination of batch, vbasic, and other "scripts". &lt;li&gt;Layout install which installs from CABs, uses setup.exe.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;I've done a fair amount of work with the first type and am familiar with many of the steps necessary. BTW, we try very hard to make sure that the product of either install are equivalent.&lt;/p&gt; &lt;p&gt;Ok, so how does &lt;font face="Courier New"&gt;BisRegEdit&lt;/font&gt; fit into the setup process? "BIS" (will be renamed when we RTM), provides infrastructure services. One of those functions is to help the multiple services (Work Item Tracking, Build, Source Code Control, Data Warehouse, etc) locate each other. In this case, it acts as a clearing house. The information that it provides comes from each service registering information with BIS at install time. There are many ways to provide this information. The Source Code Control team chose to provide the registration information through a .ASPX page (dynamically). What this means, which may be subtle, is that the Source Code Control system &lt;em&gt;which was just installed &lt;/em&gt;is invoked to provide the data. Thus, if part of the installation has failed, than this step usually (but not always) will highlight a failure elsewhere in the installation process.&lt;/p&gt; &lt;p&gt;OK, I said this would be about why BisRegedit is often listed (wrongly) as the culprit. Let's look at the actual invocation line and pick it apart:&lt;br /&gt;&lt;font face="Courier New"&gt;"C:\Program Files\Microsoft Visual Studio 2005 Enterprise Server\BISIISDIR\sdk\bin\bisregedit.exe"&amp;nbsp; "&lt;/font&gt;&lt;a href="http://teamsys:8080/SCC/public/application/ServiceDefinition.aspx"&gt;&lt;font face="Courier New"&gt;http://TEAMSYS:8080/SCC/public/application/ServiceDefinition.aspx&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;" TEAMSYS.BURTON.COM BisDB&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Bisregedit accepts command lines of the form:&amp;nbsp;&lt;font face="Courier New"&gt; &amp;lt;xml-document&amp;gt; &amp;lt;TeamSystem Database Server&amp;gt; &amp;lt;BisDatabase&amp;gt;&lt;br /&gt;&lt;/font&gt;where&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;em&gt;xml-document &lt;/em&gt;contains the registration data for the service. &lt;li&gt;&lt;em&gt;TeamSystem Database Server&lt;/em&gt; is the name of the data-tier system &lt;li&gt;&lt;em&gt;BisDatabase &lt;/em&gt;is the name of the database where the data will be stored.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;In the case of the Source Code Control system, the registration data is obtained by invoking the Source Code Control system (just installed!). The page at &lt;font face="Courier New"&gt;&amp;lt;InstallDir&amp;gt;/SCC/public/application/ServiceDefinition.aspx&lt;/font&gt; provides this information. From a browser (on an installation that's working), you can navigate to the same Url to see the data. E.g., open your favorite browser and enter &lt;a href="http://teamsys:8080/SCC/public/application/ServiceDefinition.aspx"&gt;&lt;font face="Courier New"&gt;http://TEAMSYS:8080/SCC/public/application/ServiceDefinition.aspx&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When everything is installed properly, the &lt;font face="Courier New"&gt;BisRegEdit&lt;/font&gt; loads the contents of the document using the following pattern:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New"&gt;XmlDocument registrationDoc = new XmlDocument();&lt;br /&gt;&amp;nbsp;registrationDocument.Load(string xmlDocument); // in this example, the parameter is the Url listed above but a file can be supplied&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;When BisRegedit fails, it may be due to a few things; I usually triage failures as follows:&lt;/p&gt; &lt;p dir="ltr" style="MARGIN-RIGHT: 0px"&gt;1. Installation log: check for failures earlier in the process. The installation log is on the client system.&lt;br /&gt;2. Event log of mid tier: check for error event log entries (the source will be VSTF * or TFS) in the &lt;em&gt;application log.&lt;/em&gt;&lt;br /&gt;3. Make sure that ServiceDefinition.aspx permits anonymous access.&lt;br /&gt;4. Check ASP.NET version&amp;nbsp; for TF web site (should be 2.x)&lt;br /&gt;5. IIS log for web site looking for 5xx or 403 status codes (generally, 401s are ok if they're followed by a 200).&lt;br /&gt;&lt;br /&gt;If there aren't any errors in the install log that are obvious, then the problem may be isolated to the Source Code Control system. I always check the event log first (on the mid/app-tier).&amp;nbsp; Look for events in the application log with the source VSTF Source Code Control. If there are any, than supplying that data will help us determine what went wrong.&lt;br /&gt;&lt;br /&gt;If there are no event log entries sourced by VSTF Source Code Control, check the system log for W3SVC entries around the same time. Even the ones marked &lt;em&gt;information&lt;/em&gt; are important.&lt;br /&gt;&lt;br /&gt;If there are no relevant event log entries, then make sure that the &lt;font face="Courier New"&gt;ServiceDefinition.aspx&lt;/font&gt; page permits anonymous access. It's supposed to be set during the installation. Use the &lt;font face="Courier New"&gt;inetmgr&lt;/font&gt; to view: Start, Run, Inetmgr (or &lt;font face="Courier New"&gt;start inetmgr &lt;/font&gt;&lt;font face="Times New Roman"&gt;from a command prompt). Open web sites, open VSTFWebSite, open SCC, open public, open application, RMB &lt;font face="Courier New"&gt;ServiceDefinition.aspx&lt;/font&gt; and look at properties, select the file security tab, select 'edit' on authentication (top-most item). Verify that the anonymous access is enabled.&lt;br /&gt;&lt;br /&gt;If anonymous access is enabled for the page, check the properties of the web site using inetmgr.Open Web Sites and RMB on VSTFWebSite (I think that's the name). Check the &lt;br /&gt;ASP.NET tab and make sure the ASP.NET version is 2.x or greater. If it's not 2.x, then the wrong version of ASP.NET is associated with the web site and Team Foundation will not work.&lt;br /&gt;&lt;br /&gt;While you're looking at the properties, select the web site tab. Make sure that IIS logging is enabled, and select the 'Advanced' button. Note the log file directory at the bottom. This is the IIS log, if there are errors indicated here, than it's possible that the web service didn't receive the request from IIS. Normally, you'll see a pattern of calls with status 401, 401, then 200 (at the end of each line).&amp;nbsp; Open the log file corresponding to the date of the failed installation (note the format of each file). There should be a line with a 500 that corresponds to the 500 internal server error that you saw earlier. There might be a 403 as well. This information is important to share when posting information about a problem.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Times New Roman"&gt;There are many of us involved with Team System that also read the newsgroups on a frequent basis. By sharing your post there, others can possibly benefit.&lt;br /&gt;&lt;br /&gt;Hope that helps -- let me know if something isn't clear.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/font&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=368634" width="1" height="1"&gt;</description></item><item><title>Introduction</title><link>http://blogs.msdn.com/jefflu/archive/2005/02/07/368362.aspx</link><pubDate>Mon, 07 Feb 2005 16:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:368362</guid><dc:creator>jefflu</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jefflu/comments/368362.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jefflu/commentrss.aspx?PostID=368362</wfw:commentRss><description>&lt;p&gt;Hi, my name is Jeff Lucovsky. I have been @ Microsoft since September 2003 working exclusively on Source Code Control. Most of my day-to-day work involves changes to the application tier but I have made some changes to the client-tier. Prior to Microsoft, I earned a living by working on that other operating system doing a wide variety of things including file systems, network file system (NFS), security, and TCP/IP. I also worked on an NT-based disk array processor for CLARiiON (now part of &lt;a href="http://www.emc.com"&gt;EMC)&lt;/a&gt;, network mandatory access control for NT4.0 systems, intrusion detection systems (IDS) and most recently control software for &lt;a href="http://www.racemi.com"&gt;Racemi&lt;/a&gt;&amp;nbsp;(an Atlanta-based company).&lt;/p&gt; &lt;p&gt;Since I've joined Microsoft, I've worked on infrastructure -- administrative and other related functions mainly. This includes web method logging, event log usage, performance counters, e-mail notification (these are called Alerts), and application tier Watson interaction (part of Beta2). I've even dabbled with our help system on the client system.&lt;/p&gt; &lt;p&gt;I'll follow up with a post on some setup issues that folks are having with the recent CTP bits.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=368362" width="1" height="1"&gt;</description></item></channel></rss>