<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.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>Stefan Goßner</title><link>http://blogs.technet.com/stefan_gossner/default.aspx</link><description>&lt;i&gt;Senior Escalation Engineer for SharePoint (WSS, SPS, MOSS) and MCMS&lt;/i&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;font size="1"&gt;All posts are provided "AS IS" with no warranties, and confers no rights.&lt;/font&gt;</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Content Deployment – The complete Guide – Part 6 – Logging</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/11/06/content-deployment-the-complete-guide-part-6-logging.aspx</link><pubDate>Fri, 06 Nov 2009 14:55:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3291983</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3291983.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3291983</wfw:commentRss><description>&lt;DIV class=sgpost&gt;
&lt;DIV style="BORDER-BOTTOM: gray 1px solid; TEXT-ALIGN: left; BORDER-LEFT: gray 1px solid; PADDING-BOTTOM: 0px; PADDING-LEFT: 10px; WIDTH: 195px; PADDING-RIGHT: 10px; BACKGROUND: #fcfcfc; FLOAT: right; BORDER-TOP: gray 1px solid; BORDER-RIGHT: gray 1px solid; PADDING-TOP: 0px"&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/10/30/content-deployment-the-complete-guide-part-1-the-basics.aspx" mce_href="http://blogs.technet.com/stefan_gossner/archive/2009/10/30/content-deployment-the-complete-guide-part-1-the-basics.aspx"&gt;Part 1 - The Basics&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-2-the-basics-continued.aspx"&gt;Part 2 - The Basics continued&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-3-configuration.aspx"&gt;Part 3 - Configuration&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/03/content-deployment-the-complete-guide-part-4-communication.aspx"&gt;Part 4 - Communication&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/04/content-deployment-the-complete-guide-part-5-quick-deployment.aspx"&gt;Part 5 - Quick Deployment&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Part 6 - Logging&lt;/B&gt;&lt;BR&gt;Part 7 - coming soon...&lt;BR&gt;Part 8 - coming soon...&lt;BR&gt;Part 9 - coming soon...&lt;/P&gt;&lt;/DIV&gt;
&lt;H2&gt;ULS Log &lt;/H2&gt;
&lt;P&gt;Both Content Deployment and the Content Deployment and Migration API use the ULS log to report problems and progress information using the following categories: &lt;/P&gt;
&lt;P&gt;For the WSS Content Deployment and Migration API: &lt;/P&gt;
&lt;UL style="MARGIN-LEFT: 57pt"&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;Category: Upgrade &lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;For the MOSS Content Deployment feature: &lt;/P&gt;
&lt;UL style="MARGIN-LEFT: 57pt"&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;Category&lt;/SPAN&gt;: Content Deployment &lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;To troubleshoot, content deployment issues these two categories should be set to Verbose: &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://blogs.technet.com/blogfiles/stefan_gossner/110609_1455_ContentDepl1.png" mce_src="http://blogs.technet.com/blogfiles/stefan_gossner/110609_1455_ContentDepl1.png"&gt; &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://blogs.technet.com/blogfiles/stefan_gossner/110609_1455_ContentDepl2.png" mce_src="http://blogs.technet.com/blogfiles/stefan_gossner/110609_1455_ContentDepl2.png"&gt; &lt;/P&gt;
&lt;P&gt;This will ensure that the whole progress of content deployment is logged into the ULS logs. &lt;/P&gt;
&lt;P&gt;In some situations it might be required to add additional categories (such as "General") as the content deployment and migration API uses the WSS object model during export and import. If a problem occurs inside the WSS object model the error will show up in the related category first. &lt;/P&gt;
&lt;H2&gt;Export/Import log &lt;/H2&gt;
&lt;P&gt;An often requested feature is to get the same log files as you will automatically get them using STSADM -o export/import. &lt;/P&gt;
&lt;P&gt;There are two possible ways to get this log file for content deployment: &lt;/P&gt;
&lt;OL style="MARGIN-LEFT: 39pt"&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;Install October 2009 Cumulative Update for &lt;A href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;974989" mce_href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;974989"&gt;WSS&lt;/A&gt; and &lt;A href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;974988" mce_href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;974988"&gt;MOSS&lt;/A&gt; &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;If you have this patch level or later these logfiles are always automatically generated and can be found on the export server of the source farm. The location of these logfiles can be found in the content deployment job report: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://blogs.technet.com/blogfiles/stefan_gossner/110609_1455_ContentDepl3.png" mce_src="http://blogs.technet.com/blogfiles/stefan_gossner/110609_1455_ContentDepl3.png"&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;The name in front of the path is the machine name where the logfiles can be found. The logfiles are stored on this server in cab file format. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;The directory will be in the ImportExportLogs directory which will be created in the directory configured as temporary path in the content deployment general settings. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;Starting with October 2009 CU these log files will always be created. &lt;STRONG&gt;[Update&amp;nbsp;Nov 13th, 2009]&amp;nbsp;&lt;/STRONG&gt;The number of logs kept is the same as the configured number of deployment reports to keep. It is not necessary to clean the logs manually. &lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;The second option is available also with previous builds. If you enable verbose logging for the "Upgrade" category you will find the entries which are usually written to the export/import logs in the ULS log. You only have to filter the logfile for the "Upgrade" category &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;The problem with this method is that you will only see the entries AFTER you changed the logging option to verbose. So you will usually not have this information available when the deployment failed the first time.&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3291983" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/MOSS+2007+_2F00_+WSS+3.0/default.aspx">MOSS 2007 / WSS 3.0</category><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>Content Deployment – The complete Guide – Part 5 – Quick Deployment</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/11/04/content-deployment-the-complete-guide-part-5-quick-deployment.aspx</link><pubDate>Wed, 04 Nov 2009 14:51:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3291423</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3291423.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3291423</wfw:commentRss><description>&lt;DIV class=sgpost&gt;
&lt;DIV style="BORDER-BOTTOM: gray 1px solid; TEXT-ALIGN: left; BORDER-LEFT: gray 1px solid; PADDING-BOTTOM: 0px; PADDING-LEFT: 10px; WIDTH: 195px; PADDING-RIGHT: 10px; BACKGROUND: #fcfcfc; FLOAT: right; BORDER-TOP: gray 1px solid; BORDER-RIGHT: gray 1px solid; PADDING-TOP: 0px"&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/10/30/content-deployment-the-complete-guide-part-1-the-basics.aspx" mce_href="http://blogs.technet.com/stefan_gossner/archive/2009/10/30/content-deployment-the-complete-guide-part-1-the-basics.aspx"&gt;Part 1 - The Basics&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-2-the-basics-continued.aspx"&gt;Part 2 - The Basics continued&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-3-configuration.aspx"&gt;Part 3 - Configuration&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/03/content-deployment-the-complete-guide-part-4-communication.aspx"&gt;Part 4 - Communication&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Part 5 - Quick Deployment&lt;/B&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/06/content-deployment-the-complete-guide-part-6-logging.aspx"&gt;Part 6 - Logging&lt;/A&gt;&lt;BR&gt;Part 7 - coming soon...&lt;BR&gt;Part 8 - coming soon...&lt;BR&gt;Part 9 - coming soon...&lt;/P&gt;&lt;/DIV&gt;
&lt;H2&gt;Quick Deployment Concepts &lt;/H2&gt;
&lt;P&gt;Quick deployment&amp;nbsp;enables authors to select specific items to be quick deployed as soon as possible. The problem here is that authors are usually not allow&amp;nbsp;to start timer jobs. To overcome this limitation it is required to store the information about which items have to be quick deployed at a place where a normal author of the site collection has write permission. And this is a list inside the source site collection. The quick deploy job that performs the actual deployment has to read the information about the items to be quick deployed from this list when it runs.&lt;/P&gt;
&lt;P&gt;As multiple different quick deploy jobs which can run with different schedules can originate at the same source site collection it is required that the items are flagged for each of quick deploy job separatelly. So it is required that the author knows about all the enabled quick deploy jobs. As the author does not have rights to enumerate all quick deploy jobs it is required to store the information about all enabled quick deploy jobs at a place where the author can read. And this is in the property bag of the root site of the source site collection.&lt;/P&gt;
&lt;H3&gt;Enable Quick Deployment &lt;/H3&gt;
&lt;P&gt;To enable quick deployment you need to modify the settings of the Quick Deploy Job listed on the Manage Content Deployment Paths and Jobs page. &lt;/P&gt;
&lt;P&gt;To enable Quick Deployment you need to check the "Allow Quick Deploy jobs along this path" option. &lt;/P&gt;
&lt;P&gt;As soon as a quick deployment job for a path is enabled two things will happen: &lt;/P&gt;
&lt;OL style="MARGIN-LEFT: 39pt"&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;The job will be marked as enabled by adjusting a field in the list item relate to this quick deploy job in the Content Deployment Jobs list if the root site of the central admin web site. &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;The unique Id of the quick deploy job is added to the &lt;STRONG&gt;quickdeployjobs&lt;/STRONG&gt; property in the property bag of the root web of the source site collection which stores the Ids for all enabled quick deploy jobs in XML format. &lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;H3&gt;Allow users to perform Quick Deployment &lt;/H3&gt;
&lt;P&gt;To be allowed to perform quick deployment, a user needs to have rights to create new items in the hidden &lt;STRONG&gt;Quick Deploy Items&lt;/STRONG&gt; list in the root site of the site collection. This list does not inherit permissions by default and only site collection administrators and members of the Quick Deploy Users group have the required permissions. &lt;/P&gt;
&lt;P&gt;Be aware that the title of this list is localized. In a german system (e.g.) the title will be &lt;STRONG&gt;Elemente für schnelle Inhaltbereitstellung&lt;/STRONG&gt;. But the URL will always be &lt;A href="http://url-to-site-collection/Quick%20Deploy%20Items"&gt;http://&lt;EM&gt;url-to-site-collection&lt;/EM&gt;/Quick%20Deploy%20Items&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The recommended way to give users permissions to perform a quick deployment is to add them to the &lt;STRONG&gt;Quick Deploy Users&lt;/STRONG&gt; group. &lt;/P&gt;
&lt;H3&gt;Perform a quick deployment &lt;/H3&gt;
&lt;P&gt;The following prerequisites need to be fulfilled to allow a user to perform a quick deploy: &lt;/P&gt;
&lt;OL style="MARGIN-LEFT: 39pt"&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;The user has contributor rights on the &lt;STRONG&gt;Quick Deploy Items&lt;/STRONG&gt; list - means he is a member of the &lt;STRONG&gt;Quick Deploy Users&lt;/STRONG&gt; group. &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;At least one quick deploy job is enabled for the site collection - means that at least one unique id for a quick deploy job has been added to the &lt;STRONG&gt;quickdeployjobs&lt;/STRONG&gt; key. &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;The page is in a valid state to be quick deployed - means that the latest revision of the page is a major version or an approved minor version that is scheduled to go live in the future. &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;No save conflict has happened. &lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;A user can perform a quick deployment of a publishing page using the console provided by the publishing feature. This action creates an entry in the &lt;STRONG&gt;Quick Deploy Items&lt;/STRONG&gt; list (which resides in the root Web of the source site collection) for each of the enabled quick deployment jobs providing the server relative URL to the item that has been selected for quick deployment. &lt;/P&gt;
&lt;P&gt;That means if the site collection is the source for three content deployment paths where each has an enabled quick deployment job you will get three list items per quick deployed publishing page. &lt;/P&gt;
&lt;P&gt;As soon as the quick deploy job gets executed it will retrieve the list of all the items flagged for this specific quick deploy job and deploy them. After a successful quick deploy the deployed items are removed from the &lt;STRONG&gt;Quick Deploy Items&lt;/STRONG&gt; list. &lt;/P&gt;
&lt;H2&gt;Potential problems related to Quick Deployment &lt;/H2&gt;
&lt;H3&gt;Possible Problems when enabling a quick deploy job &lt;/H3&gt;
&lt;P&gt;As outlined earlier in this section the &lt;STRONG&gt;quickdeployjobs&lt;/STRONG&gt; property in the property bag of the source site collection has to be adjusted to enable a quick deploy job. Problems will occur in a situation that the user trying to enable the quick deploy job does not have rights to adjust the value of this property. &lt;/P&gt;
&lt;P&gt;In this situation the user will see an access denied and an option to enter credentials of a different user. Using the "Back" button in the browser will allow the user to go back to the content deployment paths and jobs page and here he can see that the quick deployment job is marked as enabled now. &lt;/P&gt;
&lt;P&gt;The problem is that only part of the enabling has happened: the job itself has been flagged as enabled by adjusting the field in the list item in the content deployment jobs list in the central admin web site but the unique Id of the job has not been added to the property bag of the source site collection. &lt;/P&gt;
&lt;P&gt;The result of this inconsistency will be that the items being quick deployed will not be added to the quick deploy items list for this specific quick deploy job. &lt;/P&gt;
&lt;P&gt;In case that this is the only quick deploy job for this site collection it will also mean that the &lt;STRONG&gt;Quick Deploy&lt;/STRONG&gt; option in the authoring toolbar will remain disabled. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The following method is very effective to resolve this issue:&lt;/STRONG&gt; &lt;/P&gt;
&lt;UL style="MARGIN-LEFT: 54pt"&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;Disable the quick deploy job &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;Ensure that the user has rights to update the property (e.g. by adding him to the site collection administrator group) &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;Enable the quick deploy job again &lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;Possible Problems with backup/restore &lt;/H3&gt;
&lt;P&gt;In case that quick deploy has been enabled for a site collection before taking a backup means that the property bag of the root site of the site collection contains the unique id of a quick deploy job of this farm. &lt;/P&gt;
&lt;P&gt;After restoring the backup in a different farm means that the &lt;STRONG&gt;quickdeployjobs&lt;/STRONG&gt; property now contains the unique id for a job that does not exist in the current farm. &lt;/P&gt;
&lt;P&gt;Problems with this scenario will occur as soon as quick deployment is enabled for this site collection again in the new farm. What happens now is that whenever an author selects a page for quick deployment two entries will be placed in the quick deploy items list: one for the job in the new farm and one for the job that only existed in the original farm. &lt;/P&gt;
&lt;P&gt;The items for the job in the new farm will get deployed and afterwards these items will be removed from the quick deploy items list. &lt;/P&gt;
&lt;P&gt;But the items that have been added for the job that does not exist in the current farm will remain in the list forever (or at least till they get cleaned up manually). &lt;/P&gt;
&lt;P&gt;In the past I have had a couple of support cases where several ten-thousand of these orphaned entries existed in the quick deploy items list. &lt;/P&gt;
&lt;P&gt;Even cleaning up such a huge list is challenging and time consuming. &lt;/P&gt;
&lt;P&gt;To correct this it would be required to remove the invalid entries from the quickdeployjobs property in the property bag of the source site collection and afterwards it would be required to delete all entries from the quick deploy items list which do not belong to valid quick deploy jobs. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The following method is very effective to resolve this issue:&lt;/STRONG&gt; &lt;/P&gt;
&lt;UL style="MARGIN-LEFT: 54pt"&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;Manually start all quick deploy jobs for the site collection to ensure that the quick deploy items list gets cleared from valid entries &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;Disable all quick deploy jobs to ensure that the ids of the valid quick deploy jobs are removed from the &lt;STRONG&gt;quickdeployjobs&lt;/STRONG&gt; property in the property bag of the source site collection &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;Delete the &lt;STRONG&gt;quickdeployjobs&lt;/STRONG&gt; property using object model (it will be recreated when enabling the quick deploy jobs later) (see code sample below) &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;Delete all entries in the &lt;STRONG&gt;Quick Deploy Items&lt;/STRONG&gt; list (only invalid items should be in the list by now) either manually or using object model! &lt;STRONG&gt;Important: do not delete the list itself! Only delete the items in this list!&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;Reenable all quick deploy jobs for the source site collection which will recreate the &lt;STRONG&gt;quickdeployjobs&lt;/STRONG&gt; property and add the unique ids of the valid quick deploy jobs back to the property. &lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H2&gt;Code sample &lt;/H2&gt;
&lt;P&gt;The following code sample demonstrate how to enumerate all enabled quick deploy jobs in the system and dump the unique ID of these quick deploy jobs: &lt;/P&gt;
&lt;DIV style="BORDER-BOTTOM: gray 1px solid; BORDER-LEFT: gray 1px solid; BORDER-TOP: gray 1px solid; BORDER-RIGHT: gray 1px solid" id=htmlcode&gt;
&lt;DIV style="FONT-FAMILY: Courier New"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;Microsoft.SharePoint.Publishing.Administration; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;namespace&lt;/SPAN&gt;&amp;nbsp;StefanG.Tools &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt;&amp;nbsp;DumpQuickDeployJobs &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;static&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Main(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;[]&amp;nbsp;args) &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;foreach&lt;/SPAN&gt;&amp;nbsp;(ContentDeploymentJob&amp;nbsp;job&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt;&amp;nbsp;ContentDeploymentJob.GetAllJobs()) &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;{ &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;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(job.IsEnabled&amp;nbsp;&amp;amp;&amp;nbsp;job.IsQuickDeployJob) &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;{ &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;Console.WriteLine(&lt;SPAN style="COLOR: maroon"&gt;"---------------------------"&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;SPAN style="COLOR: maroon"&gt;"Job&amp;nbsp;ID&amp;nbsp;{0},&amp;nbsp;Name&amp;nbsp;{1}"&lt;/SPAN&gt;,&amp;nbsp;job.Id,&amp;nbsp;job.Name); &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;Console.WriteLine(&lt;SPAN style="COLOR: maroon"&gt;"Path:&amp;nbsp;"&lt;/SPAN&gt;&amp;nbsp;+&amp;nbsp;job.Path.Name); &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;Console.WriteLine(&lt;SPAN style="COLOR: maroon"&gt;"Source&amp;nbsp;Site&amp;nbsp;Collection:&amp;nbsp;"&lt;/SPAN&gt;&amp;nbsp;+&amp;nbsp;job.Path.SourceServerUri.ToString()&amp;nbsp;+&amp;nbsp;job.Path.SourceSiteCollection); &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;Console.WriteLine(&lt;SPAN style="COLOR: maroon"&gt;"Target&amp;nbsp;Site&amp;nbsp;Collection:&amp;nbsp;"&lt;/SPAN&gt;&amp;nbsp;+&amp;nbsp;job.Path.DestinationServerUri.ToString()&amp;nbsp;+&amp;nbsp;job.Path.DestinationSiteCollection); &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;} &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;} &lt;BR&gt;&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;} &lt;BR&gt;}&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;The following code sample demonstrates how to dump the content of the quickdeployjobs key for a given site collection: &lt;/P&gt;
&lt;DIV style="BORDER-BOTTOM: gray 1px solid; BORDER-LEFT: gray 1px solid; BORDER-TOP: gray 1px solid; BORDER-RIGHT: gray 1px solid" id=htmlcode&gt;
&lt;DIV style="FONT-FAMILY: Courier New"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;Microsoft.SharePoint.Publishing.Administration; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;Microsoft.SharePoint; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;namespace&lt;/SPAN&gt;&amp;nbsp;StefanG.Tools &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt;&amp;nbsp;DumpquickdeployjobsProperty &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;static&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Main(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;[]&amp;nbsp;args) &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;(SPSite&amp;nbsp;site&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;SPSite(&lt;SPAN style="COLOR: maroon"&gt;"http://localhost:2000"&lt;/SPAN&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;&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;(SPWeb&amp;nbsp;rootweb&amp;nbsp;=&amp;nbsp;site.RootWeb) &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;{ &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;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(rootweb.Properties.ContainsKey(&lt;SPAN style="COLOR: maroon"&gt;"quickdeployjobs"&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(rootweb.Properties[&lt;SPAN style="COLOR: maroon"&gt;"quickdeployjobs"&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;SPAN style="COLOR: maroon"&gt;"Sorry,&amp;nbsp;quickdeployjobs&amp;nbsp;property&amp;nbsp;does&amp;nbsp;not&amp;nbsp;exist."&lt;/SPAN&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;&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;} &lt;BR&gt;&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;} &lt;BR&gt;}&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;The result emitted by the above listed&amp;nbsp;code piece will look similar to this:&lt;/P&gt;
&lt;DIV style="BORDER-BOTTOM: gray 1px solid; BORDER-LEFT: gray 1px solid; BORDER-TOP: gray 1px solid; BORDER-RIGHT: gray 1px solid" id=htmlcode&gt;
&lt;DIV style="FONT-FAMILY: Courier New"&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;xml&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: red"&gt;version&lt;/SPAN&gt;="&lt;SPAN style="COLOR: blue"&gt;1.0&lt;/SPAN&gt;"&amp;nbsp;&lt;SPAN style="COLOR: red"&gt;encoding&lt;/SPAN&gt;="&lt;SPAN style="COLOR: blue"&gt;utf-16&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;?&amp;gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;ArrayOfGuid&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: red"&gt;xmlns:xsi&lt;/SPAN&gt;="&lt;SPAN style="COLOR: blue"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/SPAN&gt;"&amp;nbsp;&lt;SPAN style="COLOR: red"&gt;xmlns:xsd&lt;/SPAN&gt;="&lt;SPAN style="COLOR: blue"&gt;http://www.w3.org/2001/XMLSchema&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;guid&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;97e45b62-523a-45af-93c6-0fc3ebc44ed3&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;/&lt;SPAN style="COLOR: maroon"&gt;guid&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;guid&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;3fc1a783-a25b-7889-3cca-545523549cbb&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;/&lt;SPAN style="COLOR: maroon"&gt;guid&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;/&lt;SPAN style="COLOR: maroon"&gt;ArrayOfGuid&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Each guid in&amp;nbsp;the&amp;nbsp;property represents a&amp;nbsp;different quick deploy job.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To delete the quickdeployjobs key (see backup/restore problem above) you can use the following code: &lt;/P&gt;
&lt;DIV style="BORDER-BOTTOM: gray 1px solid; BORDER-LEFT: gray 1px solid; BORDER-TOP: gray 1px solid; BORDER-RIGHT: gray 1px solid" id=htmlcode&gt;
&lt;DIV style="FONT-FAMILY: Courier New"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;Microsoft.SharePoint.Publishing.Administration; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;Microsoft.SharePoint; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;namespace&lt;/SPAN&gt;&amp;nbsp;StefanG.Tools &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt;&amp;nbsp;DumpQuickDeployJobs &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;static&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Main(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;[]&amp;nbsp;args) &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;(SPSite&amp;nbsp;site&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;SPSite(&lt;SPAN style="COLOR: maroon"&gt;"http://localhost:2000"&lt;/SPAN&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;&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;(SPWeb&amp;nbsp;rootweb&amp;nbsp;=&amp;nbsp;site.RootWeb) &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;{ &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;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(rootweb.Properties.ContainsKey(&lt;SPAN style="COLOR: maroon"&gt;"quickdeployjobs"&lt;/SPAN&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rootweb.Properties[&lt;SPAN style="COLOR: maroon"&gt;"quickdeployjobs"&lt;/SPAN&gt;]&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;set&amp;nbsp;to&amp;nbsp;"null"&amp;nbsp;will&amp;nbsp;delete&amp;nbsp;the&amp;nbsp;property&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rootweb.Properties.Update(); &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;} &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;} &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;} &lt;BR&gt;&lt;BR&gt;&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;} &lt;BR&gt;} &lt;BR&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3291423" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/MOSS+2007+_2F00_+WSS+3.0/default.aspx">MOSS 2007 / WSS 3.0</category><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>Content Deployment – The complete Guide – Part 4 – Communication</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/11/03/content-deployment-the-complete-guide-part-4-communication.aspx</link><pubDate>Tue, 03 Nov 2009 14:25:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3291069</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3291069.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3291069</wfw:commentRss><description>&lt;DIV class=sgpost&gt;
&lt;DIV style="BORDER-BOTTOM: gray 1px solid; TEXT-ALIGN: left; BORDER-LEFT: gray 1px solid; PADDING-BOTTOM: 0px; PADDING-LEFT: 10px; WIDTH: 195px; PADDING-RIGHT: 10px; BACKGROUND: #fcfcfc; FLOAT: right; BORDER-TOP: gray 1px solid; BORDER-RIGHT: gray 1px solid; PADDING-TOP: 0px"&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/10/30/content-deployment-the-complete-guide-part-1-the-basics.aspx" mce_href="http://blogs.technet.com/stefan_gossner/archive/2009/10/30/content-deployment-the-complete-guide-part-1-the-basics.aspx"&gt;Part 1 - The Basics&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-2-the-basics-continued.aspx"&gt;Part 2 - The Basics continued&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-3-configuration.aspx"&gt;Part 3 - Configuration&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Part 4 - Communication&lt;/B&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/04/content-deployment-the-complete-guide-part-5-quick-deployment.aspx"&gt;Part 5 - Quick Deployment&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/06/content-deployment-the-complete-guide-part-6-logging.aspx"&gt;Part 6 - Logging&lt;/A&gt;&lt;BR&gt;Part 7 - coming soon...&lt;BR&gt;Part 8 - coming soon...&lt;BR&gt;Part 9 - coming soon...&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Content Deployment uses the http (or https) protocol for communication between source and target farm. Most of the communication is performed through Web service calls except for the file transfer of the exported files to the target farms which is done using a regular http POST request against an ASPX page to perform the upload operation. &lt;/P&gt;
&lt;P&gt;Communication inside the same farm (between worker process and timer service) is implemented by writing to and reading from the configuration database (starting and stopping of timer jobs) and central administration content database (job status information) of the farm. &lt;/P&gt;
&lt;H2&gt;Communication through a Web Service &lt;/H2&gt;
&lt;P&gt;This Web service is hosted within the central administration Web application at the following URL: &lt;/P&gt;
&lt;P&gt;http://target-central-admin-url/_vti_adm/ContentDeploymentRemoteImport.asmx &lt;/P&gt;
&lt;P&gt;It provides the following operations: &lt;/P&gt;
&lt;H3&gt;GetVirtualServersInformation &lt;/H3&gt;
&lt;P&gt;This operation is used during the configuration of a content deployment path. It allows enumerating all SharePoint Web applications on the target farm which will then be presented in the UI to allow a user to select it as target for the content deployment path. &lt;/P&gt;
&lt;H3&gt;GetSiteCollectionNames &lt;/H3&gt;
&lt;P&gt;This operation is also used during configuration of a content deployment path. It allows enumerating all site collections on the target farm for a given virtual server which will then be presented in the UI to allow a user to select it as a target for the content deployment path. &lt;/P&gt;
&lt;H3&gt;GetRemoteAdminServerUrl &lt;/H3&gt;
&lt;P&gt;When configuring content deployment in a farm you have to define one server that has to act as the importing server for content deployment operations. The GetRemoteAdminServerUrl operation returns the information about this server to the caller. &lt;/P&gt;
&lt;P&gt;This operation is called as well during execution of a content deployment job to identify which server in the target farm will perform the import. &lt;/P&gt;
&lt;H3&gt;CreateJob &lt;/H3&gt;
&lt;P&gt;This operation is called by an executing content deployment job on the source farm. It allows the creation of the shadow job on the target farm that will perform the import operation. &lt;/P&gt;
&lt;H3&gt;RunJob &lt;/H3&gt;
&lt;P&gt;This operation is called by an executing content deployment job on the source farm to start an earlier created shadow content deployment job on the target farm. This job will perform the import operation. &lt;/P&gt;
&lt;H3&gt;GetJobStatus &lt;/H3&gt;
&lt;P&gt;This operation is called by an executing content deployment job on the source farm in a configurable interval (default: 10 seconds) to get the status of the import operation from the target farm. &lt;/P&gt;
&lt;P&gt;It should be noted that refreshing the content deployment status page does not necessarily result in a request for status to the target farm. &lt;/P&gt;
&lt;P&gt;It should be noted that if the returned status does not change for a configurable timeframe (default: 10 minutes) the content deployment job on the source farm will report a timeout – independent whether or not the import operation later finishes successfully. &lt;/P&gt;
&lt;P&gt;This affects mainly full deployment jobs which deploy a large amount of data. In this situation the decompressing phase on the target server can take longer than 10 minutes which will result in such a timeout. &lt;/P&gt;
&lt;H3&gt;CancelJob &lt;/H3&gt;
&lt;P&gt;This operation is called by an executing content deployment job on the source farm to cancel its shadow content deployment job on the target farm when a user requested the cancellation of the content deployment through the UI. Be aware that such a cancel operation can only be performed if the decompressing operation has not yet started. &lt;/P&gt;
&lt;H3&gt;DeleteJob &lt;/H3&gt;
&lt;P&gt;This operation is called by an executing content deployment job on the source farm to delete its shadow content deployment job on the target farm after the deployment has been completed. &lt;/P&gt;
&lt;H2&gt;File transfer through http POST &lt;/H2&gt;
&lt;P&gt;File transfer of the export packages to the target farm is performed through an http POST request to the following page which is hosted within the central administration Web application: &lt;/P&gt;
&lt;P&gt;&lt;A href="http://target-central-admin-url/_admin/Content%20Deployment/DeploymentUpload.aspx"&gt;http://target-central-admin-url/_admin/Content%20Deployment/DeploymentUpload.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;The uploaded file is sent as payload of the POST request. The information about the name of the file and the shadow content deployment job the uploaded file belongs to is provided through query string parameters. The actual URL sent with the http request would look similar to this: &lt;/P&gt;
&lt;P&gt;http://target-central-admin-url/_admin/Content Deployment/DeploymentUpload.aspx?filename="ExportedFiles.cab"&amp;amp;remoteJobId="49bebd7d-62d0-4d68-a1f0-9118b3ac4416" &lt;/P&gt;
&lt;H2&gt;Content Deployment Communication Flow &lt;/H2&gt;
&lt;P&gt;To describe process used during content deployment we will use following diagram. Be aware that communication in the same farm (red arrows) is implemented by writing to/reading from the sharepoint configuration and central administration content database. Communication between farms happens through the web services (dark blue arrows) and the http post request to do the file uploaded (light blue arrow): &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://blogs.technet.com/photos/stefan_gossner/images/3291071/original.aspx"&gt; &lt;/P&gt;
&lt;P&gt;When a content deployment job is started through the central admin UI a new one time timer job is created and executed (1). Alternatively the preconfigured timer job for a scheduled deployment job can be started by the timer service manually. &lt;/P&gt;
&lt;P&gt;The timer job exports the configured content into a temp directory and compresses it into one or multiple cab files. &lt;/P&gt;
&lt;P&gt;When the export is finished the timerjob calls the &lt;STRONG&gt;GetRemoteAdminServerUrl&lt;/STRONG&gt; operation of the ContentDeploymentRemoteImport Web service to get the information about the import server to use (2). &lt;/P&gt;
&lt;P&gt;The next step is that the timer job calls the &lt;STRONG&gt;CreateJob&lt;/STRONG&gt; operation of the ContentDeploymentRemoteImport Web service to create the shadow content deployment job and the associated one time import timer job on the target farm. This job will remain in a stopped state (3/4). &lt;/P&gt;
&lt;P&gt;Afterwards the timer job on the source farm uploads the exported cab files to the temp directory on the import server in the target farm using http upload to the DeploymentUpload.aspx (5). &lt;/P&gt;
&lt;P&gt;After the upload is completed the timer job on the source farm calls the &lt;STRONG&gt;RunJob&lt;/STRONG&gt; operation of the ContentDeploymentRemoteImport Web service to start the import timer job on the target farm (3/4). &lt;/P&gt;
&lt;P&gt;While the import is running the import timer job will update the status of the deployment in the associated content deployment job list item. &lt;/P&gt;
&lt;P&gt;Every 10 seconds (configurable though object model by setting the RemotePollingInterval setting – &lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-3-configuration.aspx" mce_href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-3-configuration.aspx"&gt;see part 2&lt;/A&gt;) the timer job on the source farm will call the &lt;STRONG&gt;GetJobStatus&lt;/STRONG&gt; operation of the ContentDeploymentRemoteImport Web service to retrieve the status of the import operation (3/6). The timer job on the source farm will update the status in the content deployment job list item with the status received from the target farm. If the update hasn't changed for 600 seconds (configurable though object model by setting the RemoteTimeout setting – &lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-3-configuration.aspx" mce_href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-3-configuration.aspx"&gt;see part 2&lt;/A&gt;) the timer job on the source farm assumes that something went wrong and will report a timeout. &lt;/P&gt;
&lt;P&gt;When the timer job on the source server receives the information that the import operation has completed (either succeeded or failed) it will delete the shadow deployment job and the associated timer job through a call to the &lt;STRONG&gt;DeleteJob&lt;/STRONG&gt; operations of the ContentDeploymentRemoteImport Web service (3/4) &lt;/P&gt;
&lt;P&gt;The central administration retrieves the status of the timer job by looking at the content deployment job and job report list item which are updated by the timer service on the source farm (7). Every refresh of the page only reads the status in the local content deployment job list item. No call to the target farm to get a status update is done when refreshing this page.&lt;/P&gt;&lt;/DIV&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3291069" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/MOSS+2007+_2F00_+WSS+3.0/default.aspx">MOSS 2007 / WSS 3.0</category><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>Content Deployment – The complete Guide – Part 3 – Configuration</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-3-configuration.aspx</link><pubDate>Mon, 02 Nov 2009 16:04:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3290849</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3290849.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3290849</wfw:commentRss><description>&lt;DIV class=sgpost&gt;
&lt;DIV style="BORDER-BOTTOM: gray 1px solid; TEXT-ALIGN: left; BORDER-LEFT: gray 1px solid; PADDING-BOTTOM: 0px; PADDING-LEFT: 10px; WIDTH: 195px; PADDING-RIGHT: 10px; BACKGROUND: #fcfcfc; FLOAT: right; BORDER-TOP: gray 1px solid; BORDER-RIGHT: gray 1px solid; PADDING-TOP: 0px"&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/10/30/content-deployment-the-complete-guide-part-1-the-basics.aspx" mce_href="http://blogs.technet.com/stefan_gossner/archive/2009/10/30/content-deployment-the-complete-guide-part-1-the-basics.aspx"&gt;Part 1 - The Basics&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-2-the-basics-continued.aspx"&gt;Part 2 - The Basics continued&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Part 3 - Configuration&lt;/B&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/03/content-deployment-the-complete-guide-part-4-communication.aspx"&gt;Part 4 - Communication&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/04/content-deployment-the-complete-guide-part-5-quick-deployment.aspx"&gt;Part 5 - Quick Deployment&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/06/content-deployment-the-complete-guide-part-6-logging.aspx"&gt;Part 6 - Logging&lt;/A&gt;&lt;BR&gt;Part 7 - coming soon...&lt;BR&gt;Part 8 - coming soon...&lt;BR&gt;Part 9 - coming soon...&lt;/P&gt;&lt;/DIV&gt;
&lt;H2&gt;Content Deployment General Settings &lt;/H2&gt;
&lt;P&gt;The content deployment configuration in MOSS 2007 differentiates between settings that are unique for each content deployment path or job and general settings that affect the configuration of the whole farm and applies to all paths and jobs. &lt;/P&gt;
&lt;P&gt;This section will cover the general settings. &lt;/P&gt;
&lt;P&gt;Access to the content deployment configuration information is provided through the following class: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft.SharePoint.Publishing.Administration.ContentDeploymentConfiguration &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The content deployment general settings are stored in the configuration database of the farm. &lt;/P&gt;
&lt;P&gt;It should be noted that only part of the settings can be configured through the Central Administration UI. Some settings have to be done in the web.config of the central administration website others can only be adjusted using custom code. &lt;/P&gt;
&lt;H3&gt;Settings configurable through the UI &lt;/H3&gt;
&lt;P&gt;After installing MOSS 2007 you will find the content deployment general settings on the operations tab in the central administration: &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;STRONG&gt;Content Deployment Settings &lt;BR&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;IMG alt="" src="http://blogs.technet.com/blogfiles/stefan_gossner/110209_1604_ContentDepl1.png" mce_src="http://blogs.technet.com/blogfiles/stefan_gossner/110209_1604_ContentDepl1.png"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The following settings can be configured using the Content Deployment Settings page in the UI: &lt;/P&gt;
&lt;H4&gt;Accept Content Deployment Jobs &lt;/H4&gt;
&lt;P&gt;This option allows farm administrators to decide whether or not this farm can be used as the target of content deployment operations. If this option is set to "Reject incoming content deployment jobs" then the current farm can act only as the source for content deployment but other farms cannot deploy content to this farm. &lt;/P&gt;
&lt;P&gt;The default setting is "Reject incoming content deployment jobs". &lt;/P&gt;
&lt;H4&gt;Import Server &lt;/H4&gt;
&lt;P&gt;Each farm has to define one server that acts as the import server for incoming content deployment jobs. &lt;/P&gt;
&lt;P&gt;Import operations can impact the performance of a server significantly (for example, the memory consumption can be pretty high), therefore it is a good practice to use a dedicated server to perform the import operation. &lt;/P&gt;
&lt;P&gt;It is required that the specified server has the central administration Web site provisioned. It should be noted that with older hotfix levels the UI does not verify if the central administration Web site has really been provisioned on the selected server. If a server has been selected that does not have the central administration Web site provisioned, content deployment will fail. &lt;/P&gt;
&lt;P&gt;The default setting for this option will be the server that hosts the instance of the Central Administration Web used to render the page. &lt;/P&gt;
&lt;H4&gt;Export Server &lt;/H4&gt;
&lt;P&gt;Each farm has to define one server that acts as the export server for outgoing content deployment jobs. &lt;/P&gt;
&lt;P&gt;Export operations can impact the performance of a server significantly (for example, the memory consumption can be pretty high), therefore it is a good practice to use a dedicated server to perform the export operation. &lt;/P&gt;
&lt;P&gt;It is required that the specified server has the central administration Web site provisioned. It should be noted that with older hotfix levels the UI does not verify if the central administration Web site has really been provisioned on the selected server. In the case where a server has been selected that does not have the central administration Web site provisioned, content deployment jobs will not start and will remain in the "Preparing" phase. &lt;/P&gt;
&lt;P&gt;The default setting for this option will be the server that hosts the Central Administration Web site. &lt;/P&gt;
&lt;DIV&gt;
&lt;TABLE style="BORDER-COLLAPSE: collapse" border=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="WIDTH: 106px"&gt;
&lt;COL style="WIDTH: 516px"&gt;&lt;/COLGROUP&gt;
&lt;TBODY vAlign=top&gt;
&lt;TR&gt;
&lt;TD style="PADDING-RIGHT: 6px; BORDER-RIGHT: medium none"&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 10px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #e9eff7; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 8px"&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;If the Content Deployment Settings have never been configured the Content Deployment settings page will show the default values which will not get committed to the configuration database until you press OK. This means that although you see a selected export server and a temporary directory, these values are not saved.&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;H4&gt;Connection Security &lt;/H4&gt;
&lt;P&gt;This is a setting that impacts incoming content deployment jobs. If this setting is set to require encryption then SSL encryption is required for the incoming traffic. Any incoming deployment requests without SSL will be denied. &lt;/P&gt;
&lt;P&gt;This option is usually required in the case where the upload goes over the internet or another unsecure line. &lt;/P&gt;
&lt;P&gt;The default is that SSL encryption is required as this is the more secure setting. &lt;/P&gt;
&lt;H4&gt;Temporary Files &lt;/H4&gt;
&lt;P&gt;This setting specifies the location of the compressed cabinet files before they get uploaded to the target farm or after they have been received from the source farm. Please note that this setting does not specify the location of the uncompressed content! &lt;/P&gt;
&lt;DIV&gt;
&lt;TABLE style="BORDER-COLLAPSE: collapse" border=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="WIDTH: 106px"&gt;
&lt;COL style="WIDTH: 516px"&gt;&lt;/COLGROUP&gt;
&lt;TBODY vAlign=top&gt;
&lt;TR&gt;
&lt;TD style="PADDING-RIGHT: 6px; BORDER-RIGHT: medium none"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Warning:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt; &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 10px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #e9eff7; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 8px"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Be aware that the UI tries to create the temp directory during saving to verify if the path is accurate. This will happen on the server running the Central Administration Web site used to configure the settings - not on the configured export or import server! &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;In case where the export and import servers are not identical to the central admin server you are using to configure the settings the export / import process will try to create the directory during export / import if it does not exist. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;So be sure to enter a path that is valid on both the export and import server and on the central admin server as no further checks will be done before executing content deployment the first time.&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P&gt;The uncompressed data will be stored in a directory below the directory returned from the Windows OS function, GetTempPath. GetTempPath will use the following logic to determine the location (the first hit wins): &lt;/P&gt;
&lt;UL style="MARGIN-LEFT: 57pt"&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;The path specified by the TMP environment variable. &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;The path specified by the TEMP environment variable. &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;The path specified by the USERPROFILE environment variable. &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;The Windows directory. &lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;These locations are usually found on the system drive. &lt;/P&gt;
&lt;P&gt;Due to the above, it is a good practice to configure the TMP environment variable of the user assigned to the OWSTIMER service and the application pool of the central admin Web site to a location that has sufficient disk space. &lt;/P&gt;
&lt;DIV&gt;
&lt;TABLE style="BORDER-COLLAPSE: collapse" border=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="WIDTH: 106px"&gt;
&lt;COL style="WIDTH: 516px"&gt;&lt;/COLGROUP&gt;
&lt;TBODY vAlign=top&gt;
&lt;TR&gt;
&lt;TD style="PADDING-RIGHT: 6px; BORDER-RIGHT: medium none"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;STRONG&gt;Important:&lt;/STRONG&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 10px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #e9eff7; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 8px"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Ensure that the TMP environment variable of the farm account points to a location with sufficient disk space on both the source and the target farm.&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;H4&gt;Reporting &lt;/H4&gt;
&lt;P&gt;This setting specifies how many reports are kept for each content deployment job. The default setting is 20. &lt;/P&gt;
&lt;H3&gt;Settings configurable through the web.config &lt;/H3&gt;
&lt;P&gt;Some settings which affect content deployment have to be configured in the web.config of the central administration Web application. &lt;/P&gt;
&lt;P&gt;Currently the following options are available: &lt;/P&gt;
&lt;H4&gt;RetryOption &lt;/H4&gt;
&lt;P&gt;This is a new option that has been added with build 12.0000.6315.5000. &lt;/P&gt;
&lt;P&gt;It has been implemented to mitigate the problems that can occur when content deployment jobs are executed in parallel or if authoring activities badly interact with the export phase. &lt;/P&gt;
&lt;P&gt;To overcome this limitation the RetryOption has been implemented which allows an export to be retried if the previous export failed. This option can either do a simple retry, which means the same export will be performed again or it can be configured to exclude the sites (SPWeb objects) that caused problems from the next attempt. This allows content deployment to be used in a limited manner where persistent problems in specific sites would cause content deployment jobs to fail. &lt;/P&gt;
&lt;P&gt;This setting defines the default value which applies to new jobs. It is possible to specify different values for individual jobs using additional settings which will be covered later. &lt;/P&gt;
&lt;P&gt;Possible values for this option are None (=0), SkipFailedWebs (=1), and SimpleRetry (=2). &lt;/P&gt;
&lt;P&gt;The default value is None which means that no retry attempt is performed. &lt;/P&gt;
&lt;P&gt;See later in the Content Deployment Job configuration settings for an example on how to configure this option in the web.config. &lt;/P&gt;
&lt;H4&gt;ExportRetries &lt;/H4&gt;
&lt;P&gt;This option is tied to the previous option. If the RetryOption is enabled this setting defines how many times the export will be retried before the job finally ends with a failure. To ensure that the deployment jobs does not run forever if a persistent problem occurs you should avoid configuring this to a number higher than 5. &lt;/P&gt;
&lt;P&gt;This setting defines the default value which applies to new jobs. It is possible to specify different values for individual jobs using additional settings which will be covered later. &lt;/P&gt;
&lt;P&gt;Possible Values: 1-999. A small number (3-5) is recommended &lt;/P&gt;
&lt;P&gt;(See later in the Content Deployment Job configuration settings for an example on how to configure this option in the web.config.)&lt;/P&gt;
&lt;H3&gt;Settings configurable through custom code &lt;/H3&gt;
&lt;P&gt;Some settings are only exposed through the object model because the product group assumed that there is no need to change the default values. &lt;/P&gt;
&lt;P&gt;Access to the content deployment configuration information is provided through the following class: &lt;BR&gt;&lt;STRONG&gt;Microsoft.SharePoint.Publishing.Administration.ContentDeploymentConfiguration &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In addition to the settings listed in the last two sections, this class exposes the following additional properties: &lt;/P&gt;
&lt;H4&gt;FileMaxSize &lt;/H4&gt;
&lt;P&gt;This setting allows the maximum size of each generated cab file to be defined. &lt;/P&gt;
&lt;P&gt;The default value for this setting is 10 MB. &lt;/P&gt;
&lt;P&gt;Please note that this does not mean that cab files will never exceed 10 MB. Content deployment does not split files over multiple cab files. As a result cab files can exceed this limit. For example, if a file in a document library that needs to be deployed cannot be compressed to a size smaller than 30 MB then the cab file will end up at least 30 MB in size. &lt;/P&gt;
&lt;H4&gt;RemoteTimeout &lt;/H4&gt;
&lt;P&gt;After the import job on the target server has been started the content deployment job on the export server of the source farm polls the target farm for status updates in regular intervals. If the status does not change for the timeframe configured through this value the exporting server reports a timeout. &lt;/P&gt;
&lt;P&gt;This affects mainly full deployment jobs which deploy a large amount of data. If in such a situation the decompressing phase on the target server takes longer than the configured RemoteTimeout values you will see such a timeout. &lt;/P&gt;
&lt;P&gt;The default for this setting is 10 minutes. &lt;/P&gt;
&lt;H4&gt;RemotePollingIntervall &lt;/H4&gt;
&lt;P&gt;This setting is tightly bound to the previous. It defines the interval used by the exporting server to check for status changes on the target server. &lt;/P&gt;
&lt;P&gt;Usually it should not be required to change this setting. &lt;/P&gt;
&lt;P&gt;The default for this setting is 10 seconds. &lt;/P&gt;
&lt;P&gt;The following code sample demonstrates how to adjust the RemoteTimeout value. The other settings can be adjusted in a similar manner: &lt;/P&gt;
&lt;P style="BACKGROUND: #f2f2f2; MARGIN-LEFT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 10pt"&gt;
&lt;DIV style="FONT-FAMILY: Courier New"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;Microsoft.SharePoint.Publishing.Administration;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;namespace&lt;/SPAN&gt;&amp;nbsp;StefanG.Tools&amp;nbsp; &lt;BR&gt;{&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt;&amp;nbsp;AdjustContentDeploymentDeploymentSettings&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;static&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Main(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;[]&amp;nbsp;args)&amp;nbsp; &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;ContentDeploymentConfiguration&amp;nbsp;config&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;ContentDeploymentConfiguration.GetInstance();&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;config.RemoteTimeout&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;3600&lt;/SPAN&gt;;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;3600&amp;nbsp;seconds&amp;nbsp;=&amp;nbsp;1&amp;nbsp;hour.&amp;nbsp;&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;config.Update();&amp;nbsp; &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; &lt;BR&gt;} &lt;BR&gt;&lt;/DIV&gt;&lt;/SPAN&gt;
&lt;H2&gt;Content Deployment Path Settings &lt;/H2&gt;
&lt;P&gt;As discussed earlier a content deployment path defines the content flow from a single source site collection to a single target site collection. &lt;/P&gt;
&lt;P&gt;Access to the content deployment path configuration information is provided through the following class:&lt;BR&gt;&lt;STRONG&gt;Microsoft.SharePoint.Publishing.Administration.ContentDeploymentPath &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This class stores its data in the Content Deployment Paths list which resides in the root web of the central admin website:&lt;BR&gt;&lt;A href="http://url-to-central-admin/lists/content%20deployment%25paths" mce_href="http://url-to-central-admin/lists/content%20deployment%25paths"&gt;http://url-to-central-admin/lists/content%20deployment%25paths&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Be aware that only part of the settings can be configured through Central Administration. Some additional settings can to be done through STSADM commands. &lt;/P&gt;
&lt;H3&gt;Settings configurable through Central Administration &lt;/H3&gt;
&lt;P&gt;The following settings can be configured using the Content Deployment Path Settings page in Central Administration: &lt;/P&gt;
&lt;H4&gt;Name &lt;/H4&gt;
&lt;P&gt;The Name for a content deployment path has to be unique. &lt;/P&gt;
&lt;H4&gt;Description &lt;/H4&gt;
&lt;P&gt;The description for the content deployment path. &lt;/P&gt;
&lt;H4&gt;Source Web Application &lt;/H4&gt;
&lt;P&gt;This setting defines the URL to the source Web application. The UI provides a drop down with the names of all Web applications on the source server. It should be noted that although the UI presents the Web application name in the drop down only the URL to the site collection is stored in the path settings. &lt;/P&gt;
&lt;H4&gt;Source Site Collection &lt;/H4&gt;
&lt;P&gt;This setting defines the server relative URL for the source site collection which resides inside the selected source web application. As soon as a source Web application has been chosen by a user the UI populates the drop down box with all server relative URLs for the selected Web application. &lt;/P&gt;
&lt;H4&gt;Destination Central Administration Web Application &lt;/H4&gt;
&lt;P&gt;This setting defines the URL to a server in the target farm that hosts an instance of the central administration Web site. It does not matter if this is the Import server in the target farm or a different server as long as the central administration Web application has been provisioned on this server. &lt;/P&gt;
&lt;P&gt;It should be noted that the protocol used in this setting defines whether the future communication to the target farm will use http or SSL. &lt;/P&gt;
&lt;P&gt;The UI will present a warning when http is being used: &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://blogs.technet.com/blogfiles/stefan_gossner/110209_1604_ContentDepl2.png" mce_src="http://blogs.technet.com/blogfiles/stefan_gossner/110209_1604_ContentDepl2.png"&gt; &lt;/P&gt;
&lt;H4&gt;Authentication Information &lt;/H4&gt;
&lt;P&gt;This setting defines the credentials being used to communicate with the target farm. The account being used has to have farm administrator rights on the target farm. When the same farm account is used in both farms or when the path links two site collections in the same farm the option to connect using the application pool account can be utilized. &lt;/P&gt;
&lt;P&gt;Alternatively you can enter the credentials to the target farm and decide whether to use integrated authentication or basic. &lt;/P&gt;
&lt;H4&gt;Destination Web Application &lt;/H4&gt;
&lt;P&gt;This setting defines the URL to the target Web application. &lt;/P&gt;
&lt;P&gt;The UI provides a drop down with the names of all Web applications on the target server which is populated as soon as the URL to the target central administration Web application has been entered and the connect button has been pressed. &lt;/P&gt;
&lt;P&gt;It should be noted that although the UI presents the Web application name in the drop down only the URL to the site collection is stored in the path settings. &lt;/P&gt;
&lt;H4&gt;Destination Site Collection &lt;/H4&gt;
&lt;P&gt;This setting defines the server relative URL for the destination site collection which resides inside the selected destination web application. As soon as a destination Web application has been chosen by a user the UI populates the drop down box with all server relative URLs for the selected Web application. &lt;/P&gt;
&lt;H4&gt;User Names &lt;/H4&gt;
&lt;P&gt;This setting is the equivalent to the SPImportUserInfoDateTimeOption setting of the underlying content deployment and migration API. It defines whether user information from the source system should be associated with the content after it has been deployed to the target. &lt;/P&gt;
&lt;H4&gt;Security Information &lt;/H4&gt;
&lt;P&gt;This setting defines the level of granularity to use for security information from the source system should be deployed to the target system. &lt;/P&gt;
&lt;P&gt;Three different levels are possible: &lt;/P&gt;
&lt;UL style="MARGIN-LEFT: 57pt"&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;&lt;STRONG&gt;All&lt;/STRONG&gt;: all security information should be deployed &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;&lt;STRONG&gt;Role definitions only&lt;/STRONG&gt;: this option allows to deploy everything except the actual user assignments. That is an interesting option if you would like to have the same sharepoint groups with identical permissions in source and target environment but different users due to different AD infrastructure assigned to the groups. &lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-FAMILY: Cambria"&gt;&lt;STRONG&gt;None&lt;/STRONG&gt;: no security information should be deployed to the target server. That means all security related settings will be inherited from existing content on the target farm. &lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;Settings configurable through STSADM &lt;/H3&gt;
&lt;P&gt;Some settings are only exposed through STSADM commands. &lt;/P&gt;
&lt;H4&gt;KeepTemporaryFiles &lt;/H4&gt;
&lt;P&gt;When performing a content deployment operation the exporting server first exports the content into a temporary directory on the disk and then compresses the data. After the deployment is done, the temporary files are cleaned up - more or less (we will cover this later). &lt;/P&gt;
&lt;P&gt;This setting allows you to control in which situations the cleanup will happen. This can be interesting when it comes to troubleshooting content deployment problems. Enabling this option allows you to keep and inspect the generated cab files to identify what has been deployed. &lt;/P&gt;
&lt;P&gt;We at Microsoft Support often use this option when working on support cases. &lt;/P&gt;
&lt;P&gt;To modify this option please use the following STSADM command: &lt;/P&gt;
&lt;P&gt;STSADM -o editcontentdeploymentpath -pathname &amp;lt;pathname&amp;gt; -keeptemporaryfiles Never|Always|Failure &lt;BR&gt;(In case your content deployment path name contains blanks please specify it with double quotes.) &lt;/P&gt;
&lt;P&gt;Possible values: Never (=0), Always (=1), Failure (=2) &lt;/P&gt;
&lt;P&gt;Be aware that Failure means fatal errors. In case that warning or non-fatal errors are reported in the deployment log the job would still report "Success" and the temporary files would not be preserved even if you specified "Failure" for this option. &lt;/P&gt;
&lt;P&gt;The default is Never. &lt;/P&gt;
&lt;H4&gt;EnableEventReceiver &lt;/H4&gt;
&lt;P&gt;This property allows to control whether or not asynchronous event receivers are allowed to fire during the import. The default is that asynchronous event receivers are disabled during import. This configures the SPImportSettings.SuppressAfterEvents setting of the content deployment and migration API when performing the import. &lt;/P&gt;
&lt;P&gt;Any modification to the target database that happens in parallel with an import could potentially lead to a deadlock in the SQL database which could cause content deployment import to fail. As asynchronous event receivers get executed in parallel with the import operation such deadlocks could be caused by these event handlers. That's the reason why this option is disabled by default. In general it should not be required to have these event handlers enabled in case that they should modify sharepoint content as the same actions would have fired on the source system and would have performed the modification there already. So the changes done by the event receiver will be deployed to the target system using content deployment. You should only enable after events if you are sure that these events are not modifying anything inside the sharepoint database the import runs in. E.g. if the event receivers only send emails or update content in other databases. &lt;/P&gt;
&lt;P&gt;This option can be modified using the following STSADM command: &lt;/P&gt;
&lt;P&gt;STSADM -o editcontentdeploymentpath -pathname &amp;lt;pathname&amp;gt; -enableeventreceivers yes | no &lt;/P&gt;
&lt;P&gt;Possible values: No (=0), Yes (=1) &lt;/P&gt;
&lt;P&gt;Default is No. &lt;/P&gt;
&lt;H4&gt;EnableCompression &lt;/H4&gt;
&lt;P&gt;This property allows you to control whether the data being deployed is being compressed during the deployment or if the uncompressed data should be sent to the destination server. This setting is enabled by default to provide acceptable performance when uploading the content to a server over a slow connection. In an intranet scenario or when deploying content between two site collections on the same server, the overhead to perform compression and decompression might be higher than the additional time to transport the uncompressed data. Here the compress and uncompress time could cause a significant overhead in the performance of the content deployment jobs. &lt;/P&gt;
&lt;P&gt;In such a situation it might make sense to disable the compression. &lt;/P&gt;
&lt;P&gt;This setting configures the SPDeploymentSettings.FileCompression property of the content deployment and migration API during export and import. &lt;/P&gt;
&lt;P&gt;To modify this option use the following STSADM command: &lt;/P&gt;
&lt;P&gt;STSADM -o editcontentdeploymentpath -pathname &amp;lt;pathname&amp;gt; -enablecompression yes | no &lt;/P&gt;
&lt;DIV&gt;
&lt;TABLE style="BORDER-COLLAPSE: collapse" border=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="WIDTH: 106px"&gt;
&lt;COL style="WIDTH: 516px"&gt;&lt;/COLGROUP&gt;
&lt;TBODY vAlign=top&gt;
&lt;TR&gt;
&lt;TD style="PADDING-RIGHT: 6px; BORDER-RIGHT: medium none"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Warning:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt; &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 10px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #e9eff7; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 8px"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;Before disabling compression, check the version of the Microsoft.SharePoint.Publishing.dll on your disk. A known problem with disabling this option was fixed in build 12.0000.6315.5000. If your Microsoft.SharePoint.Publishing.dll has a lower build number you cannot disable this option as it would cause your content deployment job to fail. &lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P&gt;Possible values: No (=0), Yes (=1) &lt;/P&gt;
&lt;P&gt;The default value is Yes. &lt;/P&gt;
&lt;H2&gt;Content Deployment Job Settings &lt;/H2&gt;
&lt;P&gt;As discussed earlier a content deployment job defines for which part of a site collection and in which schedule content is transferred to the target site collection. &lt;/P&gt;
&lt;P&gt;Access to the content deployment job configuration information is provided through the following class: &lt;BR&gt;&lt;STRONG&gt;Microsoft.SharePoint.Publishing.Administration.ContentDeploymentJob &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This class stores its data in the Content Deployment Jobs list which resides in the root web of the central admin website: &lt;BR&gt;&lt;A href="http://url-to-central-admin/lists/content%20deployment%25jobs" mce_href="http://url-to-central-admin/lists/content%20deployment%25jobs"&gt;http://url-to-central-admin/lists/content%20deployment%25jobs&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Be aware that only part of the settings can be configured through a UI. Some additional settings can to be done through web.config or STSADM commands.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Settings configurable through the UI &lt;/H3&gt;
&lt;P&gt;The following settings can be configured using the Content Deployment Job Settings page in the UI: &lt;/P&gt;
&lt;H4&gt;Name &lt;/H4&gt;
&lt;P&gt;The Name for a content deployment job has to be unique. Be aware that it has to be unique for all Jobs - not just for all jobs for a specific path. For example, you cannot create a job named "Deploy All" for Path 1 and a job named "Deploy All" for Path 2. &lt;/P&gt;
&lt;H4&gt;Description &lt;/H4&gt;
&lt;P&gt;The description for the content deployment job. &lt;/P&gt;
&lt;H4&gt;Path &lt;/H4&gt;
&lt;P&gt;This setting identifies the content deployment path that is associated with the current content deployment job. This setting is represented by a drop down in the UI which is populated with all content deployment path definitions in the current farm. &lt;/P&gt;
&lt;H4&gt;Scope &lt;/H4&gt;
&lt;P&gt;This setting defines whether the whole site collection or only specific sites should be deployed. The UI provides an additional option to show a treeview with all sites in the site collection where a user can pick the sites that should be deployed. &lt;/P&gt;
&lt;P&gt;Here he can also decide whether to deploy the whole subtree starting at the selected site or only the selected site. &lt;/P&gt;
&lt;P&gt;It is not possible to explicitly exclude specific sites from the deployment. To achieve this it will be required to use a combination of site and subtree inclusions which omit the part of the site collection that should not be deployed. &lt;/P&gt;
&lt;H4&gt;Frequency &lt;/H4&gt;
&lt;P&gt;This setting allows the schedule for the content deployment job to be defined. This option is disabled by default which means that the content deployment job has to be executed manually. The UI provides various different options to schedule the execution of a content deployment job. &lt;/P&gt;
&lt;P&gt;It should be noted that content deployment does not work reliably if multiple export or import operations for the same site collection are executed at the same time. That means you should schedule different jobs for the same source or target site collection so that they do not overlap. &lt;/P&gt;
&lt;P&gt;It should also be noted that the schedule is not stored in the content deployment job itself. For each Content Deployment Job there is an assigned Timer Job (the timer job is an instance of the class Microsoft.SharePoint.Publishing.Administration.ContentDeploymentJobDefinition) which does the actual work. The schedule will be assigned to the Schedule property of this timer job. &lt;/P&gt;
&lt;P&gt;The content deployment job object itself holds a reference to the timer job. &lt;/P&gt;
&lt;H4&gt;Deployment Options &lt;/H4&gt;
&lt;P&gt;This setting defines if the deployment job will perform a full or an incremental deployment. This setting is equivalent to the SPExportMethodType property passed into the content deployment and migration API. &lt;/P&gt;
&lt;H4&gt;Notification &lt;/H4&gt;
&lt;P&gt;This setting defines if an email is sent when a content deployment job has succeeded and/or failed. The UI requires that an email address be provided when one of the options is enabled. &lt;/P&gt;
&lt;H3&gt;Settings configurable through the web.config file &lt;/H3&gt;
&lt;P&gt;Some settings which affect a content deployment job have to be configured in the web.config of the central administration Web application. &lt;/P&gt;
&lt;P&gt;Currently the following options are available: &lt;/P&gt;
&lt;H4&gt;RetryOption &lt;/H4&gt;
&lt;P&gt;This is a new option that has been added with build 12.0000.6315.5000. &lt;/P&gt;
&lt;P&gt;It has been implemented to mitigate the problems that can occur when content deployment jobs are executed in parallel or if authoring activities badly interact with the export phase. &lt;/P&gt;
&lt;P&gt;To overcome this limitation the retry feature has been implemented which allows the export to be retried if the previous export failed. This option can either do a simple retry – means perform the same export again or it can allow excluding the sites (SPWeb objects) that caused the problem from the next attempt. This allows you to use content deployment in a limited manner in situations where persistent problems in specific sites would cause content deployment jobs to fail. &lt;/P&gt;
&lt;P&gt;This setting defines the default value which applies to new jobs. It is possible to specify different values for individual jobs using additional settings. We will cover this later. &lt;/P&gt;
&lt;P&gt;Possible values for this option are None (=0), SkipFailedWebs (=1), SimpleRetry (=2) &lt;/P&gt;
&lt;P&gt;The default value is None which means that no retry attempt is performed. &lt;/P&gt;
&lt;H4&gt;ExportRetries &lt;/H4&gt;
&lt;P&gt;This option is tied to the previous option. If Retry is enabled this setting defines how many times the content deployment retries the export option before the job finally ends with a Failure. &lt;/P&gt;
&lt;P&gt;To ensure that the deployment jobs does not run forever if a persistent problem occurs you should avoid configuring this to a number higher than 5. &lt;/P&gt;
&lt;P&gt;This setting defines the default value which applies to new jobs. It is possible to specify different values for individual jobs using additional settings. We will cover this later. &lt;/P&gt;
&lt;P&gt;Possible Values: 1-999. A small number (3-5) is recommended &lt;/P&gt;
&lt;P&gt;The following lines have to be added to the web.config to enable the retry options: &lt;/P&gt;
&lt;P style="BACKGROUND: #f2f2f2; MARGIN-LEFT: 21pt"&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 10pt"&gt;
&lt;DIV style="FONT-FAMILY: Courier New"&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;configuration&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;configSections&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;sectionGroup&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: red"&gt;name&lt;/SPAN&gt;="&lt;SPAN style="COLOR: blue"&gt;SharePoint&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;...&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;section&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: red"&gt;name&lt;/SPAN&gt;="&lt;SPAN style="COLOR: blue"&gt;ExportRetrySettings&lt;/SPAN&gt;"&amp;nbsp;&lt;SPAN style="COLOR: red"&gt;type&lt;/SPAN&gt;="&lt;SPAN style="COLOR: blue"&gt;Microsoft.SharePoint.Publishing.Administration.RetrySectionHandler,&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;Microsoft.SharePoint.Publishing,&amp;nbsp;Version=12.0.0.0,&amp;nbsp;Culture=neutral,&amp;nbsp;PublicKeyToken=71e9bce111e9429c&lt;/SPAN&gt;"&amp;nbsp;/&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;...&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;/&lt;SPAN style="COLOR: maroon"&gt;configSections&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;SharePoint&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;...&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;ExportRetrySettings&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: red"&gt;DefaultOption&lt;/SPAN&gt;="&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;option&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;"&amp;nbsp;DefaultRetries="&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;number-of-retries&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;Job&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: red"&gt;Name&lt;/SPAN&gt;="&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;Name-of-Deployment-Job1&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;"&amp;nbsp;Option="&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;option&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;"&amp;nbsp;Retries="&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;number-of-retries&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;"/&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;Job&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: red"&gt;Name&lt;/SPAN&gt;="&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;Name-of-Deployment-Job2&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;"&amp;nbsp;Option="&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;option&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;"&amp;nbsp;Retries="&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;number-of-retries&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;"/&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;...&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;/&lt;SPAN style="COLOR: maroon"&gt;ExportRetrySettings&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&lt;/DIV&gt;&lt;/SPAN&gt;
&lt;P&gt;&amp;lt;option&amp;gt; can be one of the following: None, SkipFailedWebs, SimpleRetry &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;number-of-retries&amp;gt; can be an integer between 1 and 999 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;If you don't add any &amp;lt;Job...&amp;gt; elements, then all new jobs will get the values configured as DefaultOption and DefaultRetries. Using the &amp;lt;Job...&amp;gt; element you can configure different jobs with different values. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;DefaultOption and DefaultRetries are also the entries that get added to the Content Deployment general settings which we discussed in an earlier section. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;After you have added the above listed configuration to the web.config of the Central Administration you have to open the content deployment job definition once in the central administration and save it again. During this save the configured options will be silently added to the content deployment job. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;In addition you need to open and save the content deployment general settings page to ensure that the default settings are updated as well. New jobs created after you changed the web.config will automatically get the configured values.&lt;/P&gt;
&lt;H2&gt;Potential problems related to Configuration&lt;/H2&gt;
&lt;H3&gt;Problems caused by not saving the content deployment general&amp;nbsp;settings&amp;nbsp;&lt;/H3&gt;
&lt;P&gt;As outlined earlier in this article the settings visible on the content deployment general settings page are not persisted in the database until explicitelly saved using the OK button.&lt;/P&gt;
&lt;P&gt;Problems will occur in situations where the settings haven't been saved (default settings used) and later an option is adjusted using object model. E.g. when the RemoteTimeout value is adjusted. &lt;/P&gt;
&lt;P&gt;In this situation the settings will be populated in context of the current machine and current user. That means that potentially the machine where the code is executed will become the export and import server of the farm. In addition the path for the temporary files will not be populated with c:\windows\temp but with c:\documents and settings\&amp;lt;username&amp;gt;\local settings\temp.&lt;/P&gt;
&lt;P&gt;Often the user adjusting the timeout value is not the same account as the farm account of the sharepoint farm. That means when content deployment later tries to create the temporary files it will try to create them at a location where the farmaccount does not have rights to and the deployment will fail.&lt;/P&gt;
&lt;H3&gt;Problems caused by insufficient permissions in the source site collection&lt;/H3&gt;
&lt;P&gt;If the user configuring the content deployment job does not have read permission in the source site collection he cannot configure the job for selective deployment. The reason is that the treeview which allows a user to select the sites that should be deployed is created by enumerating the site structure in the source database in context of the current user. If this user does not have rights to see these sites or some of these sites they will not be included in the tree view. In case that the user does not have any rights in the source site collection the dialog will show an access denied message.&lt;/P&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3290849" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/MOSS+2007+_2F00_+WSS+3.0/default.aspx">MOSS 2007 / WSS 3.0</category><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>Content Deployment – The complete Guide – Part 2 – The Basics continued</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-2-the-basics-continued.aspx</link><pubDate>Mon, 02 Nov 2009 08:43:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3290756</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3290756.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3290756</wfw:commentRss><description>&lt;DIV class=sgpost&gt;
&lt;DIV style="BORDER-BOTTOM: gray 1px solid; TEXT-ALIGN: left; BORDER-LEFT: gray 1px solid; PADDING-BOTTOM: 0px; PADDING-LEFT: 10px; WIDTH: 195px; PADDING-RIGHT: 10px; BACKGROUND: #fcfcfc; FLOAT: right; BORDER-TOP: gray 1px solid; BORDER-RIGHT: gray 1px solid; PADDING-TOP: 0px"&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/10/30/content-deployment-the-complete-guide-part-1-the-basics.aspx" mce_href="http://blogs.technet.com/stefan_gossner/archive/2009/10/30/content-deployment-the-complete-guide-part-1-the-basics.aspx"&gt;Part 1 - The Basics&lt;/A&gt;&lt;BR&gt;&lt;B&gt;Part 2 - The Basics continued&lt;/B&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-3-configuration.aspx"&gt;Part 3 - Configuration&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/03/content-deployment-the-complete-guide-part-4-communication.aspx"&gt;Part 4 - Communication&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/04/content-deployment-the-complete-guide-part-5-quick-deployment.aspx"&gt;Part 5 - Quick Deployment&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/06/content-deployment-the-complete-guide-part-6-logging.aspx"&gt;Part 6 - Logging&lt;/A&gt;&lt;BR&gt;Part 7 - coming soon...&lt;BR&gt;Part 8 - coming soon...&lt;BR&gt;Part 9 - coming soon...&lt;/P&gt;&lt;/DIV&gt;
&lt;H2&gt;Content Deployment Phases &lt;/H2&gt;
&lt;P&gt;The content deployment process is divided into several different phases which are partly performed on the source and partly on the target server. &lt;/P&gt;
&lt;H3&gt;Preparing &lt;/H3&gt;
&lt;P&gt;This phase is unique to jobs that are started through the Central Admin UI. In this phase, the code in the UI of the exporting server creates the one time timer job that will perform the export. &lt;/P&gt;
&lt;H3&gt;Exporting &lt;/H3&gt;
&lt;P&gt;This phase is performed on the exporting server of the source farm. It uses the WSS content deployment and migration API to export the relevant content for the specific content deployment job. The content will be exported into a flat file structure in a temporary directory on the exporting server. &lt;/P&gt;
&lt;H3&gt;Compressing &lt;/H3&gt;
&lt;P&gt;This phase is performed on the exporting server of the source farm. It is done internally in the WSS content deployment and migration API and compresses the exported files into one or multiple cabinet files (cab files). These files will be stored again in a temporary folder on the exporting server. &lt;/P&gt;
&lt;H3&gt;Transferring &lt;/H3&gt;
&lt;P&gt;This phase is performed by the exporting server on the source farm. It uses functionality provided by the content deployment feature coming with MOSS 2007. This phase transfers the cabinet files using http upload to the importing server on the target farm where it ends up in a temporary folder. &lt;/P&gt;
&lt;H3&gt;Decompressing &lt;/H3&gt;
&lt;P&gt;This phase is performed by the importing server on the target farm. It is done internally in the WSS content deployment and migration API and decompresses the cabinet files into a temporary folder on the importing server. &lt;/P&gt;
&lt;H3&gt;Importing &lt;/H3&gt;
&lt;P&gt;This phase is performed by the importing server on the target farm. The import is performed using the WSS content deployment and migration API which reads the content from the temporary directory where the decompressed files are located and generates the content in the target site collection. &lt;/P&gt;
&lt;H2&gt;Content Deployment Path and Job &lt;/H2&gt;
&lt;P&gt;Content Deployment is built on two underlying conceptual objects: content deployment path and job. &lt;/P&gt;
&lt;H3&gt;Content Deployment Path &lt;/H3&gt;
&lt;P&gt;Content Deployment allows the deployment of content from exactly one site collection on the source farm to exactly one site collection on the target farm. &lt;/P&gt;
&lt;P&gt;The link between the source and target site collection is called a content deployment path. You can have multiple content deployment paths in your farm as long as you don't have multiple paths that reference the same source and target site collection. &lt;/P&gt;
&lt;P&gt;A content deployment path is always defined on the source farm. &lt;/P&gt;
&lt;P&gt;It is possible to have two content deployment paths linking one site collection on the source farm with two different site collections on the target farm. &lt;/P&gt;
&lt;P&gt;It should be noted that the source and target site collection can reside in the same farm. So a path can point from one site collection to a second site collection in the same farm as long as the two site collections reside in different databases. &lt;/P&gt;
&lt;DIV&gt;
&lt;TABLE style="BORDER-COLLAPSE: collapse" border=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="WIDTH: 106px"&gt;
&lt;COL style="WIDTH: 516px"&gt;&lt;/COLGROUP&gt;
&lt;TBODY vAlign=top&gt;
&lt;TR&gt;
&lt;TD style="PADDING-RIGHT: 6px; BORDER-RIGHT: medium none"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;STRONG&gt;Important:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 10px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #e9eff7; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 8px"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;You cannot have source and target site collection in the same database. Performing a deployment along such a path would cause exceptions during import as it would cause items with the same ID to exist twice in the same database which is not supported by SharePoint. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;For the same reason you also cannot have multiple target site collections which receive content from the same source site collection in the same database.&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;H3&gt;Content Deployment Job &lt;/H3&gt;
&lt;P&gt;It is possible to create one or more content deployment jobs for a single content deployment path. Each job can be of a different type (full, incremental or quick deployment) and can be configured with a different schedule. &lt;/P&gt;
&lt;P&gt;For all jobs except quick deploy jobs it is possible to configure different content deployment jobs for the same path to deploy different parts of the source site collection. This is done by selecting specific sites that should be deployed with this specific job. Using this method it would be possible to deploy one part of the site daily and a second part which contains more frequently updated information hourly. &lt;/P&gt;
&lt;P&gt;Quick Deploy jobs cannot be created manually. They will be created automatically when saving the content deployment path if the source site collection has the publishing feature enabled. There can only be one Quick Deploy job per path. &lt;/P&gt;
&lt;P&gt;The content deployment job is always defined on the source farm. During the deployment to the target farm a "shadow" content deployment job will be created on the target farm to perform the import operation. This job will automatically be deleted after the import has been completed. &lt;/P&gt;
&lt;P&gt;Also be aware that this "shadow" job will not show up in the content deployment paths and jobs page in the target farm as this job will not be bound to a content deployment path.&lt;/P&gt;&lt;/DIV&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3290756" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/MOSS+2007+_2F00_+WSS+3.0/default.aspx">MOSS 2007 / WSS 3.0</category><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>Content Deployment – The complete Guide – Part 1 – The Basics</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/10/30/content-deployment-the-complete-guide-part-1-the-basics.aspx</link><pubDate>Fri, 30 Oct 2009 09:42:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3290319</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3290319.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3290319</wfw:commentRss><description>&lt;DIV class=sgpost&gt;
&lt;DIV style="BORDER-BOTTOM: gray 1px solid; TEXT-ALIGN: left; BORDER-LEFT: gray 1px solid; PADDING-BOTTOM: 0px; PADDING-LEFT: 10px; WIDTH: 195px; PADDING-RIGHT: 10px; BACKGROUND: #fcfcfc; FLOAT: right; BORDER-TOP: gray 1px solid; BORDER-RIGHT: gray 1px solid; PADDING-TOP: 0px"&gt;
&lt;P&gt;&lt;B&gt;Part 1 - The Basics&lt;/B&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-2-the-basics-continued.aspx" mce_href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-2-the-basics-continued.aspx"&gt;Part 2 - The Basics continued&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/02/content-deployment-the-complete-guide-part-3-configuration.aspx"&gt;Part 3 - Configuration&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/03/content-deployment-the-complete-guide-part-4-communication.aspx"&gt;Part 4 - Communication&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/04/content-deployment-the-complete-guide-part-5-quick-deployment.aspx"&gt;Part 5 - Quick Deployment&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/11/06/content-deployment-the-complete-guide-part-6-logging.aspx"&gt;Part 6 - Logging&lt;/A&gt;&lt;BR&gt;Part 7 - coming soon...&lt;BR&gt;Part 8 - coming soon...&lt;BR&gt;Part 9 - coming soon...&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;A while ago I created a deep dive article series covering the WSS content deployment and migration API which helped many people to develop their own applications to do export and import in a customized manner. &lt;/P&gt;
&lt;P&gt;Today I will start a new article series which will discuss all aspects of Content Deployment – with other words the MOSS feature sitting on top of the WSS API. &lt;/P&gt;
&lt;P&gt;Most customers see this feature as a monolithic implementation which does not allow any customization – but that is not the case as you will see in future chapters of this article series &lt;/P&gt;
&lt;P&gt;But before we can start with the internals we first have to start with the basics. &lt;/P&gt;
&lt;H2&gt;Content Deployment – The Idea Behind &lt;/H2&gt;
&lt;P&gt;MOSS 2007 contains Content Deployment as a new feature which has been added to fulfill the requirements of companies which plan to use SharePoint as a Web server to host public facing Web sites. &lt;/P&gt;
&lt;P&gt;The main purpose is to allow authors and reviewers to modify and evaluate on a different farm before the content is finally pushed to the public facing server farm – but also to have a single authoring environment and then push the content to multiple different farms of different departments - potentially on different continents. &lt;/P&gt;
&lt;P&gt;A similar concept (site deployment) was already available in Microsoft Content Management Server 2002 but required additional programming for automated deployments. With MOSS 2007 this can now be automated and customized easily through a build in UI. &lt;/P&gt;
&lt;H2&gt;Content Deployment – The Feature &lt;/H2&gt;
&lt;P&gt;The Content Deployment section shown on the Operations tab of the Central Administration Website is provided by the "Content Deployment" feature which is shipped with MOSS 2007. &lt;/P&gt;
&lt;P&gt;You can find this feature in the following directory: …\12\template\features\DeploymentLinks&lt;/P&gt;
&lt;P&gt;This feature is activated on the Root Web of the Central Admin site collection. Be aware that this is a hidden feature so you cannot see it in the site feature list in the UI. &lt;/P&gt;
&lt;P&gt;Deactivating this feature will remove the Content Deployment section from the central admin Web site and also disable the underlying functionality of Content Deployment as several methods verify internally if this feature has been enabled on the central admin Web site or not. &lt;/P&gt;
&lt;P&gt;You can easily try this on your own using the following command: &lt;/P&gt;
&lt;P&gt;&lt;TT&gt;STSADM -o deactivatefeature -url http://central-admin-url -name DeploymentLinks&lt;/TT&gt;&lt;/P&gt;
&lt;P&gt;After executing this command you will see that the content deployment section is gone from the operations tab. To reenable the functionality use this command: &lt;/P&gt;
&lt;P&gt;&lt;TT&gt;STSADM -o activatefeature -url http://central-admin-url -name DeploymentLinks&lt;/TT&gt;&lt;/P&gt;
&lt;H2&gt;Content Deployment – The different flavors &lt;/H2&gt;
&lt;P&gt;Content Deployment as it is available in MOSS 2007 comes in three different flavors: full deployment, incremental deployment and quick deployment. Here is a short overview about the three different flavors: &lt;/P&gt;
&lt;H3&gt;Full Deployment &lt;/H3&gt;
&lt;P&gt;Full Deployment allows all the content of a site to be deployed to the target site collection independent of when the content was created. This is usually done when deploying a site collection to the target farm for the very first time. &lt;/P&gt;
&lt;H4&gt;Limitations &lt;/H4&gt;
&lt;P&gt;Full deployment will only deploy the current state of the site. It will not deploy information about historical actions performed on the site (for example, if an item has been moved or has been deleted). &lt;/P&gt;
&lt;H4&gt;Benefits &lt;/H4&gt;
&lt;P&gt;Full deployment does not rely on information about what has been previously deployed to the target. It will always export the current state of the source site collection. &lt;/P&gt;
&lt;H4&gt;Caveats &lt;/H4&gt;
&lt;P&gt;Full deployment into a database that has already received content through a content deployment job can cause inconsistencies between the source and the target farm as information about historical actions is not deployed. For example, if a list item is deleted on the source farm between the two content deployment runs you will notice that the item will not get deleted on the target farm. &lt;/P&gt;
&lt;H3&gt;Incremental Deployment &lt;/H3&gt;
&lt;P&gt;Incremental Deployment deploys all content that has changed since the last successful run of a content deployment job. Only modified content will be deployed to the target farm. Incremental deployment also transports the information about historical actions such as move, delete and rename to the target farm. &lt;/P&gt;
&lt;H4&gt;Limitations &lt;/H4&gt;
&lt;P&gt;The complexity of an incremental deployment is higher than the complexity of a full deployment job. This is due to the additional logic included to deploy only the modified content and items directly linked to the modified content. This increases the chance for problems which can cause incremental content deployment to fail. A second limitation is that an incremental deployment will only look at the source system to determine the data that has to be deployed. It will not analyze source and target and based on the difference decide which content to deploy. &lt;/P&gt;
&lt;H4&gt;Benefits &lt;/H4&gt;
&lt;P&gt;Due to the fact that only modified content is deployed, the time for an incremental deployment is usually much shorter than the initial full deployment. In addition, the feature to deploy information about historical actions allows the target system and the source system to keep in sync beyond what is possible with full deployment. &lt;/P&gt;
&lt;H4&gt;Caveats &lt;/H4&gt;
&lt;P&gt;If an incremental deployment job fails repeatedly it might be required to perform a new full deployment to the target to re-sync the content on the source farm with the target farm. Since a full deployment does not transport information about historical actions, this will only work reliably if this full deployment is performed into an empty database. &lt;/P&gt;
&lt;H3&gt;Quick Deployment &lt;/H3&gt;
&lt;P&gt;Quick Deployment allows authors to pick specific pages for content deployment. This is vital for companies which need to quickly update specific pages on their site which need to be independently updated from other content that would be deployed with an incremental deployment. &lt;/P&gt;
&lt;H4&gt;Limitations &lt;/H4&gt;
&lt;P&gt;Quick deployment will deploy only the selected publishing pages and resources bound to these pages. In addition, it is not possible to select items in a regular document library or list for quick deployment. &lt;/P&gt;
&lt;H4&gt;Benefits &lt;/H4&gt;
&lt;P&gt;Quick Deployment enables authors to register specific items for quick deploy which will be deployed to the target farm independent from any other changes that have been done on the source farm since the last full or incremental deployment. &lt;/P&gt;
&lt;H4&gt;Caveats &lt;/H4&gt;
&lt;P&gt;Quick deployment only deploys publishing pages and resources bound to the selected pages. Sites and lists are not deployed through quick deployment. Due to this, all target folders and libraries for all selected an dependent items must already exist on the target farm – otherwise quick deployment will fail. For example, consider the scenario where a new picture library has been created and a picture from this picture library has been bound to a field in a publishing page that needs to be quick deployed. Quick deployment will fail if the picture library has not been previously deployed to the target site collection. &lt;/P&gt;
&lt;H2&gt;Myths and Facts about Full, Incremental and Quick Deployment &lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Myth: &lt;/STRONG&gt;I need at least one full and one incremental deployment job per path as I have to run at least on full deployment at the beginning before I can run an incremental deployment &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Fact: &lt;/STRONG&gt;The above statement is not correct. The very first incremental deployment will always be a full deployment. So there should be no need to create a full deployment job. &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Myth:&lt;/STRONG&gt; Full deployment is more than incremental deployment &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Fact:&lt;/STRONG&gt; The above statement is not correct. Full deployment only deploys the current state of the site while incremental deployment deploys all changes done to the site since the last deployment. That also includes delete and move operations. An extreme example would be a site collection that contained 100.000 items when it was last deployed. After deleting 90.000 items full deployment would only deploy the 10.000 remaining items and would not deploy the delete operations. So after a full deployment the number of items in the target database would not have changed (assuming that no other operations have been done to the source database as the delete operation). On the other hand an incremental deployment will only deploy the 90.000 deleted items to ensure that these items will also be deleted on the target. With other words: after the full deployment the source and target database will be out of sync while incremental deployment will keep these databases in sync. &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Myth:&lt;/STRONG&gt; It is best practice to run incremental deployments during the week and a full deployment during weekend to ensure that my content database is in sync &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Fact:&lt;/STRONG&gt; The above statement is not correct. Every single full deployment has the risk that the target site collection runs out of sync with the source as delete and move operations will not be applied the target which also has the risk of breaking future the content deployment jobs which will fail due to the inconsistencies between source and target. &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Myth:&lt;/STRONG&gt; If incremental deployment fails I can do a full deployment to fix the problem &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Fact:&lt;/STRONG&gt; This statement is not correct. Indeed: full deployment often succeeds when incremental deployment failed and indeed future incremental deployments will often work again afterwards but this is caused by the fact that after the full deployment the next incremental will deploy only content changed after the full deployment. The problem is that in this situation you will usually not really resolve the underlying issue. You are just avoiding it by adding all other content that exists in the source site collection to the package so that inconsistencies in the source database which led to the failing incremental deployment will no longer show up. But often the same problem occurs again a couple of days later when incremental deployment again has to deploy the problematic items. And through the full deployment you made things worse as you now have potentially additional inconsistencies between source and target due to the fact that delete and move operations that would have been deployed with the failing incremental deployment will never be deployed again. So now you added additional inconsistencies to the one that caused the earlier failure which can cause additional problems with future content deployments (as well incremental and full). &lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Myth:&lt;/STRONG&gt; Quick deploy is an easy way to ensure that important content can go live easily out of sync with other content. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Fact:&lt;/STRONG&gt; The above statement is not fully correct. The quick deployment has to be used very carefully. For every single quick deployed item – and also for all dependent items like referenced images and documents – it has to be guaranteed that the site, the folder the list or library the item is in has been deployed to the target earlier with an incremental deployment. If this is not the case the quick deploy job and all future quick deploy job runs will fail till the next incremental deployment has been performed. That means a single user that quick deploys a page that references a document in a doc lib which has not been previously deployed to the target system can cause a problem that affects the ability of all other users to perform a quick deployment. The main problem is here that quick deployment is done by authors – while incremental deployment is controlled by farm administrators. So it is usually unclear to the authors when the last successful incremental deployment has been done and which sites and lists have been deployed. &lt;/P&gt;&lt;/DIV&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3290319" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/MOSS+2007+_2F00_+WSS+3.0/default.aspx">MOSS 2007 / WSS 3.0</category><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>x64 version of Debug Diag 1.1 troubleshooting tool has been released to web yesterday</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/10/29/x64-version-of-debug-diag-1-1-troubleshooting-tool-has-been-released-to-web-yesterday.aspx</link><pubDate>Thu, 29 Oct 2009 08:19:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3289972</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3289972.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3289972</wfw:commentRss><description>&lt;P&gt;After a long beta period the 64-bit version of Debug Diag 1.1 was made available for public download from Microsoft download center.&lt;/P&gt;
&lt;P&gt;The Debug Diagnostic Tool (DebugDiag) is designed to assist in troubleshooting issues such as hangs, slow performance, memory leaks or fragmentation, and crashes in any user-mode process. The tool includes additional debugging scripts focused on Internet Information Services (IIS) applications, web data access components, COM+ and related Microsoft technologies.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&amp;amp;displaylang=en"&gt;Debug Diagnostic Tool v1.1&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=4A2FBD0D-0635-440C-A08B-ED81BDBB5960&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=4A2FBD0D-0635-440C-A08B-ED81BDBB5960&amp;amp;displaylang=en"&gt;whitepaper&lt;/A&gt; about the tool has been updated as well.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3289972" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/Links/default.aspx">Links</category><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/Debugging/default.aspx">Debugging</category></item><item><title>October 2009 CU for WSS and MOSS has been released yesterday</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/10/29/october-2009-cu-for-wss-and-moss-has-been-released-yesterday.aspx</link><pubDate>Thu, 29 Oct 2009 08:11:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3289970</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3289970.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3289970</wfw:commentRss><description>&lt;P&gt;The October cumulative update for WSS 3.0 and MOSS 2007 has been released yesterday here are the KB article links for these fixes:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;974989" mce_href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;974989"&gt;KB 974989&lt;/A&gt; - WSS 3.0 October 2009 CU&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;974988" mce_href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;974988"&gt;KB 974988&lt;/A&gt; - MOSS 2007 October 2009 CU&amp;nbsp;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The fixes can be downloaded using the following links:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=974989&amp;amp;kbln=en-us" mce_href="http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=974989&amp;amp;kbln=en-us"&gt;Download WSS 3.0 October 2009 CU (full server package)&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=974988&amp;amp;kbln=en-us" mce_href="http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=974988&amp;amp;kbln=en-us"&gt;Download MOSS 2007 October 2009 CU (full server package)&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3289970" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/MOSS+2007+_2F00_+WSS+3.0/default.aspx">MOSS 2007 / WSS 3.0</category><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/Hotfix+Info/default.aspx">Hotfix Info</category></item><item><title>Modifying SharePoint RSS Feeds using a custom control adapter - Implementing Delta Encoding</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/09/29/modifying-sharepoint-rss-feeds-using-a-custom-control-adapter-implementing-delta-encoding.aspx</link><pubDate>Tue, 29 Sep 2009 16:25:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3283804</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3283804.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3283804</wfw:commentRss><description>&lt;P&gt;We&amp;nbsp;frequently get questions from customers if it is possible to modify the data sent in the RSS feed to the client. SharePoint itself&amp;nbsp;allows to specify the columns which can be included in the Description field, the number of items to return as a maximum and the maximum days to include in the RSS feed.&lt;/P&gt;
&lt;P&gt;A&amp;nbsp;feature&amp;nbsp;which is not supported by SharePoint is &lt;A href="http://www.ietf.org/rfc/rfc3229.txt" mce_href="http://www.ietf.org/rfc/rfc3229.txt"&gt;&lt;STRONG&gt;Delta Encoding&lt;/STRONG&gt;&lt;/A&gt; for the feeds. &lt;/P&gt;
&lt;P&gt;In short words: Delta Encoding would allow to reduce the amount of data sent in an RSS feed to the client to the exact information required by the client to get him up-to-date to the current point in time. That means that items that have been sent to the client earlier would not be sent a second time.&lt;/P&gt;
&lt;P&gt;Delta Encoding requires that the client sends an &lt;STRONG&gt;If-Modified-Since&lt;/STRONG&gt; http header to the server which allows the server to determine at which time this specific client received the last update.&lt;/P&gt;
&lt;P&gt;SharePoint actually implements a check of If-Modified-Since and returns a 304 - not modified in case that the content of RSS feed has not changed. But in case that the content has changed it will return the whole RSS feed.&lt;/P&gt;
&lt;P&gt;This implementation is correct as otherwise scenarios with caching proxy servers would fail as content for the exactly same URL would be different based on the If-Modified-Since header sent.&lt;/P&gt;
&lt;P&gt;E.g. like this:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;User&amp;nbsp;1 requests the RSS feed and receives content with items A, B and C which is then also cached by the proxy&lt;/LI&gt;
&lt;LI&gt;Item D is added&lt;/LI&gt;
&lt;LI&gt;Later User&amp;nbsp;1 requests the RSS feed after the cache is expired and the cached content is replaced with content D as this would be the delta for this user&lt;/LI&gt;
&lt;LI&gt;Now User&amp;nbsp;2 requests the RSS feed and retrieves content D from the cache and never receives A, B and C&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;So Delta Encoding is only of useful in case that no caching proxy servers are between the clients and the SharePoint server.&lt;/P&gt;
&lt;P&gt;Still some customers have requested this feature and I will now explain how this can be implemented using an &lt;STRONG&gt;ASP.NET ControlAdapter&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Control Adapters allow to modify the behavior of existing controls without subclassing by adding a simple configuration file to the App_Browser directory. To modify the behavior of the SharePoint RSS feeds it will be required to implement a custom PageAdapter which allows to consume the XML response generated by the RSS feed and filter it against the &lt;STRONG&gt;If-Modified-Since&lt;/STRONG&gt; header.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Usually a control adapter that needs to modify the content rendered by a control would create a custom HtmlTextWriter pass this to the Render method of the control, consume the content generated by the control and modify it before sending it to the original HtmlTextWriter which will then send the content to the client:&lt;/P&gt;&lt;TT&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="COLOR: blue"&gt;protected&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Render(System.Web.UI.HtmlTextWriter&amp;nbsp;output)&amp;nbsp; &lt;BR&gt;{&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;catch&amp;nbsp;the&amp;nbsp;output&amp;nbsp;of&amp;nbsp;the&amp;nbsp;original&amp;nbsp;Control&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TextWriter&amp;nbsp;tempWriter&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;StringWriter(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;base&lt;/SPAN&gt;.Render(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;System.Web.UI.HtmlTextWriter(tempWriter));&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;nbsp;origHtml&amp;nbsp;=&amp;nbsp;tempWriter.ToString();&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;adjust&amp;nbsp;the&amp;nbsp;content&amp;nbsp;as&amp;nbsp;required&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;nbsp;newHtml&amp;nbsp;=&amp;nbsp;origHtml.Replace(...);&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;send&amp;nbsp;the&amp;nbsp;adjusted&amp;nbsp;output&amp;nbsp;to&amp;nbsp;the&amp;nbsp;client&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;output.Write(newhtml);&amp;nbsp; &lt;BR&gt;}&lt;/P&gt;&lt;/TT&gt;
&lt;P&gt;Unfortunatelly this method does not work with the SharePoint RSS feeds as the RSS code does not use the passed in HtmlTextWriter to send the RSS response but uses &lt;STRONG&gt;Response.Write&lt;/STRONG&gt; to send the content. This method bypasses the HtmlTextWriter.&lt;/P&gt;
&lt;P&gt;So a different method is required to consume and modify the RSS response. ASP.NET allows to do this using a custom &lt;STRONG&gt;stream&lt;/STRONG&gt; &lt;STRONG&gt;filter&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;In .NET a stream&amp;nbsp;filter is actually nothing but a Stream object which chains itself between the filtered stream and the receiver.&lt;/P&gt;
&lt;P mce_keep="true"&gt;After the custom stream filter has been configured as stream for the http response object it will receive all content sent from the control and can modify it in any way it likes. We will use this method to implement Delta Encoding for the RSS feed.&lt;/P&gt;
&lt;P mce_keep="true"&gt;The Stream filter has to implement all the method of a standard Stream object. Here is the basic stream filter without the custom logic to modify the content:&lt;/P&gt;&lt;TT&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt;&amp;nbsp;RSS_Filter&amp;nbsp;:&amp;nbsp;Stream &lt;BR&gt;{&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt;&amp;nbsp;Encoding&amp;nbsp;enc&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt;&amp;nbsp;closed; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stream&amp;nbsp;BaseStream;&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;RSS_Filter(Stream&amp;nbsp;baseStream,&amp;nbsp;Encoding&amp;nbsp;encoding) &lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;here&amp;nbsp;we&amp;nbsp;keep&amp;nbsp;track&amp;nbsp;of&amp;nbsp;the&amp;nbsp;underlaying&amp;nbsp;base&amp;nbsp;stream&amp;nbsp;and&amp;nbsp;the&amp;nbsp;encoding.&lt;/SPAN&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;&amp;nbsp;BaseStream&amp;nbsp;=&amp;nbsp;baseStream; &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;enc&amp;nbsp;=&amp;nbsp;encoding; &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;// stream is not closed when we create it.&lt;/SPAN&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;&amp;nbsp;closed&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;false&lt;/SPAN&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Write(&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[]&amp;nbsp;buffer,&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;offset,&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;count) &lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;ensure&amp;nbsp;that&amp;nbsp;the&amp;nbsp;stream&amp;nbsp;has&amp;nbsp;not&amp;nbsp;been&amp;nbsp;closed&amp;nbsp;before&lt;/SPAN&gt;&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;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(Closed)&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;ObjectDisposedException(&lt;SPAN style="COLOR: maroon"&gt;"RSS-Stream-Filter"&lt;/SPAN&gt;); &lt;BR&gt;&lt;BR&gt;&lt;STRONG&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;-- our&amp;nbsp;logic&amp;nbsp;to&amp;nbsp;consume&amp;nbsp;the&amp;nbsp;written&amp;nbsp;data needs to be added here --&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt;&amp;nbsp;CanRead &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;&amp;nbsp;{&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;false&lt;/SPAN&gt;;&amp;nbsp;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt;&amp;nbsp;CanWrite &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;&amp;nbsp;{&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&amp;nbsp;!closed;&amp;nbsp;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt;&amp;nbsp;CanSeek &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;&amp;nbsp;{&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;false&lt;/SPAN&gt;;&amp;nbsp;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Close() &lt;BR&gt;&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;closed&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;true&lt;/SPAN&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;&amp;nbsp;BaseStream.Close(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;protected&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt;&amp;nbsp;Closed &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;&amp;nbsp;{&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&amp;nbsp;closed;&amp;nbsp;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Flush() &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;BR&gt;&lt;STRONG&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;-- our&amp;nbsp;logic&amp;nbsp;to&amp;nbsp;modify&amp;nbsp;the&amp;nbsp;written&amp;nbsp;data&amp;nbsp;before&amp;nbsp;sending&amp;nbsp;it&amp;nbsp;on&amp;nbsp;the&amp;nbsp;wire&amp;nbsp;needs to be added here&lt;/SPAN&gt;&amp;nbsp;--&lt;BR&gt;&lt;/STRONG&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;&amp;nbsp;BaseStream.Flush(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;Read(&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[]&amp;nbsp;buffer,&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;offset,&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;count) &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;NotSupportedException(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;long&lt;/SPAN&gt;&amp;nbsp;Length &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;&amp;nbsp;{&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;NotSupportedException();&amp;nbsp;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;long&lt;/SPAN&gt;&amp;nbsp;Seek(&lt;SPAN style="COLOR: blue"&gt;long&lt;/SPAN&gt;&amp;nbsp;offset,&amp;nbsp;SeekOrigin&amp;nbsp;origin) &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;NotSupportedException(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;SetLength(&lt;SPAN style="COLOR: blue"&gt;long&lt;/SPAN&gt;&amp;nbsp;value) &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;NotSupportedException(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;long&lt;/SPAN&gt;&amp;nbsp;Position &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;&amp;nbsp;{&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;NotSupportedException();&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;&lt;SPAN style="COLOR: blue"&gt;set&lt;/SPAN&gt;&amp;nbsp;{&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;NotSupportedException();&amp;nbsp;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;}&lt;/P&gt;&lt;/TT&gt;
&lt;P mce_keep="true"&gt;As you can see in the above code there are two methods where we have to add custom logic: in the Write method and in the Flush method. This is required as the RSS response can be larger than a single write buffer. So it is not guaranteed that the whole RSS response is in the first buffer we get. As the write method receives a byte buffer it is also not guaranteed that UTF-8 characters (which can be larger than a single byte) do not spread between two buffers.&lt;/P&gt;
&lt;P mce_keep="true"&gt;So in order to allow us to correctly process the RSS feed we have to buffer all the received buffers in the Write method till the Flush method is called which indicates the end of the stream.&lt;/P&gt;
&lt;P mce_keep="true"&gt;In the Flush method we can then add the logic to post-process the RSS content.&lt;/P&gt;
&lt;P mce_keep="true"&gt;The following code fragment demonstrates how the buffers are consumed:&lt;/P&gt;&lt;TT&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Queue&amp;nbsp;byteQueue&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;Queue(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;responseLength=&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Write(&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[]&amp;nbsp;buffer,&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;offset,&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;count) &lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;ensure&amp;nbsp;that&amp;nbsp;the&amp;nbsp;stream&amp;nbsp;has&amp;nbsp;not&amp;nbsp;been&amp;nbsp;closed&amp;nbsp;before&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(Closed)&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;ObjectDisposedException(&lt;SPAN style="COLOR: maroon"&gt;"RSS-Stream-Filter"&lt;/SPAN&gt;); &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;handle&amp;nbsp;the&amp;nbsp;special&amp;nbsp;case&amp;nbsp;that&amp;nbsp;only&amp;nbsp;part&amp;nbsp;of&amp;nbsp;the&amp;nbsp;given&amp;nbsp;buffer&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;should&amp;nbsp;be&amp;nbsp;sent&amp;nbsp;to&amp;nbsp;the&amp;nbsp;wire.&amp;nbsp;We&amp;nbsp;will&amp;nbsp;then&amp;nbsp;copy&amp;nbsp;the&amp;nbsp;required&amp;nbsp;part&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;to&amp;nbsp;a&amp;nbsp;second&amp;nbsp;buffer&amp;nbsp;and&amp;nbsp;buffer&amp;nbsp;this&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(offset&amp;nbsp;&amp;gt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&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;&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[]&amp;nbsp;newBuf&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[count]; &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;&lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt;&amp;nbsp;(&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;count;&amp;nbsp;i++) &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;{ &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;newBuf[i]&amp;nbsp;=&amp;nbsp;buffer[i + offset]; &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;} &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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;we&amp;nbsp;store&amp;nbsp;the&amp;nbsp;buffer&amp;nbsp;in&amp;nbsp;a&amp;nbsp;queue&amp;nbsp;which&amp;nbsp;ensures&amp;nbsp;that&amp;nbsp;we&amp;nbsp;can&amp;nbsp;easily&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;process&amp;nbsp;the&amp;nbsp;content&amp;nbsp;in&amp;nbsp;the&amp;nbsp;same&amp;nbsp;sequence&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;byteQueue.Enqueue(newBuf); &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;} &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;&lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&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;&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;we&amp;nbsp;store&amp;nbsp;the&amp;nbsp;buffer&amp;nbsp;in&amp;nbsp;a&amp;nbsp;queue&amp;nbsp;which&amp;nbsp;ensures&amp;nbsp;that&amp;nbsp;we&amp;nbsp;can&amp;nbsp;easily&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;process&amp;nbsp;the&amp;nbsp;content&amp;nbsp;in&amp;nbsp;the&amp;nbsp;same&amp;nbsp;sequence&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;byteQueue.Enqueue(buffer); &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;} &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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;current&amp;nbsp;buffered&amp;nbsp;response&lt;/SPAN&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;&amp;nbsp;responseLength&amp;nbsp;+=&amp;nbsp;count;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;/P&gt;&lt;/TT&gt;
&lt;P mce_keep="true"&gt;In the Flush method we now add the logic that handles the delta encoding. To allow easy modification of the RSS feed we first have to convert the consumed byte buffer into a object which we can then easily filter using Xml methods. After the modification is done we have to convert the generated XML back into a byte buffer to allow us to send it to the client. To ensure that even if an exception occurs the original content is sent to the client we will add the relevant logic in a try/finally block:&lt;/P&gt;&lt;TT&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Flush() &lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;retrieve&amp;nbsp;the&amp;nbsp;reference&amp;nbsp;time&amp;nbsp;from&amp;nbsp;the&amp;nbsp;If-Modified-Since&amp;nbsp;header&lt;/SPAN&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;&amp;nbsp;DateTime&amp;nbsp;ifModSince&amp;nbsp;=&amp;nbsp;Convert.ToDateTime(HttpContext.Current.Request.Headers[&lt;SPAN style="COLOR: maroon"&gt;"If-Modified-Since"&lt;/SPAN&gt;]);&lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;here&amp;nbsp;we&amp;nbsp;copy&amp;nbsp;the&amp;nbsp;different&amp;nbsp;buffers&amp;nbsp;into&amp;nbsp;one&amp;nbsp;large&amp;nbsp;buffer&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;we&amp;nbsp;need&amp;nbsp;this&amp;nbsp;in&amp;nbsp;a&amp;nbsp;single&amp;nbsp;buffer&amp;nbsp;for&amp;nbsp;the&amp;nbsp;conversion&amp;nbsp;to&amp;nbsp;string&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[]&amp;nbsp;fullBuffer&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[responseLength]; &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;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;index&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;while&lt;/SPAN&gt;&amp;nbsp;(byteQueue.Count&amp;nbsp;&amp;gt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&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;&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[]&amp;nbsp;buf&amp;nbsp;=&amp;nbsp;byteQueue.Dequeue()&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.CopyTo(fullBuffer,&amp;nbsp;index); &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;index&amp;nbsp;+=&amp;nbsp;buf.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;} &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;now&amp;nbsp;we&amp;nbsp;convert&amp;nbsp;the&amp;nbsp;byte&amp;nbsp;buffer&amp;nbsp;into&amp;nbsp;a&amp;nbsp;string&amp;nbsp;object&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;nbsp;content&amp;nbsp;=&amp;nbsp;enc.GetString(fullBuffer,&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;,&amp;nbsp;responseLength); &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;before&amp;nbsp;we&amp;nbsp;convert&amp;nbsp;the&amp;nbsp;content&amp;nbsp;we&amp;nbsp;have&amp;nbsp;to&amp;nbsp;remove&amp;nbsp;all&amp;nbsp;characters&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;which&amp;nbsp;are&amp;nbsp;not&amp;nbsp;part&amp;nbsp;of&amp;nbsp;the&amp;nbsp;Xml&amp;nbsp;content&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;nbsp;nonXml&amp;nbsp;=&amp;nbsp;content.Substring(&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;,&amp;nbsp;content.IndexOf(&lt;SPAN style="COLOR: maroon"&gt;"&amp;lt;"&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(nonXml.Length&amp;nbsp;&amp;gt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;content&amp;nbsp;=&amp;nbsp;content.Substring(nonXml.Length);&amp;nbsp;&lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;try&lt;/SPAN&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;&amp;nbsp;{ &lt;BR&gt;&lt;STRONG&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;-- here we add our code to manipulate the XML --&lt;/SPAN&gt;&lt;BR&gt;&lt;/STRONG&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;} &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;&lt;SPAN style="COLOR: blue"&gt;catch&lt;/SPAN&gt;&amp;nbsp;(Exception&amp;nbsp;e) &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;{ &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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;our&amp;nbsp;code&amp;nbsp;raised&amp;nbsp;an&amp;nbsp;exception&amp;nbsp;-&amp;nbsp;there&amp;nbsp;is&amp;nbsp;not&amp;nbsp;much&amp;nbsp;we&amp;nbsp;can&amp;nbsp;do&amp;nbsp;about&amp;nbsp;it&lt;/SPAN&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;&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;&lt;SPAN style="COLOR: blue"&gt;finally&lt;/SPAN&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;&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;ensure&amp;nbsp;to&amp;nbsp;write&amp;nbsp;the&amp;nbsp;data&amp;nbsp;we&amp;nbsp;have&amp;nbsp;to&amp;nbsp;the&amp;nbsp;wire&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[]&amp;nbsp;newBuffer&amp;nbsp;=&amp;nbsp;enc.GetBytes(nonXml + content); &lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;responseLength&amp;nbsp;=&amp;nbsp;newBuffer.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;BaseStream.Write(newBuffer,&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;,&amp;nbsp;responseLength); &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;} &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;now&amp;nbsp;we&amp;nbsp;flush&amp;nbsp;the&amp;nbsp;base&amp;nbsp;stream&lt;/SPAN&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;&amp;nbsp;BaseStream.Flush(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;&lt;/TT&gt;
&lt;P mce_keep="true"&gt;The next step is to implement the logic that allows us to filter the&amp;nbsp;RSS feed using Xml methods:&lt;/P&gt;&lt;TT&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;now&amp;nbsp;we&amp;nbsp;create&amp;nbsp;a&amp;nbsp;new&amp;nbsp;XmlDocument&amp;nbsp;and&amp;nbsp;pass&amp;nbsp;in&amp;nbsp;the&amp;nbsp;rss&amp;nbsp;content&amp;nbsp;as&amp;nbsp;InnerXml&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlDocument&amp;nbsp;doc&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;XmlDocument();&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;doc.InnerXml&amp;nbsp;=&amp;nbsp;content;&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;to&amp;nbsp;get&amp;nbsp;the&amp;nbsp;Urls&amp;nbsp;to&amp;nbsp;the&amp;nbsp;different&amp;nbsp;items&amp;nbsp;in&amp;nbsp;the&amp;nbsp;RSS&amp;nbsp;feed&amp;nbsp;we&amp;nbsp;filter&amp;nbsp;the&amp;nbsp;Xml&amp;nbsp;&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;for&amp;nbsp;the&amp;nbsp;link&amp;nbsp;nodes&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlNodeList&amp;nbsp;itemNodes&amp;nbsp;=&amp;nbsp;doc.GetElementsByTagName(&lt;SPAN style="COLOR: maroon"&gt;"link"&lt;/SPAN&gt;);&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stack&amp;nbsp;nodesToRemove&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;Stack();&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;loop&amp;nbsp;over&amp;nbsp;each&amp;nbsp;link&amp;nbsp;in&amp;nbsp;the&amp;nbsp;RSS&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;foreach&lt;/SPAN&gt;&amp;nbsp;(XmlNode&amp;nbsp;node&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt;&amp;nbsp;itemNodes)&amp;nbsp;&lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;we&amp;nbsp;are&amp;nbsp;only&amp;nbsp;interested&amp;nbsp;in&amp;nbsp;links&amp;nbsp;that&amp;nbsp;reside&amp;nbsp;in&amp;nbsp;item&amp;nbsp;nodes&amp;nbsp;of&amp;nbsp;the&amp;nbsp;RSS&amp;nbsp;feed&lt;/SPAN&gt;&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;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(node.ParentNode.Name&amp;nbsp;==&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"item"&lt;/SPAN&gt;)&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;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;the&amp;nbsp;link&amp;nbsp;to&amp;nbsp;the&amp;nbsp;item&amp;nbsp;is&amp;nbsp;in&amp;nbsp;the&amp;nbsp;InnerText&amp;nbsp;of&amp;nbsp;the&amp;nbsp;current&amp;nbsp;node&lt;/SPAN&gt;&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;nbsp;link&amp;nbsp;=&amp;nbsp;node.InnerText;&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(!&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;.IsNullOrEmpty(link))&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;lets&amp;nbsp;retrieve&amp;nbsp;the&amp;nbsp;sharepoint&amp;nbsp;object&amp;nbsp;identified&amp;nbsp;by&amp;nbsp;the&amp;nbsp;link&lt;/SPAN&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Uri&amp;nbsp;uri&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;Uri(link);&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&lt;STRONG&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;-- here we need to add the code to verify the last modified date&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;--&amp;nbsp;of the item identified by the url against the If-Modified-Since date&amp;nbsp;--&lt;/SPAN&gt;&lt;BR&gt;&lt;/STRONG&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;&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;&lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;while&lt;/SPAN&gt;&amp;nbsp;(nodesToRemove.Count&amp;nbsp;&amp;gt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;)&amp;nbsp;&lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;get&amp;nbsp;the&amp;nbsp;item&amp;nbsp;node&amp;nbsp;we&amp;nbsp;need&amp;nbsp;to&amp;nbsp;remove&lt;/SPAN&gt;&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;XmlNode&amp;nbsp;node&amp;nbsp;=&amp;nbsp;(nodesToRemove.Pop()&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt;&amp;nbsp;XmlNode).ParentNode;&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;node.ParentNode.RemoveChild(node);&amp;nbsp;&lt;BR&gt;&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;content&amp;nbsp;=&amp;nbsp;doc.InnerXml;&lt;/P&gt;&lt;/TT&gt;
&lt;P mce_keep="true"&gt;After this code is executed we have only the items in the RSS feed which were modified after the date in the If-Modified-Since header. The missing piece here is only the code that verifies the last modified date of the item against the If-Modified-Since header:&lt;/P&gt;&lt;TT&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;(SPSite&amp;nbsp;site&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;SPSite(uri.AbsoluteUri.ToString()))&amp;nbsp;&lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;to&amp;nbsp;avoid&amp;nbsp;exceptions&amp;nbsp;we&amp;nbsp;need&amp;nbsp;to&amp;nbsp;cut&amp;nbsp;the&amp;nbsp;URL&amp;nbsp;if&amp;nbsp;we&amp;nbsp;find&amp;nbsp;a&amp;nbsp;reserved&amp;nbsp;name.&amp;nbsp;Reserved&amp;nbsp;names&amp;nbsp;start&amp;nbsp;with&amp;nbsp;an&amp;nbsp;"_"&amp;nbsp;char.&lt;/SPAN&gt;&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;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;nbsp;modUrlWithoutReservedNames&amp;nbsp;=&amp;nbsp;uri.AbsolutePath.Substring(&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;,&amp;nbsp;(uri.AbsolutePath&amp;nbsp;+&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"/_"&lt;/SPAN&gt;).IndexOf(&lt;SPAN style="COLOR: maroon"&gt;"/_"&lt;/SPAN&gt;));&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;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;(SPWeb&amp;nbsp;web&amp;nbsp;=&amp;nbsp;site.OpenWeb(modUrlWithoutReservedNames,&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;false&lt;/SPAN&gt;))&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;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;there&amp;nbsp;are&amp;nbsp;two&amp;nbsp;possible&amp;nbsp;way&amp;nbsp;to&amp;nbsp;encode&amp;nbsp;the&amp;nbsp;URL&amp;nbsp;in&amp;nbsp;SharePoint&amp;nbsp;RSS&amp;nbsp;feeds&amp;nbsp;depending&amp;nbsp;on&amp;nbsp;how&amp;nbsp;it&amp;nbsp;is&amp;nbsp;configured:&lt;/SPAN&gt;&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;using&amp;nbsp;the&amp;nbsp;ID&amp;nbsp;and&amp;nbsp;using&amp;nbsp;direct&amp;nbsp;item&amp;nbsp;URL&lt;/SPAN&gt;&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(HttpUtility.ParseQueryString(uri.Query)[&lt;SPAN style="COLOR: maroon"&gt;"ID"&lt;/SPAN&gt;]&amp;nbsp;==&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;)&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;here&amp;nbsp;we&amp;nbsp;handle&amp;nbsp;the&amp;nbsp;items&amp;nbsp;identified&amp;nbsp;using&amp;nbsp;a&amp;nbsp;direct&amp;nbsp;Url&lt;/SPAN&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;check&amp;nbsp;if&amp;nbsp;we&amp;nbsp;can&amp;nbsp;retrieve&amp;nbsp;the&amp;nbsp;object&amp;nbsp;and&amp;nbsp;verify&amp;nbsp;if&amp;nbsp;it&amp;nbsp;is&amp;nbsp;a&amp;nbsp;List&amp;nbsp;Item&lt;/SPAN&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SPListItem&amp;nbsp;item&amp;nbsp;=&amp;nbsp;web.GetObject(uri.GetComponents(UriComponents.PathAndQuery,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UriFormat.UriEscaped))&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt;&amp;nbsp;SPListItem;&amp;nbsp;&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(item&amp;nbsp;!=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;)&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTime&amp;nbsp;modTime&amp;nbsp;=&amp;nbsp;(DateTime)item[&lt;SPAN style="COLOR: maroon"&gt;"Modified"&lt;/SPAN&gt;];&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(DateTime.Compare(modTime,&amp;nbsp;DateTime.Now.AddHours(-&lt;SPAN style="COLOR: maroon"&gt;1&lt;/SPAN&gt;))&amp;nbsp;&amp;lt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;)&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nodesToRemove.Push(node);&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;&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;&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;&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&gt;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;here&amp;nbsp;we&amp;nbsp;handle&amp;nbsp;the&amp;nbsp;items&amp;nbsp;identified&amp;nbsp;by&amp;nbsp;ID&lt;/SPAN&gt;&amp;nbsp;&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;first&amp;nbsp;we&amp;nbsp;try&amp;nbsp;to&amp;nbsp;get&amp;nbsp;the&amp;nbsp;list&lt;/SPAN&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SPList&amp;nbsp;list&amp;nbsp;=&amp;nbsp;web.GetList(uri.AbsolutePath);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(list&amp;nbsp;!=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;)&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;to&amp;nbsp;retrieve&amp;nbsp;the&amp;nbsp;list&amp;nbsp;item&amp;nbsp;we&amp;nbsp;need&amp;nbsp;to&amp;nbsp;take&amp;nbsp;the&amp;nbsp;item&amp;nbsp;id&amp;nbsp;from&amp;nbsp;the&amp;nbsp;query&amp;nbsp;string&amp;nbsp;in&amp;nbsp;the&amp;nbsp;rss&lt;/SPAN&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;itemId&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;.Parse(HttpUtility.ParseQueryString(uri.Query)[&lt;SPAN style="COLOR: maroon"&gt;"ID"&lt;/SPAN&gt;]);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SPListItem&amp;nbsp;item&amp;nbsp;=&amp;nbsp;list.GetItemById(itemId);&amp;nbsp;&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;remove&amp;nbsp;the&amp;nbsp;item&amp;nbsp;if&amp;nbsp;it's&amp;nbsp;last&amp;nbsp;modified&amp;nbsp;date&amp;nbsp;is&amp;nbsp;older&amp;nbsp;than&amp;nbsp;"If-Modified-Since"&lt;/SPAN&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DateTime&amp;nbsp;modTime&amp;nbsp;=&amp;nbsp;(DateTime)item[&lt;SPAN style="COLOR: maroon"&gt;"Modified"&lt;/SPAN&gt;];&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(DateTime.Compare(modTime,&amp;nbsp;ifModSince)&amp;nbsp;&amp;lt;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;)&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;we&amp;nbsp;cannot&amp;nbsp;remove&amp;nbsp;it&amp;nbsp;directly&amp;nbsp;as&amp;nbsp;this&amp;nbsp;would&amp;nbsp;modify&amp;nbsp;the&amp;nbsp;collection&amp;nbsp;foreach&amp;nbsp;is&amp;nbsp;running&amp;nbsp;over&lt;/SPAN&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;so&amp;nbsp;we&amp;nbsp;buffer&amp;nbsp;it&lt;/SPAN&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nodesToRemove.Push(node);&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;&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;&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;&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;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;&lt;/TT&gt;
&lt;P mce_keep="true"&gt;So we have now all code pieces together for the stream filter. To register this we have to register it as follows from within our control adapter:&lt;/P&gt;&lt;TT&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;protected&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Render(System.Web.UI.HtmlTextWriter&amp;nbsp;writer) &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(HttpContext.Current.Request.Headers.AllKeys.Contains(&lt;SPAN style="COLOR: maroon"&gt;"If-Modified-Since"&lt;/SPAN&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;&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;add&amp;nbsp;our&amp;nbsp;custom stream filter&amp;nbsp;if&amp;nbsp;we&amp;nbsp;receive&amp;nbsp;an&amp;nbsp;If-Modified-Since&amp;nbsp;header&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;base&lt;/SPAN&gt;.Page.Response.Filter&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;RSS_Filter(&lt;SPAN style="COLOR: blue"&gt;base&lt;/SPAN&gt;.Page.Response.Filter,&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;base&lt;/SPAN&gt;.Page.Response.ContentEncoding); &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;} &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;&lt;SPAN style="COLOR: blue"&gt;base&lt;/SPAN&gt;.Render(writer); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;&lt;/TT&gt;
&lt;P mce_keep="true"&gt;For your convenience here is now all the code together:&lt;/P&gt;&lt;TT&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.Xml; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.IO; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.Collections.Generic; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.Collections; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.Linq; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.Text; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.Web; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.Web.UI.Adapters; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;Microsoft.SharePoint; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;namespace&lt;/SPAN&gt;&amp;nbsp;StefanG.ControlAdapters &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt;&amp;nbsp;RSS_Filter&amp;nbsp;:&amp;nbsp;Stream &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt;&amp;nbsp;Encoding&amp;nbsp;enc&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt;&amp;nbsp;closed; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stream&amp;nbsp;BaseStream; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Queue&amp;nbsp;byteQueue&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;Queue(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;responseLength=&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;RSS_Filter(Stream&amp;nbsp;baseStream,&amp;nbsp;Encoding&amp;nbsp;encoding) &lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;here&amp;nbsp;we&amp;nbsp;keep&amp;nbsp;track&amp;nbsp;of&amp;nbsp;the&amp;nbsp;underlaying&amp;nbsp;base&amp;nbsp;stream&amp;nbsp;and&amp;nbsp;the&amp;nbsp;encoding.&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;BaseStream&amp;nbsp;=&amp;nbsp;baseStream; &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;enc&amp;nbsp;=&amp;nbsp;encoding; &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;stream&amp;nbsp;is&amp;nbsp;not&amp;nbsp;closed&amp;nbsp;when&amp;nbsp;we&amp;nbsp;create&amp;nbsp;it.&lt;/SPAN&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;&amp;nbsp;closed&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;false&lt;/SPAN&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Write(&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[]&amp;nbsp;buffer,&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;offset,&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;count) &lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;ensure&amp;nbsp;that&amp;nbsp;the&amp;nbsp;stream&amp;nbsp;has&amp;nbsp;not&amp;nbsp;been&amp;nbsp;closed&amp;nbsp;before&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(Closed)&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;ObjectDisposedException(&lt;SPAN style="COLOR: maroon"&gt;"RSS-Stream-Filter"&lt;/SPAN&gt;); &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;handle&amp;nbsp;the&amp;nbsp;special&amp;nbsp;case&amp;nbsp;that&amp;nbsp;only&amp;nbsp;part&amp;nbsp;of&amp;nbsp;the&amp;nbsp;given&amp;nbsp;buffer&amp;nbsp;&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;should&amp;nbsp;be&amp;nbsp;sent&amp;nbsp;to&amp;nbsp;the&amp;nbsp;wire.&amp;nbsp;We&amp;nbsp;will&amp;nbsp;then&amp;nbsp;copy&amp;nbsp;the&amp;nbsp;required&amp;nbsp;part&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;to&amp;nbsp;a&amp;nbsp;second&amp;nbsp;buffer&amp;nbsp;and&amp;nbsp;buffer&amp;nbsp;this&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(offset&amp;nbsp;&amp;gt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&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;&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[]&amp;nbsp;newBuf&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[count]; &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;&lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt;&amp;nbsp;(&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;count;&amp;nbsp;i++) &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;{ &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;newBuf[i]&amp;nbsp;=&amp;nbsp;buffer[i + offset]; &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;} &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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;we&amp;nbsp;store&amp;nbsp;the&amp;nbsp;buffer&amp;nbsp;in&amp;nbsp;a&amp;nbsp;queue&amp;nbsp;which&amp;nbsp;ensures&amp;nbsp;that&amp;nbsp;we&amp;nbsp;can&amp;nbsp;easily&amp;nbsp;&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;process&amp;nbsp;the&amp;nbsp;content&amp;nbsp;in&amp;nbsp;the&amp;nbsp;same&amp;nbsp;sequence&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;byteQueue.Enqueue(newBuf); &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;} &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;&lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&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;&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;we&amp;nbsp;store&amp;nbsp;the&amp;nbsp;buffer&amp;nbsp;in&amp;nbsp;a&amp;nbsp;queue&amp;nbsp;which&amp;nbsp;ensures&amp;nbsp;that&amp;nbsp;we&amp;nbsp;can&amp;nbsp;easily&amp;nbsp;&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;process&amp;nbsp;the&amp;nbsp;content&amp;nbsp;in&amp;nbsp;the&amp;nbsp;same&amp;nbsp;sequence&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;byteQueue.Enqueue(buffer); &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;} &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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;current&amp;nbsp;buffered&amp;nbsp;response&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;responseLength&amp;nbsp;+=&amp;nbsp;count; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt;&amp;nbsp;CanRead &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;&amp;nbsp;{&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;false&lt;/SPAN&gt;;&amp;nbsp;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt;&amp;nbsp;CanWrite &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;&amp;nbsp;{&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&amp;nbsp;!closed;&amp;nbsp;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt;&amp;nbsp;CanSeek &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;&amp;nbsp;{&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;false&lt;/SPAN&gt;;&amp;nbsp;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Close() &lt;BR&gt;&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;closed&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;true&lt;/SPAN&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;&amp;nbsp;BaseStream.Close(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;protected&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt;&amp;nbsp;Closed &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;&amp;nbsp;{&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&amp;nbsp;closed;&amp;nbsp;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Flush() &lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;we&amp;nbsp;retrieve&amp;nbsp;the&amp;nbsp;reference&amp;nbsp;time&amp;nbsp;from&amp;nbsp;the&amp;nbsp;If-Modified-Since&amp;nbsp;header&lt;/SPAN&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;&amp;nbsp;DateTime&amp;nbsp;ifModSince&amp;nbsp;=&amp;nbsp;Convert.ToDateTime(HttpContext.Current.Request.Headers[&lt;SPAN style="COLOR: maroon"&gt;"If-Modified-Since"&lt;/SPAN&gt;]); &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;here&amp;nbsp;we&amp;nbsp;copy&amp;nbsp;the&amp;nbsp;different&amp;nbsp;buffers&amp;nbsp;into&amp;nbsp;one&amp;nbsp;large&amp;nbsp;buffer&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;we&amp;nbsp;need&amp;nbsp;this&amp;nbsp;in&amp;nbsp;a&amp;nbsp;single&amp;nbsp;buffer&amp;nbsp;for&amp;nbsp;the&amp;nbsp;conversion&amp;nbsp;to&amp;nbsp;string&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[]&amp;nbsp;fullBuffer&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[responseLength]; &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;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;index&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;while&lt;/SPAN&gt;&amp;nbsp;(byteQueue.Count&amp;nbsp;&amp;gt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&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;&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[]&amp;nbsp;buf&amp;nbsp;=&amp;nbsp;byteQueue.Dequeue()&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf.CopyTo(fullBuffer,&amp;nbsp;index); &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;index&amp;nbsp;+=&amp;nbsp;buf.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;} &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;now&amp;nbsp;we&amp;nbsp;convert&amp;nbsp;the&amp;nbsp;byte&amp;nbsp;buffer&amp;nbsp;into&amp;nbsp;a&amp;nbsp;string&amp;nbsp;object&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;nbsp;content&amp;nbsp;=&amp;nbsp;enc.GetString(fullBuffer,&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;,&amp;nbsp;responseLength); &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;before&amp;nbsp;we&amp;nbsp;convert&amp;nbsp;the&amp;nbsp;content&amp;nbsp;we&amp;nbsp;have&amp;nbsp;to&amp;nbsp;remove&amp;nbsp;all&amp;nbsp;characters&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;which&amp;nbsp;are&amp;nbsp;not&amp;nbsp;part&amp;nbsp;of&amp;nbsp;the&amp;nbsp;Xml&amp;nbsp;content&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;nbsp;nonXml&amp;nbsp;=&amp;nbsp;content.Substring(&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;,&amp;nbsp;content.IndexOf(&lt;SPAN style="COLOR: maroon"&gt;"&amp;lt;"&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(nonXml.Length&amp;nbsp;&amp;gt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;content&amp;nbsp;=&amp;nbsp;content.Substring(nonXml.Length); &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;try&lt;/SPAN&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;&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;now&amp;nbsp;we&amp;nbsp;create&amp;nbsp;a&amp;nbsp;new&amp;nbsp;XmlDocument&amp;nbsp;and&amp;nbsp;pass&amp;nbsp;in&amp;nbsp;the&amp;nbsp;rss&amp;nbsp;content&amp;nbsp;as&amp;nbsp;InnerXml&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlDocument&amp;nbsp;doc&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;XmlDocument(); &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;doc.InnerXml&amp;nbsp;=&amp;nbsp;content; &lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;to&amp;nbsp;get&amp;nbsp;the&amp;nbsp;Urls&amp;nbsp;to&amp;nbsp;the&amp;nbsp;different&amp;nbsp;items&amp;nbsp;in&amp;nbsp;the&amp;nbsp;RSS&amp;nbsp;feed&amp;nbsp;we&amp;nbsp;filter&amp;nbsp;the&amp;nbsp;Xml&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;for&amp;nbsp;the&amp;nbsp;link&amp;nbsp;nodes&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlNodeList&amp;nbsp;itemNodes&amp;nbsp;=&amp;nbsp;doc.GetElementsByTagName(&lt;SPAN style="COLOR: maroon"&gt;"link"&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stack&amp;nbsp;nodesToRemove&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;Stack(); &lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;loop&amp;nbsp;over&amp;nbsp;each&amp;nbsp;link&amp;nbsp;in&amp;nbsp;the&amp;nbsp;RSS&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;foreach&lt;/SPAN&gt;&amp;nbsp;(XmlNode&amp;nbsp;node&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt;&amp;nbsp;itemNodes) &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;{ &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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;we&amp;nbsp;are&amp;nbsp;only&amp;nbsp;interested&amp;nbsp;in&amp;nbsp;links&amp;nbsp;that&amp;nbsp;reside&amp;nbsp;in&amp;nbsp;item&amp;nbsp;nodes&amp;nbsp;of&amp;nbsp;the&amp;nbsp;RSS&amp;nbsp;feed&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(node.ParentNode.Name&amp;nbsp;==&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"item"&lt;/SPAN&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;the&amp;nbsp;link&amp;nbsp;to&amp;nbsp;the&amp;nbsp;item&amp;nbsp;is&amp;nbsp;in&amp;nbsp;the&amp;nbsp;InnerText&amp;nbsp;of&amp;nbsp;the&amp;nbsp;current&amp;nbsp;node&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;nbsp;link&amp;nbsp;=&amp;nbsp;node.InnerText; &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;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(!&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;.IsNullOrEmpty(link)) &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;{ &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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;lets&amp;nbsp;retrieve&amp;nbsp;the&amp;nbsp;sharepoint&amp;nbsp;object&amp;nbsp;identified&amp;nbsp;by&amp;nbsp;the&amp;nbsp;link&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Uri&amp;nbsp;uri&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;Uri(link); &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;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;(SPSite&amp;nbsp;site&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;SPSite(uri.AbsoluteUri.ToString())) &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;{ &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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;to&amp;nbsp;avoid&amp;nbsp;exceptions&amp;nbsp;we&amp;nbsp;need&amp;nbsp;to&amp;nbsp;cut&amp;nbsp;the&amp;nbsp;URL&amp;nbsp;if&amp;nbsp;we&amp;nbsp;find&amp;nbsp;a&amp;nbsp;reserved&amp;nbsp;name.&amp;nbsp;Reserved&amp;nbsp;names&amp;nbsp;start&amp;nbsp;with&amp;nbsp;an&amp;nbsp;"_"&amp;nbsp;char.&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;nbsp;modUrlWithoutReservedNames&amp;nbsp;=&amp;nbsp;uri.AbsolutePath.Substring(&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;,&amp;nbsp;(uri.AbsolutePath&amp;nbsp;+&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"/_"&lt;/SPAN&gt;).IndexOf(&lt;SPAN style="COLOR: maroon"&gt;"/_"&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;(SPWeb&amp;nbsp;web&amp;nbsp;=&amp;nbsp;site.OpenWeb(modUrlWithoutReservedNames,&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;false&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;there&amp;nbsp;are&amp;nbsp;two&amp;nbsp;possible&amp;nbsp;way&amp;nbsp;to&amp;nbsp;encode&amp;nbsp;the&amp;nbsp;URL&amp;nbsp;in&amp;nbsp;SharePoint&amp;nbsp;RSS&amp;nbsp;feeds&amp;nbsp;depending&amp;nbsp;on&amp;nbsp;how&amp;nbsp;it&amp;nbsp;is&amp;nbsp;configured:&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;using&amp;nbsp;the&amp;nbsp;ID&amp;nbsp;and&amp;nbsp;using&amp;nbsp;direct&amp;nbsp;item&amp;nbsp;URL&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(HttpUtility.ParseQueryString(uri.Query)[&lt;SPAN style="COLOR: maroon"&gt;"ID"&lt;/SPAN&gt;]&amp;nbsp;==&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;here&amp;nbsp;we&amp;nbsp;handle&amp;nbsp;the&amp;nbsp;items&amp;nbsp;identified&amp;nbsp;using&amp;nbsp;a&amp;nbsp;direct&amp;nbsp;Url&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;check&amp;nbsp;if&amp;nbsp;we&amp;nbsp;can&amp;nbsp;retrieve&amp;nbsp;the&amp;nbsp;object&amp;nbsp;and&amp;nbsp;verify&amp;nbsp;if&amp;nbsp;it&amp;nbsp;is&amp;nbsp;a&amp;nbsp;List&amp;nbsp;Item&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SPListItem&amp;nbsp;item&amp;nbsp;=&amp;nbsp;web.GetObject(uri.GetComponents(UriComponents.PathAndQuery,&amp;nbsp;UriFormat.UriEscaped))&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt;&amp;nbsp;SPListItem; &lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(item&amp;nbsp;!=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DateTime&amp;nbsp;modTime&amp;nbsp;=&amp;nbsp;(DateTime)item[&lt;SPAN style="COLOR: maroon"&gt;"Modified"&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(DateTime.Compare(modTime,&amp;nbsp;DateTime.Now.AddHours(-&lt;SPAN style="COLOR: maroon"&gt;1&lt;/SPAN&gt;))&amp;nbsp;&amp;lt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nodesToRemove.Push(node); &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;} &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;} &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;} &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;&lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;here&amp;nbsp;we&amp;nbsp;handle&amp;nbsp;the&amp;nbsp;items&amp;nbsp;identified&amp;nbsp;by&amp;nbsp;ID&lt;/SPAN&gt;&amp;nbsp;&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;first&amp;nbsp;we&amp;nbsp;try&amp;nbsp;to&amp;nbsp;get&amp;nbsp;the&amp;nbsp;list&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SPList&amp;nbsp;list&amp;nbsp;=&amp;nbsp;web.GetList(uri.AbsolutePath); &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;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(list&amp;nbsp;!=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;to&amp;nbsp;retrieve&amp;nbsp;the&amp;nbsp;list&amp;nbsp;item&amp;nbsp;we&amp;nbsp;need&amp;nbsp;to&amp;nbsp;take&amp;nbsp;the&amp;nbsp;item&amp;nbsp;id&amp;nbsp;from&amp;nbsp;the&amp;nbsp;query&amp;nbsp;string&amp;nbsp;in&amp;nbsp;the&amp;nbsp;rss&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;itemId&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;.Parse(HttpUtility.ParseQueryString(uri.Query)[&lt;SPAN style="COLOR: maroon"&gt;"ID"&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SPListItem&amp;nbsp;item&amp;nbsp;=&amp;nbsp;list.GetItemById(itemId); &lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;remove&amp;nbsp;the&amp;nbsp;item&amp;nbsp;if&amp;nbsp;it's&amp;nbsp;last&amp;nbsp;modified&amp;nbsp;date&amp;nbsp;is&amp;nbsp;older&amp;nbsp;than&amp;nbsp;"If-Modified-Since"&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DateTime&amp;nbsp;modTime&amp;nbsp;=&amp;nbsp;(DateTime)item[&lt;SPAN style="COLOR: maroon"&gt;"Modified"&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(DateTime.Compare(modTime,&amp;nbsp;ifModSince)&amp;nbsp;&amp;lt;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;we&amp;nbsp;cannot&amp;nbsp;remove&amp;nbsp;it&amp;nbsp;directly&amp;nbsp;as&amp;nbsp;this&amp;nbsp;would&amp;nbsp;modify&amp;nbsp;the&amp;nbsp;collection&amp;nbsp;foreach&amp;nbsp;is&amp;nbsp;running&amp;nbsp;over&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;so&amp;nbsp;we&amp;nbsp;buffer&amp;nbsp;it&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nodesToRemove.Push(node); &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;} &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;} &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;} &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;} &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;} &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;} &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;} &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;} &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;&lt;SPAN style="COLOR: blue"&gt;while&lt;/SPAN&gt;&amp;nbsp;(nodesToRemove.Count&amp;nbsp;&amp;gt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;get&amp;nbsp;the&amp;nbsp;item&amp;nbsp;node&amp;nbsp;we&amp;nbsp;need&amp;nbsp;to&amp;nbsp;remove&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlNode&amp;nbsp;node&amp;nbsp;=&amp;nbsp;(nodesToRemove.Pop()&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt;&amp;nbsp;XmlNode).ParentNode; &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;node.ParentNode.RemoveChild(node); &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;} &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;content&amp;nbsp;=&amp;nbsp;doc.InnerXml; &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;} &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;&lt;SPAN style="COLOR: blue"&gt;catch&lt;/SPAN&gt;&amp;nbsp;(Exception&amp;nbsp;e) &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;{ &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;Console.WriteLine(e); &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;} &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;&lt;SPAN style="COLOR: blue"&gt;finally&lt;/SPAN&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;&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;ensure&amp;nbsp;to&amp;nbsp;write&amp;nbsp;the&amp;nbsp;data&amp;nbsp;we&amp;nbsp;have&amp;nbsp;to&amp;nbsp;the&amp;nbsp;wire&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[]&amp;nbsp;newBuffer&amp;nbsp;=&amp;nbsp;enc.GetBytes(nonXml&amp;nbsp;+&amp;nbsp;content); &lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;responseLength&amp;nbsp;=&amp;nbsp;newBuffer.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;BaseStream.Write(newBuffer,&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;,&amp;nbsp;responseLength); &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;} &lt;BR&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;&amp;nbsp;BaseStream.Flush(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;Read(&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[]&amp;nbsp;buffer,&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;offset,&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;count) &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;NotSupportedException(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;long&lt;/SPAN&gt;&amp;nbsp;Length &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;&amp;nbsp;{&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;NotSupportedException();&amp;nbsp;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;long&lt;/SPAN&gt;&amp;nbsp;Seek(&lt;SPAN style="COLOR: blue"&gt;long&lt;/SPAN&gt;&amp;nbsp;offset,&amp;nbsp;SeekOrigin&amp;nbsp;origin) &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;NotSupportedException(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;SetLength(&lt;SPAN style="COLOR: blue"&gt;long&lt;/SPAN&gt;&amp;nbsp;value) &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;NotSupportedException(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;long&lt;/SPAN&gt;&amp;nbsp;Position &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt;&amp;nbsp;{&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;NotSupportedException();&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;&lt;SPAN style="COLOR: blue"&gt;set&lt;/SPAN&gt;&amp;nbsp;{&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;NotSupportedException();&amp;nbsp;} &lt;BR&gt;&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;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt;&amp;nbsp;RssControlAdapter&amp;nbsp;:&amp;nbsp;PageAdapter &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;protected&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Render(System.Web.UI.HtmlTextWriter&amp;nbsp;writer) &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(HttpContext.Current.Request.Headers.AllKeys.Contains(&lt;SPAN style="COLOR: maroon"&gt;"If-Modified-Since"&lt;/SPAN&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;&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;add&amp;nbsp;our&amp;nbsp;custom&amp;nbsp;stream&amp;nbsp;filter&amp;nbsp;if&amp;nbsp;we&amp;nbsp;receive&amp;nbsp;an&amp;nbsp;If-Modified-Since&amp;nbsp;header&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;base&lt;/SPAN&gt;.Page.Response.Filter&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;RSS_Filter(&lt;SPAN style="COLOR: blue"&gt;base&lt;/SPAN&gt;.Page.Response.Filter,&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;base&lt;/SPAN&gt;.Page.Response.ContentEncoding); &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;} &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;&lt;SPAN style="COLOR: blue"&gt;base&lt;/SPAN&gt;.Render(writer); &lt;BR&gt;&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;} &lt;BR&gt;} &lt;BR&gt;&lt;/P&gt;&lt;/TT&gt;
&lt;P mce_keep="true"&gt;To implement this control adapter you need to do the following steps:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;create a new class library project in Visual Studio 2008&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;replace the code in class.cs with the code listed above&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;add a key file to allow signing of the generated assembly&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;build the dll and add it to the Global Assembly Cache (GAC)&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P mce_keep="true"&gt;Afterwards you need to register this control adapter with your existing SharePoint web application. To do this you need to create a new file with the file extension ".browser" inside the App_Browsers directory (e.g. RssControlAdapter.browser) and add the following XML:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;browsers&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;browser&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: red"&gt;refID&lt;/SPAN&gt;="&lt;SPAN style="COLOR: blue"&gt;Default&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;controlAdapters&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;adapter&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: red"&gt;controlType&lt;/SPAN&gt;="&lt;SPAN style="COLOR: blue"&gt;Microsoft.SharePoint.ApplicationPages.ListFeed,&amp;nbsp;Microsoft.SharePoint.ApplicationPages&lt;/SPAN&gt;"&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: red"&gt;adapterType&lt;/SPAN&gt;="&lt;SPAN style="COLOR: blue"&gt;StefanG.ControlAdapters.RssControlAdapter,&amp;nbsp;&lt;STRONG&gt;&lt;EM&gt;AssemblyName&lt;/EM&gt;&lt;/STRONG&gt;,&amp;nbsp;Version=1.0.0.0,&amp;nbsp;Culture=neutral,&amp;nbsp;PublicKeyToken=&lt;STRONG&gt;&lt;EM&gt;f180aea0269836ba&lt;/EM&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;"&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;/&lt;SPAN style="COLOR: maroon"&gt;controlAdapters&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;/&lt;SPAN style="COLOR: maroon"&gt;browser&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;lt;&lt;/SPAN&gt;/&lt;SPAN style="COLOR: maroon"&gt;browsers&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Be sure to adjust the Public Key Token &lt;STRONG&gt;&lt;EM&gt;f180aea0269836ba&lt;/EM&gt;&lt;/STRONG&gt;&amp;nbsp;and the &lt;STRONG&gt;&lt;EM&gt;AssemblyName&lt;/EM&gt;&lt;/STRONG&gt; with the public key token of and name of your specific assembly&lt;/P&gt;
&lt;P mce_keep="true"&gt;To ensure that the new .browser file is being used after the next application domain recycle you also need to delete the content of the following directory:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;C:\windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;If this directory is not purged the additional .browser file is usually not used.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3283804" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/Coding+Tips/default.aspx">Coding Tips</category><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/MOSS+2007+_2F00_+WSS+3.0/default.aspx">MOSS 2007 / WSS 3.0</category></item><item><title>Important: Be careful when installing WSS August Cumulative Update</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/09/14/important-be-careful-when-installing-wss-august-cumulative-update.aspx</link><pubDate>Mon, 14 Sep 2009 11:25:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3280882</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3280882.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3280882</wfw:commentRss><description>&lt;P&gt;Last week we discovered a problem with the WSS August CU. &lt;/P&gt;
&lt;P&gt;Due to schema and stored procedure changes coming with the August CU databases with a patch level older than the August CU cannot be upgraded to August CU through database attach method.&lt;/P&gt;
&lt;P&gt;That means that you need to be careful when upgrading your WSS or MOSS farm to August CU as the usual recommended steps to detach the content database before installing the hotfix will cause problems later when you are going to reattach the databases. In case you need to install the August CU now to resolve an issue that is covered by the fix you should avoid detaching the content databases during the hotfix installation. If the databases are attached the hotfix installation will correctly upgrade the database when running PSCONFIG.&lt;/P&gt;
&lt;P&gt;In case you need to detach the databases it would be required to upgrade the database in a separate farm before attaching them back to the production database. E.g. install a test farm with the previous build level the databases, attach the databases there and then upgrade the test farm to August CU. Afterwards you can detach the upgraded databases from the test farm and attach them back to the production farm.&lt;/P&gt;
&lt;P&gt;Also be aware that this will also affect database backups taken before installing August CU.&lt;/P&gt;
&lt;P&gt;The product group is currently actively investigating this issue to identify a more elegant method to avoid this problem.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;[Update: the WSS hotfix has been rereleased on October 1st. The version of the WSS August 2009 CU availble now does no longer have this problem.]&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3280882" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/MOSS+2007+_2F00_+WSS+3.0/default.aspx">MOSS 2007 / WSS 3.0</category><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/Hotfix+Info/default.aspx">Hotfix Info</category></item><item><title>How to deal with invalid characters in SOAP responses from ASP.NET web services</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/08/26/how-to-deal-with-invalid-characters-in-soap-responses-from-asp-net-web-services.aspx</link><pubDate>Wed, 26 Aug 2009 17:22:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3277102</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3277102.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3277102</wfw:commentRss><description>&lt;P&gt;ASP.NET webservices use XML 1.0 which restricts the character set allowed to the following chars:&lt;/P&gt;
&lt;P&gt;[2]&amp;nbsp;&amp;nbsp;&amp;nbsp; Char&amp;nbsp;&amp;nbsp;&amp;nbsp; ::=&amp;nbsp;&amp;nbsp;&amp;nbsp; #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */ &lt;BR&gt;(Source: &lt;A href="http://www.w3.org/TR/REC-xml/#charsets" mce_href="http://www.w3.org/TR/REC-xml/#charsets"&gt;http://www.w3.org/TR/REC-xml/#charsets&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;As you can see several characters below 0x20 are not allowed with XML 1.0. This also includes characters like the vertical tab (0x0B) which is used pretty frequently.&lt;/P&gt;
&lt;P&gt;For backward compatibility reasons .NET webservices do not support XML 1.1 which would allow these character as explained in the following article:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/xml/bb291067.aspx" mce_href="http://msdn.microsoft.com/en-us/xml/bb291067.aspx"&gt;http://msdn.microsoft.com/en-us/xml/bb291067.aspx&lt;/A&gt;&lt;BR&gt;W3C Recommendations NOT Supported at This Time&lt;BR&gt;...&lt;BR&gt;XML 1.1 - Microsoft has deliberately chosen not to support the XML 1.1 Recommendation unless there is significant customer demand. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Usually the limitation of XML 1.0 is not hurting - except if the XML response sent back to the client would include one of the forbidden characters like the vertical tab.&lt;/P&gt;
&lt;P&gt;An interesting tidbit is that the web service stub (server) routines implemented in .NET framework do not bother about the invalid characters when encoding the XML response. They encode the invalid characters as numeric character reference like &amp;amp;#11; for the vertical tab char. The problem occurs in the web service proxy (client) routines. These raise an exception when an entity is returned which is not allowed in XML 1.0:&lt;/P&gt;
&lt;P&gt;There is an error in XML document (8, 1314). &lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) &lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle) &lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) &lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) &lt;BR&gt;&amp;nbsp;&amp;nbsp; ...&lt;/P&gt;
&lt;P&gt;So there is a slight discrepancy between the handling of the invalid characters on the web service proxy and stub side.&lt;/P&gt;
&lt;P&gt;It would be great if the ASP.NET webservice classes would avoid sending invalid numeric character references to the client at all - but that is not implemented in .NET framework. As the client also cannot get hands on the content before the exception is raised it would be required to fix the issue in the application logic of the web service itself.&lt;/P&gt;
&lt;P&gt;Means each web service method would have to replace the invalid characters before sending the XML content to the client.&lt;/P&gt;
&lt;P&gt;The problem here is that usually the automatic XML serialization of managed objects is used to create the XML response. So fixing the issue inside the web service is also not trivial.&lt;/P&gt;
&lt;P&gt;This issue also affects the standard sharepoint web services which allow access to SharePoint content.&lt;/P&gt;
&lt;P&gt;To overcome this problem it would be required to remove the invalid characters from the XML response (e.g. replace them with a space char) after they have been serialized to XML and before they are sent over the wire to the caller of the web service.&lt;/P&gt;
&lt;P mce_keep="true"&gt;The good message is: ASP.NET has indeed a way to achieve this: &lt;A href="http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension.aspx"&gt;SoapExtensions&lt;/A&gt;. A SoapExtension allows to consume and modify the SOAP message sent from client to server and vice versa.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Below is a SoapExtension which replaces the invalid control characters with a blank character (0x20) using Regular Expressions:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: gray"&gt;///&amp;nbsp;&amp;nbsp;This&amp;nbsp;source&amp;nbsp;code&amp;nbsp;is&amp;nbsp;freeware&amp;nbsp;and&amp;nbsp;is&amp;nbsp;provided&amp;nbsp;on&amp;nbsp;an&amp;nbsp;"as&amp;nbsp;is"&amp;nbsp;basis&amp;nbsp;without&amp;nbsp;warranties&amp;nbsp;of&amp;nbsp;any&amp;nbsp;kind,&amp;nbsp;&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: gray"&gt;///&amp;nbsp;&amp;nbsp;whether&amp;nbsp;express&amp;nbsp;or&amp;nbsp;implied,&amp;nbsp;including&amp;nbsp;without&amp;nbsp;limitation&amp;nbsp;warranties&amp;nbsp;that&amp;nbsp;the&amp;nbsp;code&amp;nbsp;is&amp;nbsp;free&amp;nbsp;of&amp;nbsp;defect,&amp;nbsp;&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: gray"&gt;///&amp;nbsp;&amp;nbsp;fit&amp;nbsp;for&amp;nbsp;a&amp;nbsp;particular&amp;nbsp;purpose&amp;nbsp;or&amp;nbsp;non-infringing.&amp;nbsp;&amp;nbsp;The&amp;nbsp;entire&amp;nbsp;risk&amp;nbsp;as&amp;nbsp;to&amp;nbsp;the&amp;nbsp;quality&amp;nbsp;and&amp;nbsp;performance&amp;nbsp;of&amp;nbsp;&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: gray"&gt;///&amp;nbsp;&amp;nbsp;the&amp;nbsp;code&amp;nbsp;is&amp;nbsp;with&amp;nbsp;the&amp;nbsp;end&amp;nbsp;user.&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: gray"&gt;///&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.IO; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.Web; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.Web.Services; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.Web.Services.Protocols; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.Collections.Generic; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.Text; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&amp;nbsp;System.Text.RegularExpressions; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;namespace&lt;/SPAN&gt;&amp;nbsp;StefanG.SoapExtensions &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt;&amp;nbsp;XmlCleanupSoapExtension&amp;nbsp;:&amp;nbsp;SoapExtension &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt;&amp;nbsp;Regex&amp;nbsp;replaceRegEx; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt;&amp;nbsp;Stream&amp;nbsp;oldStream; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt;&amp;nbsp;Stream&amp;nbsp;newStream; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;to&amp;nbsp;modify&amp;nbsp;the&amp;nbsp;content&amp;nbsp;we&amp;nbsp;redirect&amp;nbsp;the&amp;nbsp;stream&amp;nbsp;to&amp;nbsp;a&amp;nbsp;memory&amp;nbsp;stream&amp;nbsp;to&amp;nbsp;allow&amp;nbsp;&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;easy&amp;nbsp;consumption&amp;nbsp;and&amp;nbsp;modifcation&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;Stream&amp;nbsp;ChainStream(Stream&amp;nbsp;stream) &lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;keep&amp;nbsp;track&amp;nbsp;of&amp;nbsp;the&amp;nbsp;original&amp;nbsp;stream&lt;/SPAN&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;&amp;nbsp;oldStream&amp;nbsp;=&amp;nbsp;stream; &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;create&amp;nbsp;a&amp;nbsp;new&amp;nbsp;memory&amp;nbsp;stream&amp;nbsp;and&amp;nbsp;configure&amp;nbsp;it&amp;nbsp;as&amp;nbsp;the&amp;nbsp;stream&amp;nbsp;object&amp;nbsp;to&amp;nbsp;use&amp;nbsp;as&amp;nbsp;input&amp;nbsp;and&amp;nbsp;output&amp;nbsp;of&amp;nbsp;the&amp;nbsp;webservice&lt;/SPAN&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;&amp;nbsp;newStream&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;MemoryStream(); &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;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&amp;nbsp;newStream; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;GetInitializer(LogicalMethodInfo&amp;nbsp;methodInfo,&amp;nbsp;SoapExtensionAttribute&amp;nbsp;attribute) &lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;the&amp;nbsp;module&amp;nbsp;is&amp;nbsp;intended&amp;nbsp;to&amp;nbsp;look&amp;nbsp;at&amp;nbsp;all&amp;nbsp;methods.&amp;nbsp;Not&amp;nbsp;on&amp;nbsp;methods&amp;nbsp;tagged&amp;nbsp;with&amp;nbsp;a&amp;nbsp;specific&amp;nbsp;attribute&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;throw&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;Exception(&lt;SPAN style="COLOR: maroon"&gt;"The&amp;nbsp;method&amp;nbsp;or&amp;nbsp;operation&amp;nbsp;is&amp;nbsp;not&amp;nbsp;implemented."&lt;/SPAN&gt;); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;GetInitializer(Type&amp;nbsp;serviceType) &lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;create&amp;nbsp;a&amp;nbsp;compiled&amp;nbsp;instance&amp;nbsp;of&amp;nbsp;the&amp;nbsp;Regular&amp;nbsp;Expression&amp;nbsp;for&amp;nbsp;the&amp;nbsp;chars&amp;nbsp;we&amp;nbsp;would&amp;nbsp;like&amp;nbsp;to&amp;nbsp;replace&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;add&amp;nbsp;all&amp;nbsp;char&amp;nbsp;points&amp;nbsp;beween&amp;nbsp;0&amp;nbsp;and&amp;nbsp;31&amp;nbsp;excluding&amp;nbsp;the&amp;nbsp;allowed&amp;nbsp;white&amp;nbsp;spaces&amp;nbsp;(9=TAB,&amp;nbsp;10=LF,&amp;nbsp;13=CR)&lt;/SPAN&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;&amp;nbsp;StringBuilder&amp;nbsp;RegExp&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;StringBuilder(&lt;SPAN style="COLOR: maroon"&gt;"&amp;amp;#(0"&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt;&amp;nbsp;(&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;1&lt;/SPAN&gt;;&amp;nbsp;i&amp;nbsp;&amp;lt;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;31&lt;/SPAN&gt;;&amp;nbsp;i++) &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;{ &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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;ignore&amp;nbsp;allowed&amp;nbsp;white&amp;nbsp;spaces&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(i&amp;nbsp;==&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;9&lt;/SPAN&gt;&amp;nbsp;||&amp;nbsp;i&amp;nbsp;==&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;10&lt;/SPAN&gt;&amp;nbsp;||&amp;nbsp;i&amp;nbsp;==&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;13&lt;/SPAN&gt;)&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;continue&lt;/SPAN&gt;; &lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;add&amp;nbsp;other&amp;nbsp;control&amp;nbsp;characters&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RegExp.Append(&lt;SPAN style="COLOR: maroon"&gt;"|"&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RegExp.Append(i.ToString());&amp;nbsp;&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;add&amp;nbsp;hex representation as well&lt;/SPAN&gt;&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;&amp;nbsp;RegExp.Append(&lt;SPAN style="COLOR: maroon"&gt;"|x"&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RegExp.Append(i.ToString("x"));&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;} &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;RegExp.Append(&lt;SPAN style="COLOR: maroon"&gt;");"&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;nbsp;strRegExp&amp;nbsp;=&amp;nbsp;RegExp.ToString(); &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;create&amp;nbsp;regular&amp;nbsp;expression&amp;nbsp;assembly&amp;nbsp;&lt;/SPAN&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;&amp;nbsp;Regex&amp;nbsp;regEx&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;Regex(strRegExp,&amp;nbsp;RegexOptions.Compiled | RegexOptions.IgnoreCase); &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;return&amp;nbsp;the&amp;nbsp;compiled&amp;nbsp;RegEx&amp;nbsp;to&amp;nbsp;all&amp;nbsp;further&amp;nbsp;instances&amp;nbsp;of&amp;nbsp;this&amp;nbsp;class&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&amp;nbsp;regEx; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;Initialize(&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;initializer) &lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;instance&amp;nbsp;initializers&amp;nbsp;retrieves&amp;nbsp;the&amp;nbsp;compiled&amp;nbsp;regular&amp;nbsp;expression&lt;/SPAN&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;&amp;nbsp;replaceRegEx&amp;nbsp;=&amp;nbsp;initializer&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt;&amp;nbsp;Regex; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;override&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;ProcessMessage(SoapMessage&amp;nbsp;message) &lt;BR&gt;&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;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(message.Stage&amp;nbsp;==&amp;nbsp;SoapMessageStage.AfterSerialize) &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;{ &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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;process&amp;nbsp;the&amp;nbsp;response&amp;nbsp;sent&amp;nbsp;back&amp;nbsp;to&amp;nbsp;the&amp;nbsp;client&amp;nbsp;-&amp;nbsp;means&amp;nbsp;ensure&amp;nbsp;it&amp;nbsp;is&amp;nbsp;XML&amp;nbsp;1.0&amp;nbsp;compliant&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ProcessOutput(message); &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;} &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;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(message.Stage&amp;nbsp;==&amp;nbsp;SoapMessageStage.BeforeDeserialize) &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;{ &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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;just&amp;nbsp;copy&amp;nbsp;the&amp;nbsp;XML&amp;nbsp;Soap&amp;nbsp;message&amp;nbsp;from&amp;nbsp;the&amp;nbsp;incoming&amp;nbsp;stream&amp;nbsp;to&amp;nbsp;the&amp;nbsp;outgoing&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ProcessInput(message); &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;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;ProcessInput(SoapMessage&amp;nbsp;message) &lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;no&amp;nbsp;manipulation&amp;nbsp;required&amp;nbsp;on&amp;nbsp;input&amp;nbsp;data&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;copy&amp;nbsp;content&amp;nbsp;from&amp;nbsp;http&amp;nbsp;stream&amp;nbsp;to&amp;nbsp;memory&amp;nbsp;stream&amp;nbsp;to&amp;nbsp;make&amp;nbsp;it&amp;nbsp;available&amp;nbsp;to&amp;nbsp;the&amp;nbsp;web&amp;nbsp;service&lt;/SPAN&gt; &lt;BR&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;&amp;nbsp;TextReader&amp;nbsp;reader&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;StreamReader(oldStream); &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;TextWriter&amp;nbsp;writer&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&amp;nbsp;StreamWriter(newStream); &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;writer.WriteLine(reader.ReadToEnd()); &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;writer.Flush(); &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;set&amp;nbsp;position&amp;nbsp;back&amp;nbsp;to&amp;nbsp;the&amp;nbsp;beginning&amp;nbsp;to&amp;nbsp;ensure&amp;nbsp;that&amp;nbsp;the&amp;nbsp;web&amp;nbsp;service&amp;nbsp;reads&amp;nbsp;the&amp;nbsp;content&amp;nbsp;we&amp;nbsp;just&amp;nbsp;copied&lt;/SPAN&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;&amp;nbsp;newStream.Position&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&amp;nbsp;ProcessOutput(SoapMessage&amp;nbsp;message) &lt;BR&gt;&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;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;rewind&amp;nbsp;stream&amp;nbsp;to&amp;nbsp;ensure&amp;nbsp;that&amp;nbsp;we&amp;nbsp;read&amp;nbsp;from&amp;nbsp;the&amp;nbsp;beginning&lt;/SPAN&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;&amp;nbsp;newStream.Position&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;; &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;copy&amp;nbsp;the&amp;nbsp;content&amp;nbsp;of&amp;nbsp;the&amp;nbsp;stream&amp;nbsp;into&amp;nbsp;a&amp;nbsp;memory&amp;nbsp;buffer&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[]&amp;nbsp;buffer&amp;nbsp;=&amp;nbsp;(newStream&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt;&amp;nbsp;MemoryStream).ToArray(); &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;shortcut&amp;nbsp;if&amp;nbsp;stream&amp;nbsp;is&amp;nbsp;empty&amp;nbsp;to&amp;nbsp;avoid&amp;nbsp;exception&amp;nbsp;later&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(buffer.Length&amp;nbsp;==&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;)&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;; &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;convert&amp;nbsp;buffer&amp;nbsp;to&amp;nbsp;string&amp;nbsp;to&amp;nbsp;allow&amp;nbsp;easy&amp;nbsp;string&amp;nbsp;manipulation&lt;/SPAN&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;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&amp;nbsp;content&amp;nbsp;=&amp;nbsp;Encoding.UTF8.GetString(buffer); &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;replace&amp;nbsp;invalid&amp;nbsp;XML&amp;nbsp;entities&amp;nbsp;using&amp;nbsp;regular&amp;nbsp;expression&lt;/SPAN&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;&amp;nbsp;content&amp;nbsp;=&amp;nbsp;replaceRegEx.Replace(content,&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"&amp;amp;#32;"&lt;/SPAN&gt;); &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;convert&amp;nbsp;back&amp;nbsp;to&amp;nbsp;byte&amp;nbsp;buffer&lt;/SPAN&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;&amp;nbsp;buffer&amp;nbsp;=&amp;nbsp;Encoding.UTF8.GetBytes(content); &lt;BR&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;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;//&amp;nbsp;stream&amp;nbsp;byte&amp;nbsp;buffer&amp;nbsp;to&amp;nbsp;the&amp;nbsp;client&amp;nbsp;app&lt;/SPAN&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;&amp;nbsp;oldStream.Write(buffer,&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;,&amp;nbsp;buffer.Length); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;} &lt;/P&gt;
&lt;P mce_keep="true"&gt;The above code should be compiled into a C# class library project and signed with a strong name to allow placing the DLL into a GAC.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Afterwards the SoapExtension can be registered in the web.config of the affected web service. For SharePoint webservices this would be the web.config in the following directory:&lt;/P&gt;
&lt;P mce_keep="true"&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI\&lt;/P&gt;
&lt;P mce_keep="true"&gt;The following entry needs to be added to the web.config:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&amp;gt; &lt;BR&gt;&amp;lt;configuration&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;system.web&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;webServices&amp;gt;&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;&lt;SPAN style="COLOR: red"&gt;&amp;lt;soapExtensionTypes&amp;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add&amp;nbsp;type=&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;"StefanG.SoapExtensions.XmlCleanupSoapExtension, XmlCleanupSoapExtension, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0e15300fe8a7b210" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;priority=&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;"1" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;group=&lt;/SPAN&gt;&lt;SPAN style="COLOR: maroon"&gt;"0"&lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;&amp;nbsp;/&amp;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;&amp;nbsp;&amp;lt;/soapExtensionTypes&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;...&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/webServices&amp;gt; &lt;BR&gt;...&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/system.web&amp;gt; &lt;BR&gt;...&lt;BR&gt;&amp;lt;/configuration&amp;gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Afterwards all responses from webservice methods in the affected web application will automatically be cleaned up.&lt;/P&gt;
&lt;P mce_keep="true"&gt;The complete source code can also be downloaded from here: &lt;A href="http://code.msdn.microsoft.com/XmlCleanupSoapExtens"&gt;http://code.msdn.microsoft.com/XmlCleanupSoapExtens&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3277102" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/Coding+Tips/default.aspx">Coding Tips</category><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/MOSS+2007+_2F00_+WSS+3.0/default.aspx">MOSS 2007 / WSS 3.0</category></item><item><title>Interesting content deployment problem when doing partial deployment - hyperlinks in the User Information List</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/08/19/interesting-content-deployment-problem-when-doing-partial-deployment-hyperlinks-in-the-user-information-list.aspx</link><pubDate>Wed, 19 Aug 2009 17:24:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3275000</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3275000.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3275000</wfw:commentRss><description>&lt;P&gt;A &lt;A&gt;colleague&lt;/A&gt; (&lt;A href="http://blogs.technet.com/patrick_heyde" mce_href="http://blogs.technet.com/patrick_heyde"&gt;Patrick Heyde&lt;/A&gt;) recently contacted me on an interesting content deployment issue he had. &lt;/P&gt;
&lt;P&gt;His customer configured a content deployment job that only should deploy only the public part of his site collection. E.g. consider this setup:&lt;/P&gt;
&lt;P&gt;&lt;TT&gt;root&lt;BR&gt;&amp;nbsp; +-- private&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +--&amp;nbsp;subsites&lt;BR&gt;&amp;nbsp; +-- public&lt;BR&gt;&lt;/TT&gt;&lt;TT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; +--&amp;nbsp;subsites&amp;nbsp;&lt;/TT&gt;&lt;/P&gt;
&lt;P&gt;The job was configured to export the root site (you cannot prevent this) and the public subsite including all subsites. &lt;/P&gt;
&lt;P&gt;During import the deployment job failed due to the fact that it tried to import content that belongs to the subsite of the private site which had not been deployed. First we&amp;nbsp;thought about the common issue that the customer had links from the public content to the private content which would explain why the private content was exported as dependency. But the customer ensured us that this does not happen.&lt;/P&gt;
&lt;P&gt;After some research we found the problem. And indeed the customer did not have any links from content in the public site to the private tree.&lt;/P&gt;
&lt;P&gt;What was causing the problem was that the customer has created some sharepoint group to administrate content as in the private site. In the "About me" field he entered a comment like "this rights group has authoring rights on &lt;A href="http://servername/private/subsite"&gt;http://servername/private/subsite&lt;/A&gt;".&lt;/P&gt;
&lt;P&gt;Unfortunatelly the "About Me"&amp;nbsp;field which resembles internally as Notes field is a RichText field which allows hyperlinks. That caused a forward link to be created for the list item related to this sharepoint group in the User Information List.&lt;/P&gt;
&lt;P&gt;This list resides in the root of the website and will be exported and deployed as well. That on the other hand causes all dependencies of the items in the user information list to be deployed - including the /private/subsite site.&lt;/P&gt;
&lt;P&gt;To resolve the problem it was necessary to edit all affected sharepoint groups and remove hyper links to the parts of the site which should not always be exported.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3275000" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/MOSS+2007+_2F00_+WSS+3.0/default.aspx">MOSS 2007 / WSS 3.0</category><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>Updated Version of SharePoint SP2 is now available which contains a fix for the Trial issue</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/08/01/updated-version-of-sharepoint-sp2-is-now-available-which-contains-a-fix-for-the-trial-issue.aspx</link><pubDate>Sat, 01 Aug 2009 17:00:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3269960</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3269960.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3269960</wfw:commentRss><description>&lt;P&gt;As discussed &lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/05/22/attention-important-information-on-service-pack-2.aspx" mce_href="http://blogs.technet.com/stefan_gossner/archive/2009/05/22/attention-important-information-on-service-pack-2.aspx"&gt;earlier&lt;/A&gt; the original SP2 release reverted the MOSS license to trial during installation. Microsoft now released an updated version of SP2 which does not have this problem.&lt;/P&gt;
&lt;P&gt;More details can be found on the &lt;A href="http://blogs.msdn.com/sharepoint/archive/2009/06/25/service-pack-2-update.aspx" mce_href="http://blogs.msdn.com/sharepoint/archive/2009/06/25/service-pack-2-update.aspx"&gt;SharePoint Team blog&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;For those of you who already installed SP2 and would like to get the separate fix for this issue can download it from here: &lt;A href="http://support.microsoft.com/kb/971620"&gt;http://support.microsoft.com/kb/971620&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3269960" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/MOSS+2007+_2F00_+WSS+3.0/default.aspx">MOSS 2007 / WSS 3.0</category></item><item><title>Sneak Peek of SharePoint 2010 is now available</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/07/13/sneak-peek-of-sharepoint-2010-is-now-available.aspx</link><pubDate>Mon, 13 Jul 2009 19:03:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3263469</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3263469.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3263469</wfw:commentRss><description>&lt;P&gt;Microsoft has just made a Sneak Peek of SharePoint 2010 available on &lt;A href="http://sharepoint.microsoft.com/"&gt;http://sharepoint.microsoft.com&lt;/A&gt;:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;2010 Sneak Peek Home: &lt;A href="http://sharepoint.microsoft.com/2010/Sneak_Peek/Pages/default.aspx"&gt;http://sharepoint.microsoft.com/2010/Sneak_Peek/Pages/default.aspx&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;2010 Sneak Peek Overview Video: &lt;A href="http://sharepoint.microsoft.com/2010/Sneak_Peek/Pages/Overview-Video.aspx"&gt;http://sharepoint.microsoft.com/2010/Sneak_Peek/Pages/Overview-Video.aspx&lt;/A&gt;&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;2010 Sneak Peek IT Pro Video: &lt;A href="http://sharepoint.microsoft.com/2010/Sneak_Peek/Pages/IT-Pro-video.aspx"&gt;http://sharepoint.microsoft.com/2010/Sneak_Peek/Pages/IT-Pro-video.aspx&lt;/A&gt;&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;2010 Sneak Peek Developer Video: &lt;A href="http://sharepoint.microsoft.com/2010/Sneak_Peek/Pages/Developer-video.aspx"&gt;http://sharepoint.microsoft.com/2010/Sneak_Peek/Pages/Developer-video.aspx&lt;/A&gt;&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;2010 Sneak Peek Get Ready: &lt;A href="http://sharepoint.microsoft.com/2010/Sneak_Peek/Pages/Get_Ready.aspx"&gt;http://sharepoint.microsoft.com/2010/Sneak_Peek/Pages/Get_Ready.aspx&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;2010 Sneak Peek FAQ: &lt;A href="http://sharepoint.microsoft.com/2010/Sneak_Peek/Pages/FAQ.aspx"&gt;http://sharepoint.microsoft.com/2010/Sneak_Peek/Pages/FAQ.aspx&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;More details are available on the SharePoint Team blog:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/sharepoint/archive/2009/07/13/announcing-sharepoint-2010-technical-preview.aspx"&gt;http://blogs.msdn.com/sharepoint/archive/2009/07/13/announcing-sharepoint-2010-technical-preview.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3263469" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/SharePoint+2010/default.aspx">SharePoint 2010</category></item><item><title>The June cumulative update for WSS V3 and MOSS 2007 has been released yesterday</title><link>http://blogs.technet.com/stefan_gossner/archive/2009/07/01/the-june-cumulative-update-for-wss-v3-and-moss-2007-has-been-released-yesterday.aspx</link><pubDate>Wed, 01 Jul 2009 10:39:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3260267</guid><dc:creator>Stefan_Gossner</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/stefan_gossner/comments/3260267.aspx</comments><wfw:commentRss>http://blogs.technet.com/stefan_gossner/commentrss.aspx?PostID=3260267</wfw:commentRss><description>&lt;P&gt;As discussed by the &lt;A href="http://blogs.technet.com/office_sustained_engineering/archive/2008/07/01/office-hotfixes-to-be-delivered-on-a-defined-schedule-in-the-form-of-cumulative-updates.aspx" mce_href="http://blogs.technet.com/office_sustained_engineering/archive/2008/07/01/office-hotfixes-to-be-delivered-on-a-defined-schedule-in-the-form-of-cumulative-updates.aspx"&gt;Office Sustained Engineering group&lt;/A&gt; cumulative updates for all Office Products including WSS 3.0 and SharePoint 2007 will be released every second month.&lt;/P&gt;
&lt;P&gt;Yesterday we released the so called June Cumulative Update. The so called "Uber" packages for MOSS will be released in a couple of days. Currently you can download the individual global and localized fixes for your specific language packs.&lt;/P&gt;
&lt;P&gt;This is the second &lt;STRONG&gt;Post-SP2 hotfix&lt;/STRONG&gt;! That means it is highly recommended to install &lt;A href="http://blogs.technet.com/stefan_gossner/archive/2009/04/28/moss-2007-and-wss-3-0-service-pack-2-has-been-released.aspx" mce_href="http://blogs.technet.com/stefan_gossner/archive/2009/04/28/moss-2007-and-wss-3-0-service-pack-2-has-been-released.aspx"&gt;Service Pack 2&lt;/A&gt; before installing the&amp;nbsp;June CU.&lt;/P&gt;
&lt;P&gt;As usual you can find the details about the fixes and the download locations on the blog my colleague Joerg Sinemus published:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/joerg_sinemus/archive/2009/07/01/moss-and-wss-june-cu.aspx"&gt;http://blogs.msdn.com/joerg_sinemus/archive/2009/07/01/moss-and-wss-june-cu.aspx&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3260267" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/MOSS+2007+_2F00_+WSS+3.0/default.aspx">MOSS 2007 / WSS 3.0</category><category domain="http://blogs.technet.com/stefan_gossner/archive/tags/Hotfix+Info/default.aspx">Hotfix Info</category></item></channel></rss>