<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Rodney Viana's (MSFT) Blog</title><link>http://blogs.msdn.com/b/rodneyviana/</link><description>Post on Sharepoint, IIS and C#</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Adapting to the caller namespace soap 1.1 request in classic asmx via Filter</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2012/11/27/adapting-to-the-caller-namespace-soap-1-1-request-in-classic-asmx-via-filter.aspx</link><pubDate>Wed, 28 Nov 2012 02:57:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10372479</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=10372479</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=10372479</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2012/11/27/adapting-to-the-caller-namespace-soap-1-1-request-in-classic-asmx-via-filter.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I had received a somewhat odd request to produce a proof-of-concept application to enable a classic asmx Web Services to accept any namespace in the soap 1.1 request and to return the same namespace to the caller. To understand the problem let us review the soap 1.1 requirement on what it matters. The Soap Action comes as an Http header SoapAction containing the namespace and the operation. In the body the operation is one of the elements in the soap body with the namespace of the service.&lt;/p&gt;  &lt;p&gt;This is the sample web services used to test the proof of concept: &lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="731" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="729"&gt;&lt;code&gt;           &lt;p&gt;[&lt;font color="#008080"&gt;WebService&lt;/font&gt;(Namespace = &amp;quot;&lt;font color="#0000ff"&gt;http://MyNameSpace.com&lt;/font&gt;&amp;quot;)]               &lt;br /&gt; [&lt;font color="#008080"&gt;WebServiceBinding&lt;/font&gt;(ConformsTo = &lt;font color="#008080"&gt;WsiProfiles&lt;/font&gt;.BasicProfile1_1)]&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;public class&lt;/strong&gt;&lt;/font&gt; &lt;font color="#008080"&gt;NoNameSpace&lt;/font&gt; : System.Web.Services.WebService { &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/font&gt; NoNameSpace () {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;font color="#008080"&gt;WebMethod&lt;/font&gt;]               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&lt;strong&gt;public string&lt;/strong&gt;&lt;/font&gt; HelloWorld(&lt;font color="#0000ff"&gt;&lt;strong&gt;string&lt;/strong&gt;&lt;/font&gt; Name) {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/font&gt; &lt;font color="#008080"&gt;String&lt;/font&gt;.Format(&amp;quot;Hello {0}&amp;quot;, Name);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;         &lt;/code&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;Table 1&lt;/strong&gt; – Code for the service using namespace &lt;font color="#0000ff"&gt;http://MyNameSpace.com&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;That is a correct soap 1.1 request. Notice that the soap action is the namespace and operation and the HelloWorld element uses the namespace:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="762" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="760"&gt;&lt;code&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;01:&lt;/font&gt;&lt;/strong&gt;&lt;em&gt;POST /NoNameSpace.asmx HTTP/1.1&lt;/em&gt;&lt;/font&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;02:&lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;Host:&lt;/strong&gt; localhost             &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;03:&lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;Content-Type:&lt;/strong&gt; text/xml;             &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;04:&lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;charset&lt;/strong&gt;=utf-8             &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;05:&lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;Content-Length:&lt;/strong&gt; length             &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;06:&lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;SOAPAction:&lt;/strong&gt; &amp;quot;&lt;font color="#0000ff"&gt;&lt;strong&gt;http://MyNameSpace.com/HelloWorld&lt;/strong&gt;&lt;/font&gt;&amp;quot;             &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;07:&lt;/font&gt;&lt;/strong&gt;             &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;08:&lt;/font&gt;&lt;/strong&gt;&lt;font color="#0000ff"&gt;&amp;lt;?xml &lt;font color="#ff0000"&gt;version&lt;/font&gt;=&amp;quot;&lt;strong&gt;1.0&lt;/strong&gt;&amp;quot; &lt;font color="#ff0000"&gt;encoding&lt;/font&gt;=&amp;quot;&lt;strong&gt;utf-8&lt;/strong&gt;&amp;quot;?&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;09:&lt;/font&gt;&lt;/strong&gt;&amp;lt;&lt;font color="#ff0000"&gt;soap:Envelope                &lt;br /&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; xmlns:xsi&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/strong&gt;&amp;quot;               &lt;br /&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; xmlns:xsd&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://www.w3.org/2001/XMLSchema&lt;/strong&gt;&amp;quot;               &lt;br /&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; xmlns:soap&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://schemas.xmlsoap.org/soap/envelope/&lt;/strong&gt;&amp;quot;&amp;gt;               &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;10:&lt;/font&gt;&lt;/strong&gt;&amp;lt;&lt;font color="#ff0000"&gt;soap:Body&lt;/font&gt;&amp;gt;               &lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;11:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;HelloWorld &lt;strong&gt;xmlns&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://MyNameSpace.com&lt;/strong&gt;&amp;quot;&amp;gt;               &lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;12:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;Name&lt;/font&gt;&amp;gt;&lt;font color="#000000"&gt;&lt;strong&gt;string&lt;/strong&gt;&lt;/font&gt;&amp;lt;&lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;Name&lt;/font&gt;&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;13:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;HelloWorld&lt;/font&gt;&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;14:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;soap:Body&lt;/font&gt;&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;15:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&amp;lt;&lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;soap:Envelope&lt;/font&gt;&amp;gt;&lt;/font&gt; &lt;/code&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;Table 2&lt;/strong&gt; – Typical raw soap request with headers and body&lt;/p&gt;  &lt;p&gt;The response will include the HellowWorldResponse element with the namespace used by the service.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="762" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="760"&gt;&lt;code&gt;&lt;strong&gt;01:&lt;/strong&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;em&gt;HTTP/1.1 200 OK&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;             &lt;br /&gt;&lt;strong&gt;02:Content-Type:&lt;/strong&gt; text/xml;             &lt;br /&gt;&lt;strong&gt;03:&lt;/strong&gt;&lt;strong&gt;charset&lt;/strong&gt;=utf-8             &lt;br /&gt;&lt;strong&gt;04:&lt;/strong&gt;&lt;strong&gt;Content-Length:&lt;/strong&gt; length             &lt;br /&gt;&lt;strong&gt;05:&lt;/strong&gt;             &lt;br /&gt;&lt;strong&gt;06:&lt;/strong&gt;&lt;font color="#0000ff"&gt;&amp;lt;?xml &lt;font color="#ff0000"&gt;version&lt;/font&gt;=&amp;quot;&lt;strong&gt;1.0&lt;/strong&gt;&amp;quot; &lt;font color="#ff0000"&gt;encoding&lt;/font&gt;=&amp;quot;&lt;strong&gt;utf-8&lt;/strong&gt;&amp;quot;?&amp;gt;               &lt;br /&gt;&lt;font color="#000000"&gt;&lt;strong&gt;07:&lt;/strong&gt; &lt;/font&gt;              &lt;br /&gt;&lt;font color="#000000"&gt;&lt;strong&gt;08:&lt;/strong&gt;&lt;/font&gt;&amp;lt;&lt;font color="#ff0000"&gt;soap:Envelope                &lt;br /&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlns:xsi&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/strong&gt;&amp;quot;&amp;#160; &lt;font color="#ff0000"&gt;&lt;strong&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlns:xsd&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://www.w3.org/2001/XMLSchema&lt;/strong&gt;&amp;quot;               &lt;br /&gt;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;&lt;strong&gt;&amp;#160; xmlns:soap&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://schemas.xmlsoap.org/soap/envelope/&lt;/strong&gt;&amp;quot;&amp;gt;               &lt;br /&gt;&lt;font color="#000000"&gt;&lt;strong&gt;09:&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;soap:Body&lt;/font&gt;&amp;gt;               &lt;br /&gt;&lt;font color="#000000"&gt;&lt;strong&gt;10:&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;HelloWorldResponse &lt;strong&gt;xmlns&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://MyNameSpace.com&lt;/strong&gt;&amp;quot;&amp;gt;               &lt;br /&gt;&lt;font color="#000000"&gt;&lt;strong&gt;11:&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;HelloWorldResult&lt;/font&gt;&amp;gt;&lt;font color="#000000"&gt;&lt;strong&gt;string&lt;/strong&gt;&lt;/font&gt;&amp;lt;&lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;HelloWorldResult&lt;/font&gt;&amp;gt;&amp;#160; &lt;br /&gt;&lt;strong&gt;11:&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;font color="#ff0000"&gt;HelloWorldResponse&lt;/font&gt;&amp;gt;               &lt;br /&gt;&lt;font color="#000000"&gt;&lt;strong&gt;12:&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160; &amp;lt;/&lt;font color="#ff0000"&gt;soap:Body&lt;/font&gt;&amp;gt;               &lt;br /&gt;&lt;font color="#000000"&gt;&lt;strong&gt;13:&lt;/strong&gt;&lt;/font&gt;&amp;lt;/&lt;font color="#ff0000"&gt;soap:Envelope&lt;/font&gt;&amp;gt;&lt;/font&gt; &lt;/code&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt; Table 3&lt;/strong&gt; – Raw soap response from request in Table 2&lt;/p&gt;  &lt;p&gt;In customer’s scenario they had some clients consuming their web services using some soap tool he could not identify that always sent the target URL as the namespace. Though they could change the namespace to always match their final production environment URL, they do not want to have to change the namespace if they decide to use another URL in production.&lt;/p&gt;  &lt;p&gt;I strongly advised them to use the target namespace solution as it will the solution causing less overhead. They requirements were very clear though. I asked them some time to develop a proof-of-concept filter to:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Intercept the original call and verify the SoapAction header to verify if the namespace matches the expected web services namespace (see &lt;strong&gt;Table 2&lt;/strong&gt; row &lt;strong&gt;6&lt;/strong&gt;)&lt;/li&gt;    &lt;li&gt;If the namespace matches, nothing else to do, just process the request without the overhead of filtering&lt;/li&gt;    &lt;li&gt;If the namespace does not match, separate the incoming namespace and operation, save values for later use&lt;/li&gt;    &lt;li&gt;Replace the SoapAction header to include the web services expected namespace and operation (see &lt;strong&gt;Table 2&lt;/strong&gt; row &lt;strong&gt;6&lt;/strong&gt;)&lt;/li&gt;    &lt;li&gt;Add a request stream filter to replace the namespace of the operation element to match the expected namespace (see &lt;strong&gt;Table 2&lt;/strong&gt; row &lt;strong&gt;11&lt;/strong&gt;)&lt;/li&gt;    &lt;li&gt;Add a response stream filter to replace the response namespace to match the original incoming namespace as it is what the consumer client is expecting&lt;/li&gt;    &lt;li&gt;The response element is by default the soap action + Response (see &lt;strong&gt;Table 3&lt;/strong&gt; row &lt;strong&gt;10&lt;/strong&gt;)&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For example, this is a request in customer’s environment:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="762" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="760"&gt;&lt;code&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;01:&lt;/font&gt;&lt;/strong&gt;&lt;em&gt;POST /NoNameSpace.asmx HTTP/1.1&lt;/em&gt;&lt;/font&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;02:&lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;Host:&lt;/strong&gt; localhost             &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;03:&lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;Content-Type:&lt;/strong&gt; text/xml;             &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;04:&lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;charset&lt;/strong&gt;=utf-8             &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;05:&lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;Content-Length:&lt;/strong&gt; length             &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;06:&lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;SOAPAction:&lt;/strong&gt; &amp;quot;&lt;font color="#0000ff"&gt;&lt;strong&gt;http://10.10.8.5:9000/HelloWorld&lt;/strong&gt;&lt;/font&gt;&amp;quot;             &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;07:&lt;/font&gt;&lt;/strong&gt;             &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;08:&lt;/font&gt;&lt;/strong&gt;&lt;font color="#0000ff"&gt;&amp;lt;?xml &lt;font color="#ff0000"&gt;version&lt;/font&gt;=&amp;quot;&lt;strong&gt;1.0&lt;/strong&gt;&amp;quot; &lt;font color="#ff0000"&gt;encoding&lt;/font&gt;=&amp;quot;&lt;strong&gt;utf-8&lt;/strong&gt;&amp;quot;?&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;09:&lt;/font&gt;&lt;/strong&gt;&amp;lt;&lt;font color="#ff0000"&gt;soap:Envelope                &lt;br /&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; xmlns:xsi&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/strong&gt;&amp;quot;               &lt;br /&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; xmlns:xsd&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://www.w3.org/2001/XMLSchema&lt;/strong&gt;&amp;quot;               &lt;br /&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; xmlns:soap&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://schemas.xmlsoap.org/soap/envelope/&lt;/strong&gt;&amp;quot;&amp;gt;               &lt;br /&gt;&lt;strong&gt;&lt;font color="#000000"&gt;10:&lt;/font&gt;&lt;/strong&gt;&amp;lt;&lt;font color="#ff0000"&gt;soap:Body&lt;/font&gt;&amp;gt;               &lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;11:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;HelloWorld &lt;strong&gt;xmlns&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://10.10.8.5:9000&lt;/strong&gt;&amp;quot;&amp;gt;               &lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;12:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;Name&lt;/font&gt;&amp;gt;&lt;font color="#000000"&gt;&lt;strong&gt;string&lt;/strong&gt;&lt;/font&gt;&amp;lt;&lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;Name&lt;/font&gt;&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;13:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;HelloWorld&lt;/font&gt;&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;14:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;soap:Body&lt;/font&gt;&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;15:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&amp;lt;&lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;soap:Envelope&lt;/font&gt;&amp;gt;&lt;/font&gt; &lt;/code&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;Table 4&lt;/strong&gt; – Request with invalid namespace in both SoapAction header and element HelloWorld in the soap body&lt;/p&gt;  &lt;p&gt;Please notice that both soap action (row 6) and namespace (row 11) come as the URL used to access the service, not the real namespace specified in the service wsdl. The input filter will bring the request in &lt;strong&gt;Table 4&lt;/strong&gt; to the same state as request in &lt;strong&gt;Table 2&lt;/strong&gt; before reaching the web service.&lt;/p&gt;  &lt;p&gt;The response from the web service will be as &lt;strong&gt;Table 3&lt;/strong&gt; including the actual namespace not the namespace sent in the request. The output filter will transform the correct namespace into the incoming namespace as shown below:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="762" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="760"&gt;&lt;code&gt;&lt;strong&gt;01:&lt;/strong&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;em&gt;HTTP/1.1 200 OK&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;             &lt;br /&gt;&lt;strong&gt;02:Content-Type:&lt;/strong&gt; text/xml;             &lt;br /&gt;&lt;strong&gt;03:&lt;/strong&gt;&lt;strong&gt;charset&lt;/strong&gt;=utf-8             &lt;br /&gt;&lt;strong&gt;04:&lt;/strong&gt;&lt;strong&gt;Content-Length:&lt;/strong&gt; length             &lt;br /&gt;&lt;strong&gt;05:&lt;/strong&gt;             &lt;br /&gt;&lt;strong&gt;06:&lt;/strong&gt;&lt;font color="#0000ff"&gt;&amp;lt;?xml &lt;font color="#ff0000"&gt;version&lt;/font&gt;=&amp;quot;&lt;strong&gt;1.0&lt;/strong&gt;&amp;quot; &lt;font color="#ff0000"&gt;encoding&lt;/font&gt;=&amp;quot;&lt;strong&gt;utf-8&lt;/strong&gt;&amp;quot;?&amp;gt;               &lt;br /&gt;&lt;font color="#000000"&gt;&lt;strong&gt;07:&lt;/strong&gt; &lt;/font&gt;              &lt;br /&gt;&lt;font color="#000000"&gt;&lt;strong&gt;08:&lt;/strong&gt;&lt;/font&gt;&amp;lt;&lt;font color="#ff0000"&gt;soap:Envelope                &lt;br /&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlns:xsi&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/strong&gt;&amp;quot;&amp;#160; &lt;font color="#ff0000"&gt;&lt;strong&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlns:xsd&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://www.w3.org/2001/XMLSchema&lt;/strong&gt;&amp;quot;               &lt;br /&gt;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;&lt;strong&gt;&amp;#160; xmlns:soap&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://schemas.xmlsoap.org/soap/envelope/&lt;/strong&gt;&amp;quot;&amp;gt;               &lt;br /&gt;&lt;font color="#000000"&gt;&lt;strong&gt;09:&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;soap:Body&lt;/font&gt;&amp;gt;               &lt;br /&gt;&lt;font color="#000000"&gt;&lt;strong&gt;10:&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;HelloWorldResponse &lt;strong&gt;xmlns&lt;/strong&gt;&lt;/font&gt;=&amp;quot;&lt;strong&gt;http://10.10.8.5:9000&lt;/strong&gt;&amp;quot;&amp;gt;               &lt;br /&gt;&lt;font color="#000000"&gt;&lt;strong&gt;11:&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;HelloWorldResult&lt;/font&gt;&amp;gt;&lt;font color="#000000"&gt;&lt;strong&gt;string&lt;/strong&gt;&lt;/font&gt;&amp;lt;&lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;/&lt;/font&gt;HelloWorldResult&lt;/font&gt;&amp;gt;&amp;#160; &lt;br /&gt;&lt;strong&gt;11:&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;font color="#ff0000"&gt;HelloWorldResponse&lt;/font&gt;&amp;gt;               &lt;br /&gt;&lt;font color="#000000"&gt;&lt;strong&gt;12:&lt;/strong&gt;&lt;/font&gt;&amp;#160;&amp;#160; &amp;lt;/&lt;font color="#ff0000"&gt;soap:Body&lt;/font&gt;&amp;gt;               &lt;br /&gt;&lt;font color="#000000"&gt;&lt;strong&gt;13:&lt;/strong&gt;&lt;/font&gt;&amp;lt;/&lt;font color="#ff0000"&gt;soap:Envelope&lt;/font&gt;&amp;gt;&lt;/font&gt; &lt;/code&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt; Table 5&lt;/strong&gt; – Raw soap response after adjusting namespace to match incoming namespace request (see row 10)&lt;/p&gt;  &lt;p&gt;The best way to implement the logic, as it is classic asmx is in the Global.asax. I have just added a Global.asax to the project and changed the code inside to the listing below:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="726" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="724"&gt;&lt;code&gt;&lt;font color="#0000ff"&gt;&amp;lt;%@ &lt;font color="#ff0000"&gt;&lt;strong&gt;Application&lt;/strong&gt; Language&lt;/font&gt;=&amp;quot;C#&amp;quot; %&amp;gt;               &lt;br /&gt;&amp;lt;%@ &lt;font color="#ff0000"&gt;&lt;strong&gt;Import&lt;/strong&gt; Namespace&lt;/font&gt;=&amp;quot;System.Text&amp;quot; %&amp;gt;               &lt;br /&gt;&amp;lt;%@ &lt;font color="#ff0000"&gt;&lt;strong&gt;Import&lt;/strong&gt; Namespace&lt;/font&gt;=&amp;quot;System.IO&amp;quot; %&amp;gt;               &lt;br /&gt;&amp;lt;%@ &lt;font color="#ff0000"&gt;&lt;strong&gt;Import&lt;/strong&gt; Namespace&lt;/font&gt;=&amp;quot;System.Xml&amp;quot; %&amp;gt; &lt;/font&gt;            &lt;p&gt;&lt;/p&gt;           &lt;font color="#0000ff"&gt;&lt;/font&gt;            &lt;p&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;font color="#ff0000"&gt;&lt;strong&gt;script&lt;/strong&gt; runat&lt;/font&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/font&gt; &lt;/p&gt;            &lt;p&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160; //The code samples are provided AS IS without warranty of any kind.                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Microsoft disclaims all implied warranties including, without limitation,                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // any implied warranties of merchantability or of fitness for a particular purpose. &lt;/font&gt;&lt;/p&gt;           &lt;font color="#008000"&gt;&lt;/font&gt;            &lt;p&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160; /*&lt;/font&gt;&lt;/p&gt;           &lt;font color="#008000"&gt;&lt;/font&gt;            &lt;p&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160; The entire risk arising out of the use or performance of the sample scripts and documentation remains with you.                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; In no event shall Microsoft, its authors, or anyone else involved in the creation, production, or delivery of the scripts                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption,                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; loss of business information, or other pecuniary loss) arising out of the use of or inability to use the sample scripts                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; or documentation, even if Microsoft has been advised of the possibility of such damages.&lt;/font&gt;&lt;/p&gt;           &lt;font color="#008000"&gt;&lt;/font&gt;            &lt;p&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160; */&amp;#160; &lt;/font&gt;&lt;/p&gt;           &lt;font color="#008000"&gt;&lt;/font&gt;            &lt;p&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160; // Change this &lt;font color="#0000ff"&gt;string&lt;/font&gt; to the &lt;font color="#0000ff"&gt;string&lt;/font&gt; used in your web services namespace. Do not include &amp;quot;/&amp;quot; at the end.&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;const string&lt;/font&gt; NAMESPACE = &lt;font color="#ff0000"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;http://MyNameSpace.com&lt;/font&gt;&lt;font color="#ff0000"&gt;&amp;quot;&lt;/font&gt;;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;void&lt;/font&gt; Application_Start(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;font color="#0000ff"&gt;EventArgs&lt;/font&gt; e)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Code that runs on application startup&lt;/font&gt; &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; }              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;void&lt;/font&gt; Application_End(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;font color="#00aacc"&gt;EventArgs&lt;/font&gt; e)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160; Code that runs on application shutdown&lt;/font&gt; &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;void&lt;/font&gt; Application_BeginRequest(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;font color="#00aacc"&gt;EventArgs&lt;/font&gt; e)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#00aacc"&gt;HttpContext&lt;/font&gt; ctx = HttpContext.Current;               &lt;br /&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Soap Action comes in the Http Header SoapAtion                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Ex.: SoapAction: &amp;quot;&lt;/font&gt;&lt;a href="http://MyNameSpace.com/HelloWorld&amp;quot;"&gt;&lt;font color="#008000"&gt;http://MyNameSpace.com/HelloWorld&amp;quot;&lt;/font&gt;&lt;/a&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;string&lt;/font&gt; tempAction = ctx.Request.Headers[&amp;quot;SoapAction&amp;quot;];               &lt;br /&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Soap action is normally surrounded by quotes so we are removing for this operation temporary string. We are not changing SoapAction yet&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;string&lt;/font&gt; soapAction = &lt;font color="#00aacc"&gt;String&lt;/font&gt; .IsNullOrEmpty(tempAction) ? &lt;font color="#0000ff"&gt;null&lt;/font&gt; : tempAction.Replace(&amp;quot;\&amp;quot;&amp;quot;, &amp;quot;&amp;quot;); &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // If there is no Soap Action in the call and the namespace is coming as expected, do not bother to filter anything              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!&lt;font color="#00aacc"&gt;String&lt;/font&gt; .IsNullOrEmpty(soapAction) &amp;amp;&amp;amp; !soapAction.StartsWith(NAMESPACE))               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // In the end &amp;quot;ns&amp;quot; will contain the namespace as coming from the caller                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // &amp;quot;operation&amp;quot; will contain only the operation without the namespace                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // For example: SoapAction: &amp;quot;&lt;/font&gt;&lt;a href="http://roguenamespace.local/HelloWorld&amp;quot;"&gt;&lt;font color="#008000"&gt;http://roguenamespace.local/HelloWorld&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font color="#008000"&gt;                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160; will be split so that: ns=&lt;/font&gt;&lt;a href="http://roguenamespace.local"&gt;&lt;font color="#008000"&gt;http://roguenamespace.local&lt;/font&gt;&lt;/a&gt;&lt;font color="#008000"&gt; and operation=HelloWord                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // If the namespace is not matching the expected namespace and the operation is not matching the right operation                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160; the webservices will not work.                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // For the scenario above, the expected Class and Method definition are:                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160; [WebService(Namespace = &amp;quot;&lt;/font&gt;&lt;a href="http://roguenamespace.local&amp;quot;)]"&gt;&lt;font color="#008000"&gt;http://roguenamespace.local&amp;quot;)]&lt;/font&gt;&lt;/a&gt;&lt;font color="#008000"&gt;                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160; [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160; public class NoNameSpace : System.Web.Services.WebService                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160; (...)                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [WebMethod]                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string HelloWorld(string Name)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;string&lt;/font&gt; ns=NAMESPACE;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;string&lt;/font&gt; operation=soapAction; &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;int&lt;/font&gt; i=soapAction.LastIndexOf('/');               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(i&amp;gt;=0 &amp;amp;&amp;amp; i&amp;lt; soapAction.Length)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;try&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; operation = soapAction.Substring(i+1);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ns = soapAction.Substring(0,i);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //               &lt;br /&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // We verified that the incoming namespace is not matching the expected namespace before,                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160; now we are going to adapt the SoapAction header to include the expected namespace and the intended operation                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ctx.Request.Headers[&amp;quot;SoapAction&amp;quot;] = &lt;font color="#00aacc"&gt;String&lt;/font&gt;.Format(&amp;quot;\&amp;quot;{0}/{1}\&amp;quot;&amp;quot;, NAMESPACE, operation);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;catch&lt;/font&gt; (&lt;font color="#00aacc"&gt;Exception&lt;/font&gt; ex)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ctx.Request.Headers[&amp;quot;SoapAction&amp;quot;] = &lt;font color="#00aacc"&gt;String&lt;/font&gt;.Format(&amp;quot;{0}&amp;lt;br /&amp;gt;{1}&amp;quot;, ex.Message, ex.StackTrace);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else               &lt;br /&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Since we are sure by the inner if that SoapAction is not empty or null you can assign directly.                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // This code only runs if there is a SoapAction without namespace - SoapAction: &amp;quot;HelloWorld&amp;quot;&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; operation = ctx.Request.Headers[&amp;quot;SoapAction&amp;quot;] = &lt;font color="#00aacc"&gt;String&lt;/font&gt;.Format(&amp;quot;\&amp;quot;{0}/{1}\&amp;quot;&amp;quot;, NAMESPACE, operation);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }               &lt;br /&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160; Add original soap action to change the response as well                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160; This item will be included in the Http Context items and can be tested in your code later                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160; if you need to make decisions based on any of them                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ctx.Items.Add(NAMESPACE, &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#0000ff"&gt;string&lt;/font&gt;[]{ operation, ns }); &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;try&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#008000"&gt;// Now we will create a filter that will change the incoming namespace for the operation with the intended namespace (in NAMESPACE const)                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160; in the message body                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // For example:                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // This request contains the invalid namespace &lt;/font&gt;&lt;a href="http://roguenamespace.local"&gt;&lt;font color="#008000"&gt;http://roguenamespace.local&lt;/font&gt;&lt;/a&gt;&lt;font color="#008000"&gt; in soap body element HelloWorld                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160; This filter will change the xmlns attribute to match the expected namespace to the one in NAMESPACE const&lt;/font&gt;               &lt;br /&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;lt;soap:Envelope (...)&amp;quot;&amp;gt;                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160; &amp;lt;soap:Body&amp;gt;                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160; &amp;lt;HelloWorld xmlns=&amp;quot;&lt;/font&gt;&lt;a href="http://roguenamespace.local&amp;quot;"&gt;&lt;font color="#008000"&gt;http://roguenamespace.local&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font color="#008000"&gt;&amp;gt; ===&amp;gt; Will become ==&amp;gt; &amp;lt;HelloWorld xmlns=&amp;quot;&lt;/font&gt;&lt;a href="http://MyNameSpace.com&amp;quot;"&gt;&lt;font color="#008000"&gt;http://MyNameSpace.com&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font color="#008000"&gt;&amp;gt;                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Name&amp;gt;string&amp;lt;/Name&amp;gt;                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160; &amp;lt;/HelloWorld&amp;gt;                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160; &amp;lt;/soap:Body&amp;gt;                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;lt;/soap:Envelope&amp;gt;                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#00aacc"&gt;FilterNameSpace&lt;/font&gt; stream = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#00aacc"&gt;FilterNameSpace&lt;/font&gt;(ctx.Request.Filter);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; stream.SetChange(soapAction, NAMESPACE, operation, false);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ctx.Request.Filter = stream;               &lt;br /&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // We are also making sure the response will return the same rogue namespace send by the caller                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // See details in the method SetResponseFilter&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SetResponseFilter(); &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;catch &lt;/font&gt;              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ctx.Request.InputStream.Position = 0; // Reset position if error happens               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;if&lt;/font&gt; (&lt;font color="#00aacc"&gt;String&lt;/font&gt;.IsNullOrEmpty(ns))               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; { &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;else&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;void&lt;/font&gt; SetResponseFilter()               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // We will add a filter to change the correct namespace in the response to the caller rogue namespace                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // The response element, by default, is the operation name + Response.                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // In this sample the element is HelloWorldResponse                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160; The change will look like that (only the changed line):                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160; &amp;lt;HelloWorldResponse xmlns=&amp;quot;&lt;/font&gt;&lt;a href="http://MyNameSpace.com&amp;quot;"&gt;&lt;font color="#008000"&gt;http://MyNameSpace.com&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font color="#008000"&gt;&amp;gt; ===&amp;gt; Will become ===&amp;gt; &amp;lt;HelloWorldResponse xmlns=&amp;quot;&lt;/font&gt;&lt;a href="http://roguenamespace.local&amp;quot;"&gt;&lt;font color="#008000"&gt;http://roguenamespace.local&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font color="#008000"&gt;&amp;gt;&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#00aacc"&gt;HttpContext&lt;/font&gt; ctx = HttpContext.Current;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;if&lt;/font&gt; (ctx.Items.Contains(NAMESPACE))               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;string&lt;/font&gt;[] reqinfo = ctx.Items[NAMESPACE] as &lt;font color="#0000ff"&gt;string&lt;/font&gt;[];               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;if&lt;/font&gt; (reqinfo == &lt;font color="#0000ff"&gt;null&lt;/font&gt; || reqinfo.Length &amp;lt; 2) &lt;font color="#0000ff"&gt;return&lt;/font&gt;;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;string&lt;/font&gt; opResp = &lt;font color="#00aacc"&gt;String&lt;/font&gt;.Format(&amp;quot;{0}Response&amp;quot;, reqinfo[0]);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;string&lt;/font&gt; ns = reqinfo[1];               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#00aacc"&gt;FilterNameSpace&lt;/font&gt; outfilter = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#00aacc"&gt;FilterNameSpace&lt;/font&gt;(ctx.Response.Filter);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; outfilter.SetChange(NAMESPACE, ns, opResp, true); &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ctx.Response.Filter = outfilter;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;void&lt;/font&gt; Application_PostRequestHandlerExecute(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;font color="#00aacc"&gt;EventArgs&lt;/font&gt; e)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Code that runs when an unhandled error occurs&lt;/font&gt; &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;void&lt;/font&gt; Session_Start(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;font color="#00aacc"&gt;EventArgs&lt;/font&gt; e)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Code that runs when a new session is started&lt;/font&gt; &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;void&lt;/font&gt; Session_End(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;font color="#00aacc"&gt;EventArgs&lt;/font&gt; e)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Code that runs when a session ends.                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Note: The Session_End event is raised only when the sessionstate mode                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // is set to InProc in the Web.config file. If session mode is set to StateServer                 &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // or SQLServer, the event is not raised.&lt;/font&gt; &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;class&lt;/font&gt; &lt;font color="#00aacc"&gt;FilterNameSpace&lt;/font&gt; : &lt;font color="#00aacc"&gt;Stream&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; { &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;protected&lt;/font&gt; &lt;font color="#00aacc"&gt;Stream&lt;/font&gt; inputStream;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;protected&lt;/font&gt; &lt;font color="#00aacc"&gt;Stream&lt;/font&gt; sinkStream;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;protected&lt;/font&gt; &lt;font color="#0000ff"&gt;bool&lt;/font&gt; changed;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;protected&lt;/font&gt; &lt;font color="#0000ff"&gt;string&lt;/font&gt; newNameSpace;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;protected&lt;/font&gt; &lt;font color="#0000ff"&gt;string&lt;/font&gt; originalNS;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;protected&lt;/font&gt; &lt;font color="#0000ff"&gt;string&lt;/font&gt; operation;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;protected&lt;/font&gt; &lt;font color="#00aacc"&gt;StringBuilder&lt;/font&gt; strOutput;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;protected&lt;/font&gt; bool canWrite;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;public&lt;/font&gt; FilterNameSpace(&lt;font color="#00aacc"&gt;Stream&lt;/font&gt; Sink)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sinkStream = Sink;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; changed = &lt;font color="#0000ff"&gt;false&lt;/font&gt;;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;public void&lt;/font&gt; SetChange(&lt;font color="#0000ff"&gt;string&lt;/font&gt; OriginalNameSpace, &lt;font color="#0000ff"&gt;string&lt;/font&gt; NewNameSpace, &lt;font color="#0000ff"&gt;string&lt;/font&gt; Operation, bool CanWrite)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; originalNS = OriginalNameSpace;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; newNameSpace = NewNameSpace;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; operation = Operation;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; inputStream = &lt;font color="#0000ff"&gt;new&lt;/font&gt; MemoryStream();               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; canWrite = CanWrite; &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; DocumentStream()               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;if&lt;/font&gt;(changed) &lt;font color="#0000ff"&gt;return&lt;/font&gt;;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#00aacc"&gt;XmlDocument&lt;/font&gt; doc = &lt;font color="#0000ff"&gt;new&lt;/font&gt; XmlDocument();               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; inputStream.Position = 0;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;if&lt;/font&gt; (canWrite)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; doc.Load(inputStream);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;else&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; doc.Load(sinkStream);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.Xml.&lt;font color="#00aacc"&gt;XmlNodeList&lt;/font&gt; nodes = doc.GetElementsByTagName(operation);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;if&lt;/font&gt; (nodes.Count &amp;gt; 0)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;string&lt;/font&gt; prefix = nodes[0].GetPrefixOfNamespace(newNameSpace);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; nodes[0].Attributes[&amp;quot;xmlns&amp;quot;].Value = newNameSpace; &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; changed = &lt;font color="#0000ff"&gt;true&lt;/font&gt;;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; inputStream.Position = 0;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;if&lt;/font&gt; (canWrite)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; doc.Save(sinkStream);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;else&lt;/font&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; doc.Save(inputStream);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; inputStream.Position = 0;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;public override&lt;/font&gt; &lt;font color="#0000ff"&gt;bool&lt;/font&gt; CanRead               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;get&lt;/font&gt; { return &lt;font color="#0000ff"&gt;true&lt;/font&gt;; }               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;public override&lt;/font&gt; &lt;font color="#0000ff"&gt;bool&lt;/font&gt; CanSeek               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;get&lt;/font&gt; { &lt;font color="#0000ff"&gt;return&lt;/font&gt; &lt;font color="#0000ff"&gt;false&lt;/font&gt;; }               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;public override&lt;/font&gt; &lt;font color="#0000ff"&gt;bool&lt;/font&gt; CanWrite               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;get&lt;/font&gt; { &lt;font color="#0000ff"&gt;return&lt;/font&gt; &lt;font color="#0000ff"&gt;true&lt;/font&gt;; }               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;public override&lt;/font&gt; &lt;font color="#0000ff"&gt;long&lt;/font&gt; Length               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;get&lt;/font&gt; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DocumentStream();               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;return&lt;/font&gt; inputStream.Length;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;public override long&lt;/font&gt; Position               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;get&lt;/font&gt; { &lt;font color="#0000ff"&gt;return&lt;/font&gt; inputStream.Position; }               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;set&lt;/font&gt; { &lt;font color="#0000ff"&gt;throw&lt;/font&gt; &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#00aacc"&gt;NotSupportedException&lt;/font&gt;(); }               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;public override&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; Read(byte[] buffer, &lt;font color="#0000ff"&gt;int&lt;/font&gt; offset, &lt;font color="#0000ff"&gt;int&lt;/font&gt; count)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DocumentStream();               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;int&lt;/font&gt; c = (&lt;font color="#0000ff"&gt;int&lt;/font&gt;)((long)count &amp;gt; inputStream.Length ? inputStream.Length : (&lt;font color="#0000ff"&gt;long&lt;/font&gt;)count);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c=inputStream.Read(buffer, offset, count);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return c;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;public override long&lt;/font&gt; Seek(long offset, System.IO.&lt;font color="#0000ff"&gt;SeekOrigin&lt;/font&gt; direction)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;throw&lt;/font&gt; &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#00aacc"&gt;NotSupportedException&lt;/font&gt;();               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;public override&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; SetLength(long length)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;throw&lt;/font&gt; &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#00aacc"&gt;NotSupportedException&lt;/font&gt;();               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;public override&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; Close()               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; inputStream.Close();               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sinkStream.Close();               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;public override&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; Flush()               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DocumentStream();               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; inputStream.Flush();               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sinkStream.Flush();               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;public override&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; Write(byte[] buffer, &lt;font color="#0000ff"&gt;int&lt;/font&gt; offset, &lt;font color="#0000ff"&gt;int&lt;/font&gt; count)               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; inputStream.Write(buffer, offset, count);               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; }              &lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/p&gt;         &lt;/code&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;Table 6&lt;/strong&gt; – Code to accomplish the namespace substitution&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10372479" width="1" height="1"&gt;</description></item><item><title>Troubleshooting Claims to Windows NT Token Service (c2WTS) in SharePoint 2010 may be difficult if you don’t know where to start</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2011/07/19/troubleshooting-claims-to-windows-nt-token-service-c2wts-in-sharepoint-2010-may-be-difficult-if-you-don-t-know-where-to-start.aspx</link><pubDate>Wed, 20 Jul 2011 02:29:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10188064</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=10188064</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=10188064</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2011/07/19/troubleshooting-claims-to-windows-nt-token-service-c2wts-in-sharepoint-2010-may-be-difficult-if-you-don-t-know-where-to-start.aspx#comments</comments><description>&lt;p&gt;I have been writing some blogs entries (and even a Microsoft KB) about c2WTS, but the subject never exhausts. I was helping two different customers to troubleshoot issues with SharePoint Excel Services. In one of the cases the problem happened randomly and the error message was saying that the request to the external data (SQL) had failed because the request did not include a valid Kerberos header, but no reference to c2WTS in the ULS logs.&lt;/p&gt;  &lt;p&gt;The other case was that some users could access Excel Services while others could not, this time there was an error in ULS logs pointing to access denied in c2WTS. Without explaining the internals of these two cases, one can say that in both cases c2WTS was working as expected but some other factor was impairing its use with SharePoint.&lt;/p&gt;  &lt;p&gt;Before pointing at c2WTS as culprit of some SharePoint access error, look for these three tags in the ULS logs: &lt;strong&gt;&lt;em&gt;g8g7&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;fvx8&lt;/em&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;em&gt;bz7l&lt;/em&gt;&lt;/strong&gt; in Claims Authentication category (Medium).&lt;/p&gt;  &lt;p&gt;This ULS entry would look like this:&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;&lt;font face="Courier New"&gt;07/14/2011 14:33:34.03 w3wp.exe (0x1144)0x1960 SharePoint Foundation &lt;strong&gt;&lt;em&gt;Claims Authentication&lt;/em&gt;&lt;/strong&gt;&amp;#160;&lt;strong&gt;&lt;em&gt;bz7l&lt;/em&gt;&lt;/strong&gt; Medium         &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="1" face="Courier New"&gt;SPSecurityContext.WindowsIdentity: Could not retrieve a valid windows identity for NTName='CONTOSO\jdoed', UPN='jdoed@contoso.com'. UPN is required when Kerberos constrained delegation is used. Exception: System.ServiceModel.Security.SecurityAccessDeniedException: Access is denied.&amp;#160;&amp;#160;&amp;#160; Server stack trace:&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc&amp;amp; rpc)&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)&amp;#160;&amp;#160;&amp;#160; Exception rethrown      &lt;br /&gt; at [0]:&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp;amp; msgData, Int32 type)&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; at Microsoft.IdentityModel.WindowsTokenService.S4UClient.IS4UService_dup.UpnLogon(String upn, Int32 pid)&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; at Microsoft.IdentityModel.WindowsTokenService.S4UClient.&amp;lt;&amp;gt;c__DisplayClass1.&amp;lt;UpnLogon&amp;gt;b__0(IS4UService_dup channel)&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; at Microsoft.IdentityModel.WindowsTokenService.S4UClient.CallService(Func`2 contractOperation)&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; at Microsoft.SharePoint.SPSecurityContext.GetWindowsIdentity().&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;SharePoint uses c2WTS to transform a claim identity into a valid Windows Identity Token. You cannot (for now) send a request to SQL Server or other data sources passing the claim. So, for internal users in Active Directory the claim will be mapped to a Windows Identity Token and that token will be used to access the resource. Since c2WTS only requires the UPN to generate a token, by default no one can access the service. To allow access you have to edit the .config file to add the groups and users to the allowed callers section.&lt;/p&gt;  &lt;p&gt;SharePoint installs c2WTS as part of its pre-requisites as c2WTS is actually part of Windows Identity Foundation SDK. The configuration happens when you add the correspondent service in the farm. If everything is alright the service will be configured to start automatically (read my previous post on dependencies) under &lt;strong&gt;&lt;em&gt;SYSTEM\NT AUTHORITY&lt;/em&gt;&lt;/strong&gt; and will add the SharePoint local group WSS_WPG to the list of allowed groups in c2WTS. When adding SharePoint Excel Services, the domain account provided needs to be able to create Windows tokens in the c2WTS machine (the service only works with local requests) and it will be added automatically to WSS_WPG by SharePoint (you don’t have to do this). All this actions are necessary since once accessing the service you can impersonate a user by simply supplying the UPN claim. The input is the UPN string. The return is the (limited) Windows Token or an error.&lt;/p&gt;  &lt;p&gt;Testing c2WTS configuration is not possible without some code. You have to be logged (or impersonating) an account that has rights to c2WTS. I suggest the account you used for Excel Services. To test using the same method that SharePoint does, you only need to call this static class in c2WTS:&lt;/p&gt;  &lt;p&gt;WindowsIdentity wi = S4UClient.UpnLogon(&amp;quot;rviana@contoso.com&amp;quot;);&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This static method will use WCF net.pipe (only local) to communicate with the real c2WTS service (I blogged about net.pipe and real pipes in a previous post). The full test of the complete configuration is a bit more complex. I have put together a sample application to perform all tests I could remember. The App looks like:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-10-metablogapi/5618.image_5F00_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-10-metablogapi/2477.image_5F00_thumb.png" width="644" height="418" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Quick Instructions:&lt;/h3&gt;  &lt;p&gt;Start the Application as Administrator. If you want to impersonate Excel Account, change “User Login” to enable the Password field. By default the user will be the account running the application. If you want to continue with the interactive user, you will not need to enter password. For UPN you can enter any valid UPN claim (normally &lt;a href="mailto:user@domain"&gt;user@domain&lt;/a&gt;), if you want to test your own account you can choose to get UPN from logged user. If you want to impersonate another user or test if the current user can obtain tokens, please enter the UPN manually.&lt;/p&gt;  &lt;p&gt;Full Result:&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="1001"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="999"&gt;         &lt;p&gt;&lt;font size="1" face="Courier New"&gt;Testing Service c2WTS             &lt;br /&gt; +- Service c2WTS found              &lt;br /&gt; +- Service c2WTS is running              &lt;br /&gt; +- Path of service: C:\Program Files\Windows Identity Foundation\v3.5\c2wtshost.exe              &lt;br /&gt; +- Config File: C:\Program Files\Windows Identity Foundation\v3.5\c2wtshost.exe.config              &lt;br /&gt; +- Service Logon: SYSTEM\NT AUTHORITY              &lt;br /&gt;----- start of config file ----              &lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;              &lt;br /&gt;&amp;lt;configuration&amp;gt;              &lt;br /&gt;&amp;#160; &amp;lt;configSections&amp;gt;              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;section name=&amp;quot;windowsTokenService&amp;quot; type=&amp;quot;Microsoft.IdentityModel.WindowsTokenService.Configuration.WindowsTokenServiceSection, Microsoft.IdentityModel.WindowsTokenService, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&amp;quot; /&amp;gt;              &lt;br /&gt;&amp;#160; &amp;lt;/configSections&amp;gt;              &lt;br /&gt;&amp;#160; &amp;lt;startup&amp;gt;              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;supportedRuntime version=&amp;quot;v4.0&amp;quot; /&amp;gt;              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;supportedRuntime version=&amp;quot;v2.0.50727&amp;quot; /&amp;gt;              &lt;br /&gt;&amp;#160; &amp;lt;/startup&amp;gt;              &lt;br /&gt;&amp;#160; &amp;lt;windowsTokenService&amp;gt;              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!--              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; By default no callers are allowed to use the Windows Identity Foundation Claims To NT Token Service.              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Add the identities you wish to allow below.              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; --&amp;gt;              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;allowedCallers&amp;gt;              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;clear /&amp;gt;              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;add value=&amp;quot;WSS_WPG&amp;quot; /&amp;gt;              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/allowedCallers&amp;gt;              &lt;br /&gt;&amp;#160; &amp;lt;/windowsTokenService&amp;gt;              &lt;br /&gt;&amp;lt;/configuration&amp;gt;              &lt;br /&gt;-----&amp;#160; end of config file&amp;#160; ----              &lt;br /&gt;Retrieving security groups/users allowed to use the service from config file              &lt;br /&gt; +- WSS_WPG              &lt;br /&gt;Trying to login .........              &lt;br /&gt;Using current Windows Credentials              &lt;br /&gt;c2WTS Service provided a valid Windows Token for: CONTOSO\cpajaro              &lt;br /&gt;Now Verifying if user CONTOSO\rviana has rights on c2WTS              &lt;br /&gt; +- User CONTOSO\rviana has access rights per group/user WSS_WPG. Other groups will not be checked              &lt;br /&gt;*** Analysis Complete ***&lt;/font&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You can download source and EXE here:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://rodneyviana.codeplex.com/releases/view/19103" href="http://rodneyviana.codeplex.com/releases/view/19103"&gt;http://rodneyviana.codeplex.com/releases/view/19103&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Please notice that since this is supposed to mimic SharePoint 2010, the App is 64-bits. Also be aware this application is provided “AS IS” with no guarantees. You need to accept the license to use it.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10188064" width="1" height="1"&gt;</description></item><item><title>Console Application to discover Effective Named Pipe Path of a WCF net.pipe Endpoint</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2011/03/23/console-application-to-discover-effective-named-pipe-path-of-a-wcf-net-pipe-endpoint.aspx</link><pubDate>Wed, 23 Mar 2011 23:17:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10145080</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=10145080</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=10145080</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2011/03/23/console-application-to-discover-effective-named-pipe-path-of-a-wcf-net-pipe-endpoint.aspx#comments</comments><description>&lt;p&gt;As I have promised in my previous post, I am making available a C++ console application to troubleshoot named pipes endpoints in WCF. Below is a screenshot of the application:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/2148.image_5F00_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/4705.image_5F00_thumb.png" width="244" height="138" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Application logic:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;It gets the endpoint from the command line and substitute the host name by +, * depending on the wildcard mode. &lt;/li&gt;    &lt;li&gt;It then add a “/” to the end if not present already and transform to up case all characters of pipe and path &lt;/li&gt;    &lt;li&gt;If the size of the resulting string is bigger than 128 characters a hash is applied to the resulting string&amp;#160; (not implemented) &lt;/li&gt;    &lt;li&gt;The final name is net.pipe:E + Base64 of string generated in item 2 or net.pipe:H + Base64 of string generated in item 3 if uri is bigger than 128 characters &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Post detailing the problem: &lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.msdn.com/b/rodneyviana/archive/2011/03/22/named-pipes-in-wcf-are-named-but-not-by-you-and-how-to-find-the-actual-windows-object-name.aspx" href="http://blogs.msdn.com/b/rodneyviana/archive/2011/03/22/named-pipes-in-wcf-are-named-but-not-by-you-and-how-to-find-the-actual-windows-object-name.aspx"&gt;http://blogs.msdn.com/b/rodneyviana/archive/2011/03/22/named-pipes-in-wcf-are-named-but-not-by-you-and-how-to-find-the-actual-windows-object-name.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Source Code is as shown below (subject to this license: &lt;a title="http://rodneyviana.codeplex.com/license" href="http://rodneyviana.codeplex.com/license"&gt;http://rodneyviana.codeplex.com/license&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;// ReadMemory.cpp : Defines the entry point for the console application.      &lt;br /&gt;//&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;#include &amp;quot;stdafx.h&amp;quot;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;void NormalizeEndPoint(const std::wstring &amp;amp;source, std::wstring&amp;amp; normal)      &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; normal.assign(source);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; if(!normal.compare(0, 10, L&amp;quot;net.pipe://&amp;quot;))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; normal.clear();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; int hoststart = normal.find_first_of(L&amp;quot;//&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int hostend = normal.find(L&amp;quot;/&amp;quot;, hoststart+2);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; std::wstring ending(normal.substr(hostend));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::wstring starting(normal.substr(0, hoststart).append(L&amp;quot;//+&amp;quot;));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::transform(ending.begin(), ending.end(), ending.begin(), (int(*)(int))std::toupper);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::wstring normalized(starting.append(ending));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(normalized.substr(normalized.length()-1).compare(L&amp;quot;/&amp;quot;))       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; normalized.append(L&amp;quot;/&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; normal.assign(normalized);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;void ShowSyntax(bool SyntaxError)      &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;ReadMemory version 1.0\n&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;Written by Rodney Viana - &lt;/font&gt;&lt;a href="http://blogs.msdn.com/rodneyviana\n&amp;quot;);"&gt;&lt;font size="1" face="Courier New"&gt;http://blogs.msdn.com/rodneyviana\n&amp;quot;);&lt;/font&gt;&lt;/a&gt;     &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\n&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(SyntaxError)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;Syntax Error\n\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;Syntax:\n&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;ReadMemory &amp;lt;PipeNameEndPoint&amp;gt; | -file &amp;lt;MappedMemoryFile&amp;gt;\n&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;Where:\t&amp;lt;PipeNameEndPoint&amp;gt; is a endpoint for a net.pipe in WCF in\n\t the format net.pipe://host/path\n&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\t&amp;lt;MappedMemoryFile&amp;gt; is a memory mapped file\n&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\n&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;Examples\n&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\tReadMemory net.pipe://localhost/Service/Service1\n&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\tReadMemory -file \&amp;quot;net.pipe:EbmV0LnBpcGU6Ly8rLzhFNjFFRUM5LUYxOUEtNEIxNy04REE4LTM5NTc1QzhGMTU4QS8=\&amp;quot;\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;int _tmain(int argc, _TCHAR* argv[])      &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(argc &amp;lt; 2)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ShowSyntax(false);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return 0;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; if(argc &amp;gt; 3)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ShowSyntax(true);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return 1;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; std::wstring original;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::wstring normalized;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::wstring mapFile;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; if(argc == 2)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; original.append(argv[1]);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NormalizeEndPoint(original, normalized);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nOriginal Endpoint: %s&amp;quot;, original.c_str());&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nNominal Endpoint: %s&amp;quot;, normalized.c_str());&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; char base64A[1000];&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CW2A ansiNormal(normalized.c_str());      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int size = 1000;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Base64Encode((BYTE*)ansiNormal.m_psz, normalized.length(), base64A, &amp;amp;size, ATL_BASE64_FLAG_NOCRLF | ATL_BASE64_FLAG_NOPAD );&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; base64A[size]='=';      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; base64A[size+1]='\0';&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CA2W base64W(base64A);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mapFile.append(L&amp;quot;net.pipe:E&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mapFile.append(base64W.m_psz);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; if(argc == 3)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wstring force(argv[1]);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::transform(force.begin(), force.end(), force.begin(), (int(*)(int))std::toupper);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(!force.compare(0, 4, L&amp;quot;-FILE&amp;quot;))       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ShowSyntax(true);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return 2;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mapFile.append(argv[2]);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; //original.append(L&amp;quot;net.pipe://localhost/TradeService/Service1&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nMapped Memory Object Name: %s&amp;quot;, mapFile.c_str());&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; HANDLE map = OpenFileMapping(FILE_MAP_READ, FALSE, mapFile.c_str());      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; MEMORY_BASIC_INFORMATION mi;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(map)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nGood News: Mapped memory Object was found. It shows that Host is enabled.&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PVOID contents = MapViewOfFile(map, FILE_MAP_READ, 0, 0, 0);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SIZE_T s = VirtualQuery(contents, &amp;amp;mi, sizeof(mi));&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(s&amp;lt;sizeof(GUID)+4)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nMapped memory Object seems to be corrupted. Restart your WCF Host.\n&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PBYTE bytes = ((PBYTE)contents)+4;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nRaw Bytes:\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(contents)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for(SIZE_T i=0;i&amp;lt;sizeof(GUID);i++)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; printf(&amp;quot;%02x &amp;quot;, *(bytes+i));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\n&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for(SIZE_T i=sizeof(GUID);i&amp;lt;s-4;i++)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; printf(&amp;quot;%02x &amp;quot;, *(bytes+i));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GUID *guid = (GUID*)bytes;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RPC_WSTR guidStr;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; UuidToString(guid, &amp;amp;guidStr);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nActual Named Pipe Name: %s&amp;quot;, guidStr);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nFull Named Pipe Name: \\Device\\NamedPipe\\%s&amp;quot;, guidStr);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wstring localPipe(_T(&amp;quot;\\\\.\\pipe\\&amp;quot;));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; localPipe.append((LPWSTR)guidStr);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nAttempting to connect to Named Pipe for 20 seconds ...\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(!WaitNamedPipe(localPipe.c_str(), 20000))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nBad News: Unable to connect to local pipe: %s.\nReason: Time out.&amp;quot;, localPipe.c_str());&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nGood News: Local pipe \&amp;quot;%s\&amp;quot; is alive.&amp;quot;, localPipe.c_str());       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; HANDLE pipe;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nAttempting to open Named Pipe...\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pipe = CreateFile(localPipe.c_str(), GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, NULL);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(pipe == INVALID_HANDLE_VALUE)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nBad News: Unable to open local pipe: %s.\nLast Error: %i.&amp;quot;, localPipe.c_str(), GetLastError());       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } else       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nGood News: Named Pipe opened successfully.\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TCHAR* send = L&amp;quot;&amp;lt;bad&amp;gt;&amp;lt;\\bad&amp;gt;\n&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DWORD bytesUsed;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(!WriteFile(pipe, (void*)send, wcslen(send)*sizeof(TCHAR), &amp;amp;bytesUsed, NULL))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nBad News: Unable to send bytes.\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nGood News: Pipe accepted bytes\n&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nTest completed successfully!\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CloseHandle(pipe);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } else       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nBad News: Host is not informing pipe id.&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; UnmapViewOfFile(map);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } else       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\nBad News: Mapped File %s was not found. LastError: %x&amp;quot;, mapFile.c_str(), GetLastError());&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CloseHandle(map);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; std::wprintf(L&amp;quot;\n&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return 0;       &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Download the project/executable here:&lt;/p&gt;  &lt;p&gt;&lt;a title="WCF Named Pipes Identification" href="http://rodneyviana.codeplex.com/releases/view/19103#DownloadId=220164"&gt;WCF Named Pipes Identification&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10145080" width="1" height="1"&gt;</description></item><item><title>Named Pipes in WCF are named but not by you (and how to find the actual windows object name)</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2011/03/22/named-pipes-in-wcf-are-named-but-not-by-you-and-how-to-find-the-actual-windows-object-name.aspx</link><pubDate>Wed, 23 Mar 2011 00:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10144612</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=10144612</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=10144612</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2011/03/22/named-pipes-in-wcf-are-named-but-not-by-you-and-how-to-find-the-actual-windows-object-name.aspx#comments</comments><description>&lt;p&gt;If Windows Communication Foundation (WCF) implementation has its own idiosyncrasies, named pipes provider is the champion. First, let&amp;rsquo;s start with the name of the provider. Named Pipes in Windows can be used to communicate between process on the same machine or between different machines across a network. WCF only implements the on-machine part of it. Named Pipes name has the format &lt;strong&gt;&lt;em&gt;\\ServeName\pipe\PipeName&lt;/em&gt;&lt;/strong&gt; and for on-machine pipes you can use &lt;strong&gt;&lt;em&gt;\\.\pipe\PipeName&lt;/em&gt;&lt;/strong&gt;. WCF, if you remember, use the uri format net.pipe://host/path but unlike it may seem, the actual pipe name (Windows Object) will not be anything near&lt;strong&gt;&lt;em&gt; \\host\pipe\path &lt;/em&gt;&lt;/strong&gt;but rather a randomly generated GUID that will be different every time you start your host. When troubleshooting a TCP host/client in WCF, you can simple use &lt;em&gt;&lt;strong&gt;netstat /ano&lt;/strong&gt;&lt;/em&gt; to verify if the port is there and which process is listening to it. If it is not listening you know that the host is either not running or running in a different port. For Named Pipes, you will not be able to identify whether the host is listening or not because you don&amp;rsquo;t have the pipe name.&lt;/p&gt;
&lt;p&gt;I will explain how WCF client can figure out the pipe name. Instead of writing a very large paragraph no one will read let&amp;rsquo;s put it all in perspective with a scenario: I have created a host with a named pipe biding. The endpoint is &lt;strong&gt;&lt;em&gt;net.pipe://localhost/TradeService/Service1&lt;/em&gt;&lt;/strong&gt;. I deploy my solution in my server as Windows Service and one day I cannot connect to my host. I check the ABC (Address-Biding-Contract) of my client and it is as expected. The same happens in the host. My objective is identify if the named pipe is available.&lt;/p&gt;
&lt;p&gt;First I download SysInternals tools (&lt;a href="http://technet.microsoft.com/en-us/sysinternals/default.aspx" title="http://technet.microsoft.com/en-us/sysinternals/default.aspx"&gt;http://technet.microsoft.com/en-us/sysinternals/default.aspx&lt;/a&gt;) and install everything on c:\systenternals. SysInternals include a tool to list all pipes available in the machine. I start a new cmd prompt with Administrator Privileges, move to my SysInternals folder a run PipeList.exe.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/3858.image_5F00_4.png"&gt;&lt;img height="244" width="228" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/2705.image_5F00_thumb_5F00_1.png" alt="image" border="0" title="image" style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You will see two GUID-like Named Pipes in the list (76637f46-853d-4984-8fd5-a4ef6c56606a and 58c9f8e0-67dc-4050-aa4f-24960a7260dd). But I want to know which one is listening to&amp;nbsp; &lt;em&gt;&lt;strong&gt;net.pipe://localhost/TradeService/Service1&lt;/strong&gt;&lt;/em&gt;. Named Pipe implements the naming in the listener factory class in this way: it generates a random GUID to use as pipe name, it creates a shared memory object based on the listen address uri to store this GUID and creates some instances of the named pipe to listen to the requests. The client uses the same technique to generate the shared memory file name and read its contents to know the named pipe name.&lt;/p&gt;
&lt;p&gt;The shared memory object (or memory mapped file) name is generated this way:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It gets the endpoint and substitute the host name by + or&amp;nbsp;* depending on the wildcard mode.&lt;/li&gt;
&lt;li&gt;It then add a &amp;ldquo;/&amp;rdquo; to the end if not present already and transform to up case all characters of pipe and path&lt;/li&gt;
&lt;li&gt;If the size of the resulting string is bigger than 128 characters a hash is applied to the resulting string&lt;/li&gt;
&lt;li&gt;The final name is net.pipe:E + Base64 of string generated in item 2 or net.pipe:H + Base64 of string generated in item 3 if uri is bigger than 128 characters&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For&amp;nbsp;our example: &lt;br /&gt;Endpoint: &lt;strong&gt;&lt;em&gt;net.pipe://localhost/TradeService/Service1&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Normalized Endpoint: &lt;em&gt;&lt;strong&gt;net.pipe://+/TRADESERVICE/SERVICE1/&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Base 64 representation: &lt;strong&gt;bmV0LnBpcGU6Ly8rL1RSQURFU0VSVklDRS9TRVJWSUNFMS8=&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Final memory mapped file: &lt;strong&gt;&lt;em&gt;&lt;span style="color: #0000ff;"&gt;net.pipe:E&lt;/span&gt;bmV0LnBpcGU6Ly8rL1RSQURFU0VSVklDRS9TRVJWSUNFMS8=&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you use Handle.exe from SysIntenals you can verify the existence of the file in both host server and client.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/7587.image_5F00_6.png"&gt;&lt;img height="99" width="244" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/2388.image_5F00_thumb_5F00_2.png" alt="image" border="0" title="image" style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And of course using &lt;em&gt;&lt;strong&gt;Handle.exe net.pipe:&lt;/strong&gt;&lt;/em&gt; will show all memory mapped files with GUIDs for named pipes generated by WCF.&lt;/p&gt;
&lt;p&gt;Inside these memory mapped files you will find the GUID in binary format starting at the 5th character. There is no easy way to read mapped memory files in .NET (at least before .NET 4.0) and I will publish a C++ console application in my next post to implement the endpoint name resolution for named pipes in WCF.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10144612" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/rodneyviana/archive/tags/wcf+named+pipes+memory+mapped+files+shared+memory/">wcf named pipes memory mapped files shared memory</category></item><item><title>In SharePoint 2010 when you create a new Top Link Bar entry the Home tab will not highlight anymore</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2011/03/04/in-sharepoint-2010-when-you-create-a-new-top-link-bar-entry-the-home-tab-will-not-highlight-anymore.aspx</link><pubDate>Sat, 05 Mar 2011 03:32:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10137192</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>26</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=10137192</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=10137192</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2011/03/04/in-sharepoint-2010-when-you-create-a-new-top-link-bar-entry-the-home-tab-will-not-highlight-anymore.aspx#comments</comments><description>&lt;p&gt;After adding page links to the Top Link Bar of team sites tab, the Home tab (the first one) was not getting highlighted anymore when selected. All other page links added to the Top Link Bar were being highlighted as expected. Some people came out with the idea of disabling the Wiki Feature to make Home highlights again. Even though it seems to bring the highlight back to the Home tab, it was disabling a very useful web feature. This is not a very efficient workaround in my humble opinion.&lt;/p&gt;  &lt;p&gt;Since I had to work in this issue I was able to put together a workaround that resolves the problem without much effort. First, I will explain how to reproduce the problem, then I will show my solution. I am really curious to know how many people are experiencing the problem, so if it helped you, please add your comment.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;These are the steps to reproduce the problem&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;1. Create a new site collection using the Team Site template&lt;/p&gt;  &lt;p&gt;2. After created, navigate to the site and verify that at this moment there is only a tab in the top link bar (Home) and it is highlighted as expected.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/3225.clip_5F00_image002_5F00_2.jpg"&gt;&lt;em&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/4214.clip_5F00_image002_5F00_thumb.jpg" width="244" height="230" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;3. In Site Actions, choose New Page     &lt;br /&gt;&lt;/em&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/2654.clip_5F00_image004_5F00_2.jpg"&gt;&lt;em&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/6864.clip_5F00_image004_5F00_thumb.jpg" width="193" height="244" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;4. Enter the new page name and click on Create     &lt;br /&gt;&lt;/em&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/6864.clip_5F00_image006_5F00_2.jpg"&gt;&lt;em&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/2063.clip_5F00_image006_5F00_thumb.jpg" width="244" height="171" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;5. After the page is created, copy the full Url of the new page to your clipboard as you will need this URL to create the link later&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;6. In Site Actions, choose Site Settings and click on “Top link bar” under Look and Feel     &lt;br /&gt;&lt;/em&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/6862.clip_5F00_image008_5F00_4.jpg"&gt;&lt;em&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/0412.clip_5F00_image008_5F00_thumb.jpg" width="244" height="110" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;7. On the Top Link Bar page, click on “New Navigation Link”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;8. Enter the URL of the new page you have created in item 3 and 4 and also a name for the link then click ok     &lt;br /&gt;&lt;/em&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/5381.clip_5F00_image010_5F00_2.jpg"&gt;&lt;em&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image010" border="0" alt="clip_image010" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/4621.clip_5F00_image010_5F00_thumb.jpg" width="244" height="97" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;9. Click on the newly created tab in the Top Link Bar and you will move to the page and the tab will be highlighted     &lt;br /&gt;&lt;/em&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/3250.clip_5F00_image012_5F00_2.jpg"&gt;&lt;em&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image012" border="0" alt="clip_image012" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/6862.clip_5F00_image012_5F00_thumb.jpg" width="244" height="125" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;10. When you click on the tab Home in the Top Link Bar you will go to the page, but it will not be highlighted      &lt;br /&gt;&lt;/em&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/1513.clip_5F00_image014_5F00_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image014" border="0" alt="clip_image014" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/0523.clip_5F00_image014_5F00_thumb.jpg" width="244" height="157" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enough of talking about problems. Let’s go to the solution.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;b&gt;Steps to resolve the issue&lt;/b&gt;&lt;/h3&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;1. On Site Actions choose Site settings and click on Top link bar.     &lt;br /&gt;&lt;/em&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/1513.clip_5F00_image008_5B00_1_5D00_.jpg"&gt;&lt;em&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image008[1]" border="0" alt="clip_image008[1]" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/7457.clip_5F00_image008_5B00_1_5D005F00_thumb.jpg" width="244" height="110" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;2. You should see all the tabs in the Top Link Bar&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;3. Click on the Edit icon for the tab Home     &lt;br /&gt;&lt;/em&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/8424.clip_5F00_image016_5F00_2.jpg"&gt;&lt;em&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image016" border="0" alt="clip_image016" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/7444.clip_5F00_image016_5F00_thumb.jpg" width="244" height="139" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;4. Make sure you are indeed in the item for Home and click on Delete (confirm the operation when the popup shows up)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/4621.clip_5F00_image018_5F00_2.jpg"&gt;&lt;em&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image018" border="0" alt="clip_image018" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/2161.clip_5F00_image018_5F00_thumb.jpg" width="244" height="127" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;5. You will be back to the Top Link Bar page and Home will not be available anymore&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;6. Click on the link “New Navigation Link” to add the Home tab again with full URL&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;7. Enter the full url of the home page in the Web Address field and “Home” (without quotes) in the Description field     &lt;br /&gt;&lt;/em&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/2642.clip_5F00_image020_5F00_2.jpg"&gt;&lt;em&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image020" border="0" alt="clip_image020" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/4237.clip_5F00_image020_5F00_thumb.jpg" width="244" height="72" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;8.&amp;#160; You will be back to the Top Link Navigation Bar and Home will be the last entry     &lt;br /&gt;&lt;/em&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/2260.clip_5F00_image022_5F00_2.jpg"&gt;&lt;em&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image022" border="0" alt="clip_image022" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/1581.clip_5F00_image022_5F00_thumb.jpg" width="244" height="136" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;9. Click on the Link Change Order&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;10. Make sure you change the Link Order of Home to be 1. It will move Home to the first position and reorder the rest. Click OK when done     &lt;br /&gt;&lt;/em&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/2677.clip_5F00_image024_5F00_2.jpg"&gt;&lt;em&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image024" border="0" alt="clip_image024" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/8037.clip_5F00_image024_5F00_thumb.jpg" width="244" height="68" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;11. After clicking Ok check to see if Home is indeed in the first position in the Top Link Bar page&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;12. Click on the Home tab in Top Link Bar and you will be taken to the Home page&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;13. Home is now highlighted when selected (as expected)     &lt;br /&gt;&lt;/em&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/3250.clip_5F00_image026_5F00_2.jpg"&gt;&lt;em&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image026" border="0" alt="clip_image026" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/0508.clip_5F00_image026_5F00_thumb.jpg" width="244" height="199" /&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You only have to do this once for each site collection facing the problem.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10137192" width="1" height="1"&gt;</description></item><item><title>Step by step configuration of Excel Calculation Services (ECS) when using Kerberos</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2011/02/23/step-by-step-configuration-of-excel-calculation-services-ecs-when-using-kerberos.aspx</link><pubDate>Thu, 24 Feb 2011 04:52:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10133359</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=10133359</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=10133359</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2011/02/23/step-by-step-configuration-of-excel-calculation-services-ecs-when-using-kerberos.aspx#comments</comments><description>&lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;There is no better way of learning something than to observe someone doing it step-by-step. I gathered information from different sources during the beta phase of SharePoint. So my thanks go to Darin Roulston, Eric Adams, Tracy Paddock, Jon Waite and other brave people who created the eco-system for all of us.&lt;/p&gt;  &lt;p&gt;&lt;i&gt;The topology is as follows:&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;•&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MSF1 is the WFE Server and the site collection is &lt;a href="http://msf1"&gt;http://msf1&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;•&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MSF2 is the APP Server&lt;/p&gt;  &lt;p&gt;•&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DC is the domain controller and SQL server (&lt;b&gt;in real life don’t install SQL in the domain controller&lt;/b&gt;) &lt;/p&gt;  &lt;p&gt;•&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Excel Calculation Services account is contoso\xlsvcs and service account running SQL is contoso\SQLSvc&lt;/p&gt;  &lt;p&gt;•&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Domain is contoso.com&lt;/p&gt;  &lt;p&gt;&lt;i&gt;A few information before you start:&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;The Claims to Windows Token Services (c2WTS) is installed by WIF which is part of SharePoint pre-requisites (you don’t have to worry about this installation). The configuration file is called c2wtshost.exe.config, located in c:\Program Files\Windows Identity Foundation\v3.5. The configuration does not allow any user to access the service by default, thus SharePoint add the security group WSS_WPG to enable access from SharePoint services. See screenshot below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/2642.clip_5F00_image002_5F00_37822E7A.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/2148.clip_5F00_image002_5F00_thumb_5F00_1D41C556.jpg" width="244" height="198" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you have not done yet, install and enable the following via the SharePoint PowerShell Management Console (run as Administrator).&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;Install-SPFeature –path &amp;quot;DataConnectionLibrary&amp;quot;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;Enable-SPFeature –url &lt;/strong&gt;&lt;/font&gt;&lt;a href="http://msf1"&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;http://msf1&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&lt;strong&gt; –identity &amp;quot;DataConnectionLibrary&amp;quot;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;h6&gt;Steps:&lt;/h6&gt;  &lt;p&gt;1. On all the servers running Excel Calculation Services, verify the Claims to Windows Token Service (c2WTS) is Started and set to Automatic. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;VERY IMPORTANT:&lt;/strong&gt; There is a known issue with the C2WTS where &lt;b&gt;it may not automatically startup successfully on system reboot&lt;/b&gt;&lt;b&gt;.&lt;/b&gt; A workaround to the issue is to configure a service dependency on the Cryptographic Services service:&lt;/p&gt;  &lt;p&gt;a) Open the command-prompt window.&lt;/p&gt;  &lt;p&gt;b) Type: &lt;font face="Courier New"&gt;&lt;strong&gt;sc config c2wts depend= CryptSvc&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;c) Find the Claims to Windows Token Service in the services console.&lt;/p&gt;  &lt;p&gt;d) Open the properties for the service.&lt;/p&gt;  &lt;p&gt;e) Check the Dependencies tab. Make sure Cryptographic Services is listed.&lt;/p&gt;  &lt;p&gt;f) Click OK.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/5381.clip_5F00_image003_5F00_7CBA85A3.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/7853.clip_5F00_image003_5F00_thumb_5F00_0E2AE67C.jpg" width="209" height="244" /&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/4212.clip_5F00_image004_5F00_627A1C7F.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/2664.clip_5F00_image004_5F00_thumb_5F00_2D015A5A.jpg" width="212" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;From Central Administration &amp;gt; &lt;b&gt;Manage Services on Server &lt;/b&gt;page:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/8446.clip_5F00_image007_5F00_3A676D60.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image007" border="0" alt="clip_image007" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/6378.clip_5F00_image007_5F00_thumb_5F00_04EEAB3B.jpg" width="644" height="158" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. Identify the Service Application service account for Excel Services (example: contoso\xlsvcs)&lt;/p&gt;  &lt;p&gt;3. Create the service account to be running SQL Server.&lt;/p&gt;  &lt;p&gt;a. Open Active Directory Users and Computers and add SQLSvc in the list of users, choose a password and uncheck “requires user to change the password” and make sure password will not expire.&lt;/p&gt;  &lt;p&gt;b. Open SQL Configuration Manager from the Start menu, &lt;/p&gt;  &lt;p&gt;c. Right-click MSSQLSERVER&amp;#160; and click Properties. On the Log On tab of the dialog that appears, click ‘This account’ and enter contoso\SQLSvc and choose a password. Click OK. On the dialog box that appears confirm the restart of the service.&lt;/p&gt;  &lt;p&gt;d. Make sure the service is running after restarting.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/7853.clip_5F00_image008_5F00_6A420F21.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/2654.clip_5F00_image008_5F00_thumb_5F00_2280863A.jpg" width="244" height="194" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;1. Using the SETSPN tool or the ADSIEdit console, create &lt;b&gt;Service Principal Names&lt;/b&gt; (&lt;b&gt;SPN&lt;/b&gt;s) for each service account as follows:&lt;/p&gt;  &lt;p&gt;a. For each Excel Services Server, add a SPN for the Excel Services service account.    &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="17%"&gt;&lt;b&gt;             &lt;br /&gt;&lt;/b&gt;&lt;/td&gt;          &lt;td valign="top" width="83%"&gt;           &lt;p&gt;Setspn –a HTTP/MSF2 contoso\xlsvcs&lt;/p&gt;            &lt;p&gt;Setspn –a HTTP/MSF2.contoso.com contoso\xlsvcs&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;2. Set the SPN for the SQL Service account.    &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="17%"&gt;&lt;b&gt;             &lt;br /&gt;&lt;/b&gt;&lt;/td&gt;          &lt;td valign="top" width="83%"&gt;           &lt;p&gt;Setspn -a MSSQLSvc/DC:1433 contoso\SQLSvc&lt;/p&gt;            &lt;p&gt;Setspn -a MSSQLSvc/DC.contoso.com:1433 contoso\SQLSvc&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;3. Next we will setup our delegation paths. There are two of them: one for the &lt;b&gt;Claims to Windows Token Service&lt;/b&gt;, the other for the &lt;b&gt;Excel Service Application&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;a. First we will setup the &lt;b&gt;Claims to Windows Token Service&lt;/b&gt; delegation path to the back-end data source.&lt;/p&gt;  &lt;p&gt;i.&amp;#160; In &lt;b&gt;Active Directory Users and Computers&lt;/b&gt;, ensure each &lt;b&gt;Computer Account&lt;/b&gt; for &lt;b&gt;each ECS Server&lt;/b&gt; in the farm is set to &lt;b&gt;constrained&lt;/b&gt; delegation to the back-end service. Constrained delegation means that Kerberos delegation is constrained to a specific service.&amp;#160; &lt;/p&gt;  &lt;p&gt;4. In &lt;b&gt;Active Directory Users and Computers&lt;/b&gt;, find &lt;b&gt;MSF2 &lt;/b&gt;open its &lt;b&gt;Properties&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;a. Click the &lt;b&gt;Delegation&lt;/b&gt; tab. Change the Delegation to &lt;b&gt;Trust the computer for delegation to specific services only&lt;/b&gt; and select &lt;b&gt;Use any authentication protocol&lt;/b&gt;.&amp;#160; See example below. Then click the &lt;b&gt;Add&lt;/b&gt; button for the next dialog.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/6283.clip_5F00_image009_5F00_5DD3EBF8.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image009" border="0" alt="clip_image009" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/1106.clip_5F00_image009_5F00_thumb_5F00_08401D16.jpg" width="461" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;5. The next window appears. Click &lt;b&gt;Users or Computers.&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/8358.clip_5F00_image011_5F00_0E86F3A4.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image011" border="0" alt="clip_image011" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/5810.clip_5F00_image011_5F00_thumb_5F00_46C56ABC.jpg" width="506" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;At this point, you will need to enter either the SQL Server name or the SQL Server service account.&amp;#160; &lt;/p&gt;  &lt;p&gt;6. If the SQL server is running under ‘Local System’ then enter the computer name in the following dialog.&amp;#160; &lt;/p&gt;  &lt;p&gt;7. If the SQL server is running under a service account (like this example), then enter that account.&amp;#160; Click OK after you have entered the appropriate Computer or User account.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/3666.clip_5F00_image013_5F00_0CD627D0.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image013" border="0" alt="clip_image013" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/1104.clip_5F00_image013_5F00_thumb_5F00_7A212E18.jpg" width="644" height="339" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;8. Assuming all steps were completed correctly to this point, you will see the MSSQLSvc principal entry available as a selection. Select your desired entry and click OK.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;9. This will be the result of your selection:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/7382.clip_5F00_image015_5F00_1963D4EC.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image015" border="0" alt="clip_image015" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/1184.clip_5F00_image015_5F00_thumb_5F00_7C7AB016.jpg" width="506" height="484" /&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/8468.clip_5F00_image016_5F00_7B361737.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image016" border="0" alt="clip_image016" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/3755.clip_5F00_image016_5F00_thumb_5F00_1529D75A.jpg" width="644" height="450" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;10.&amp;#160; Next, we will setup the &lt;b&gt;Excel Service Application&lt;/b&gt; delegation path.&amp;#160; In &lt;b&gt;Active Directory Users and Computers&lt;/b&gt;, make each Excel Service Application service account trusted for delegation:&lt;/p&gt;  &lt;p&gt;The &lt;b&gt;Excel Services service account &lt;/b&gt;should also be set for &lt;b&gt;constrained&lt;/b&gt; delegation to the back-end service.&amp;#160; Find the Excel Services service account in &lt;b&gt;Active Directory Users and Computers&lt;/b&gt; and open its &lt;b&gt;Properties&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;11. Repeat the process using Steps 6-9 above for the Excel Service service account and you will see this result:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/4667.clip_5F00_image017_5F00_0612F880.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image017" border="0" alt="clip_image017" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/2570.clip_5F00_image017_5F00_thumb_5F00_72F1CBD3.jpg" width="644" height="449" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;12. You now have successfully configured Excel Services to use Kerberos delegation (via the Claims to Windows Token Service), and the Windows Authentication method for the workbook data connection is ready to work.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10133359" width="1" height="1"&gt;</description></item><item><title>Claims to Windows Token Service (c2WTS) may not start automatically when you reboot your server (don’t blame SharePoint for that)</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2011/02/20/claims-to-windows-token-service-c2wts-may-not-start-automatically-when-you-reboot-your-server-don-t-blame-sharepoint-for-that.aspx</link><pubDate>Sun, 20 Feb 2011 22:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10131978</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=10131978</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=10131978</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2011/02/20/claims-to-windows-token-service-c2wts-may-not-start-automatically-when-you-reboot-your-server-don-t-blame-sharepoint-for-that.aspx#comments</comments><description>&lt;p&gt;I know a large number of people who believe that Claims to Windows Token Service is a SharePoint feature. They are mistaken, c2WTS is part of Windows Identity Foundation (WIF) which is one of the pre-requisites for SharePoint.&lt;/p&gt;
&lt;p&gt;SharePoint indeed relies on c2WTS for delegation. It works this way: c2WTS extracts UPN claims from non-Windows security token (like SAML and X.509) and generates a valid Windows security token to be used for impersonation. You will only need to have this service running in SharePoint if you need services that requires impersonation (in a way it is a replacement for SSO) such as Excel Calculation Services (ECS) and PerformancePoint Services.&lt;/p&gt;
&lt;p&gt;It happens though that besides configuring ECS being alone a complex task you may face an intermittent problem: c2WTS may not start automatically when you reboot your server. You will of course blame SharePoint for not starting the service as appropriate and this is the misleading part. Even though you set the SharePoint service Claims to Windows Token in Central Administration you are only setting up the tip of the iceberg that is managed by SharePoint. This setting will let SharePoint knows where the actual c2WTS (which is a Windows Service) is installed (you can choose more than one server). It also configures the service and add the appropriate security group (WSS_WPG) to the service config&amp;nbsp; (c:\Program Files\Windows Identity Foundation\v3.5\c2wtshost.exe.config) and that&amp;rsquo;s it. All the hard work is done by the WIF service from this point on. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;After having installed the service appropriately you may see it fails to start automatically and your ECS will break. Starting manually&amp;nbsp;will have things back to normal, but this is not a desirable workaround. The problem with starting automatically is that c2WTS has a dependency on another windows service: Cryptographic Services. If Cryptographic Services take too long to start, c2WTS will timeout. This is a known issue with WIF that is not so well documented. To resolve this issue, you will have to add the dependency yourself. The good news is that you only have to do it once for each server running the service.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fixing the problem:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;a) Open the command-prompt window as Administrator. &lt;/p&gt;
&lt;p&gt;b) Type: &lt;span style="font-family: Courier New;"&gt;&lt;strong&gt;&lt;em&gt;sc config c2wts depend= CryptSvc&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;c) Find the Claims to Windows Token Service in the services console (run: services.msc) &lt;/p&gt;
&lt;p&gt;d) Open the properties for the service. &lt;/p&gt;
&lt;p&gt;e) Check the Dependencies tab. Make sure Cryptographic Services is listed. &lt;/p&gt;
&lt;p&gt;f) Click OK. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;**** UPDATE: I have created a KB article on the subject. It can be found here: &lt;a href="http://support.microsoft.com/kb/2512597"&gt;http://support.microsoft.com/kb/2512597&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10131978" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/rodneyviana/archive/tags/Claims+to+Windows+Token+Service+c2WTS+SharePoint+Excel+Calculation+Services/">Claims to Windows Token Service c2WTS SharePoint Excel Calculation Services</category></item><item><title>Application to check cascade access rights for a particular user or anonymous user in SharePoint</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2010/11/11/application-to-check-cascade-access-rights-for-a-particular-user-or-anonymous-user-in-sharepoint.aspx</link><pubDate>Thu, 11 Nov 2010 20:09:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10089739</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=10089739</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=10089739</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2010/11/11/application-to-check-cascade-access-rights-for-a-particular-user-or-anonymous-user-in-sharepoint.aspx#comments</comments><description>&lt;p&gt;Don’t you hate when you have access denied and you don’t know where it is coming from? It is even worse when it is related to anonymous access where a single detail can prevent a page from being rendered (IIS authentication, broken inheritance, you name it). The application will show the detailed cascade rights for anonymous, current user and given user for a given item in url. In the example below it will show all details from site to page item:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/8233.image_5F00_4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/3750.image_5F00_thumb_5F00_1.png" width="644" height="436" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/0167.image_5F00_5.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-05-10-metablogapi/8585.image_5F00_thumb.png" width="644" height="435" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The output will look like it:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;Object Type: File     &lt;br /&gt;**** Start Miscellaneous for Site &lt;/font&gt;&lt;a href="http://rviana-moss-w28"&gt;&lt;font size="1" face="Courier New"&gt;http://rviana-moss-w28&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;IIS Allow Anonymous:&amp;#160; [True]     &lt;br /&gt;IIS is impersonating: [False]      &lt;br /&gt;Zone:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [Default]      &lt;br /&gt;Host Name:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [rviana-moss-w28]      &lt;br /&gt;Write Locked:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [False]      &lt;br /&gt;**** End Miscellaneous for Site      &lt;br /&gt;**** Start Miscellaneous for Web &lt;/font&gt;&lt;a href="http://rviana-moss-w28"&gt;&lt;font size="1" face="Courier New"&gt;http://rviana-moss-w28&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;Web Allow Anonymous:&amp;#160; [True]     &lt;br /&gt;Anonymous Access to Lists and Libraries:&amp;#160; [On]      &lt;br /&gt;********* Start of List of Rights to anonymous in this web      &lt;br /&gt;Perm Mask&amp;#160; -&amp;#160; Hex: 1000031041 Binary 1000000000000000000110001000001000001      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewListItems Hex [00000001] Binary [1]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewVersions Hex [00000040] Binary [1000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewFormPages Hex [00001000] Binary [1000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Open Hex [00010000] Binary [10000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewPages Hex [00020000] Binary [100000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UseClientIntegration Hex [1000000000] Binary [1000000000000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FullMask Hex [1000031041] Binary [1000000000000000000110001000001000001]      &lt;br /&gt;********* End of List of Rights to anonymous in this web&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;********* Start of List of Rights for User CONTOSO\alanew     &lt;br /&gt;Perm Mask&amp;#160; -&amp;#160; Hex: 1b03c4312ef Binary 11011000000111100010000110001001011101111      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewListItems Hex [00000001] Binary [1]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; AddListItems Hex [00000002] Binary [10]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EditListItems Hex [00000004] Binary [100]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DeleteListItems Hex [00000008] Binary [1000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; OpenItems Hex [00000020] Binary [100000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; (... lines removed for space ...)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CreateAlerts Hex [8000000000] Binary [1000000000000000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EditMyUserInfo Hex [10000000000] Binary [10000000000000000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FullMask Hex [1b03c4312ef] Binary [11011000000111100010000110001001011101111]      &lt;br /&gt;********* End of List of Rights&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;********* Start of List of Rights for Current User CONTOSO\rviana     &lt;br /&gt;Perm Mask&amp;#160; -&amp;#160; Hex: 7fffffffffffffff Binary 111111111111111111111111111111111111111111111111111111111111111      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewListItems Hex [00000001] Binary [1]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; AddListItems Hex [00000002] Binary [10]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EditListItems Hex [00000004] Binary [100]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DeleteListItems Hex [00000008] Binary [1000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; (... lines removed for space ...)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EditMyUserInfo Hex [10000000000] Binary [10000000000000000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EnumeratePermissions Hex [4000000000000000] Binary [100000000000000000000000000000000000000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FullMask Hex [7fffffffffffffff] Binary [111111111111111111111111111111111111111111111111111111111111111]      &lt;br /&gt;********* End of List of Rights&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;**** End Miscellaneous for Web&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;**** Start Miscellaneous for List Pages at /Pages/Forms/AllItems.aspx     &lt;br /&gt;Access to Template List is Restricted&amp;#160;&amp;#160;&amp;#160;&amp;#160; :&amp;#160; [False]      &lt;br /&gt;Users Access Limited to Items they Created:&amp;#160; [False]      &lt;br /&gt;Anonymous can access&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; :&amp;#160; [True]      &lt;br /&gt;Everyone can view List&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; :&amp;#160; [False]      &lt;br /&gt;********* Start of List of Rights to anonymous in this List      &lt;br /&gt;Perm Mask&amp;#160; -&amp;#160; Hex: 1000031041 Binary 1000000000000000000110001000001000001      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewListItems Hex [00000001] Binary [1]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewVersions Hex [00000040] Binary [1000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewFormPages Hex [00001000] Binary [1000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Open Hex [00010000] Binary [10000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewPages Hex [00020000] Binary [100000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UseClientIntegration Hex [1000000000] Binary [1000000000000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FullMask Hex [1000031041] Binary [1000000000000000000110001000001000001]      &lt;br /&gt;********* End of List of Rights to anonymous in this List&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;********* Start of List of Rights for User CONTOSO\alanew     &lt;br /&gt;Perm Mask&amp;#160; -&amp;#160; Hex: 1b03c4312ef Binary 11011000000111100010000110001001011101111      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewListItems Hex [00000001] Binary [1]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; AddListItems Hex [00000002] Binary [10]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EditListItems Hex [00000004] Binary [100]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DeleteListItems Hex [00000008] Binary [1000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; OpenItems Hex [00000020] Binary [100000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewVersions Hex [00000040] Binary [1000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; (... lines removed for space ...)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EditMyUserInfo Hex [10000000000] Binary [10000000000000000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FullMask Hex [1b03c4312ef] Binary [11011000000111100010000110001001011101111]      &lt;br /&gt;********* End of List of Rights&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;********* Start of List of Rights for Current User CONTOSO\rviana     &lt;br /&gt;Perm Mask&amp;#160; -&amp;#160; Hex: 7fffffffffffffff Binary 111111111111111111111111111111111111111111111111111111111111111      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewListItems Hex [00000001] Binary [1]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; AddListItems Hex [00000002] Binary [10]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; (... lines removed for space ...)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EditMyUserInfo Hex [10000000000] Binary [10000000000000000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EnumeratePermissions Hex [4000000000000000] Binary [100000000000000000000000000000000000000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FullMask Hex [7fffffffffffffff] Binary [111111111111111111111111111111111111111111111111111111111111111]      &lt;br /&gt;********* End of List of Rights&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;**** End Miscellaneous for List&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;**** Start Miscelaneous for List Item default.aspx at Pages/default.aspx     &lt;br /&gt;Anonymous has access to list item&amp;#160;&amp;#160;&amp;#160; :&amp;#160; [True]      &lt;br /&gt;Permission Inheritance is broken&amp;#160;&amp;#160;&amp;#160;&amp;#160; :&amp;#160; [False]      &lt;br /&gt;********* Start of List of Rights for User CONTOSO\alanew      &lt;br /&gt;Perm Mask&amp;#160; -&amp;#160; Hex: 1b03c4312ef Binary 11011000000111100010000110001001011101111      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewListItems Hex [00000001] Binary [1]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; AddListItems Hex [00000002] Binary [10]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EditListItems Hex [00000004] Binary [100]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; (... lines removed for space ...)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UpdatePersonalWebParts Hex [20000000] Binary [100000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UseClientIntegration Hex [1000000000] Binary [1000000000000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UseRemoteAPIs Hex [2000000000] Binary [10000000000000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CreateAlerts Hex [8000000000] Binary [1000000000000000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EditMyUserInfo Hex [10000000000] Binary [10000000000000000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FullMask Hex [1b03c4312ef] Binary [11011000000111100010000110001001011101111]      &lt;br /&gt;********* End of List of Rights&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;********* Start of List of Rights for Current User CONTOSO\rviana     &lt;br /&gt;Perm Mask&amp;#160; -&amp;#160; Hex: 7fffffffffffffff Binary 111111111111111111111111111111111111111111111111111111111111111      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewListItems Hex [00000001] Binary [1]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; AddListItems Hex [00000002] Binary [10]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EditListItems Hex [00000004] Binary [100]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; (... lines removed for space ...)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EnumeratePermissions Hex [4000000000000000] Binary [100000000000000000000000000000000000000000000000000000000000000]      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FullMask Hex [7fffffffffffffff] Binary [111111111111111111111111111111111111111111111111111111111111111]      &lt;br /&gt;********* End of List of Rights&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;********* Item Xml     &lt;br /&gt;&amp;lt;z:row xmlns:z='#RowsetSchema' ows_ContentTypeId='0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF390064DEA0F50FC8C147B0B6EA0636C4A7D400B86BB823B4EF734998C6CF97A89029EE' ows_FileLeafRef='1;#default.aspx' ows_Modified_x0020_By='SHAREPOINT\system' ows_File_x0020_Type='aspx' ows_Title='Search Center' ows_PublishingPageLayout='&lt;/font&gt;&lt;a href="http://rviana-moss-w28/_catalogs/masterpage/searchmain.aspx"&gt;&lt;font size="1" face="Courier New"&gt;http://rviana-moss-w28/_catalogs/masterpage/searchmain.aspx&lt;/font&gt;&lt;/a&gt;&lt;font size="1" face="Courier New"&gt;, Search Page' ows_ContentType='Welcome Page' ows_ID='1' ows_Created='2010-10-22 20:43:50' ows_Author='1073741823;#System Account' ows_Modified='2010-10-22 20:43:50' ows_Editor='1073741823;#System Account' ows__ModerationStatus='0' ows_FileRef='1;#Pages/default.aspx' ows_FileDirRef='1;#Pages' ows_Last_x0020_Modified='1;#2010-10-22 20:43:50' ows_Created_x0020_Date='1;#2010-10-22 20:43:50' ows_File_x0020_Size='1;#739' ows_FSObjType='1;#0' ows_PermMask='0x7fffffffffffffff' ows_CheckedOutUserId='1;#' ows_IsCheckedoutToLocal='1;#0' ows_UniqueId='1;#{B9F29A82-3E82-4817-B8A5-77CED27512E8}' ows_ProgId='1;#' ows_ScopeId='1;#{037929C6-B73A-4F2B-BD14-07003EADB4CD}' ows_VirusStatus='1;#739' ows_CheckedOutTitle='1;#' ows__CheckinComment='1;#' ows__EditMenuTableStart='default.aspx' ows__EditMenuTableEnd='1' ows_LinkFilenameNoMenu='default.aspx' ows_LinkFilename='default.aspx' ows_DocIcon='aspx' ows_ServerUrl='/Pages/default.aspx' ows_EncodedAbsUrl='&lt;/font&gt;&lt;a href="http://rviana-moss-w28/Pages/default.aspx'"&gt;&lt;font size="1" face="Courier New"&gt;http://rviana-moss-w28/Pages/default.aspx'&lt;/font&gt;&lt;/a&gt;&lt;font size="1" face="Courier New"&gt; ows_BaseName='default' ows_FileSizeDisplay='739' ows_MetaInfo='1;#vti_modifiedby:SR|SHAREPOINT\\system     &lt;br /&gt;vti_parserversion:SR|12.0.0.6545      &lt;br /&gt;vti_cachedhastheme:BR|false      &lt;br /&gt;vti_cachedcustomprops:VX|ContentType vti_title PublishingPageLayout      &lt;br /&gt;ContentType:SW|Welcome Page      &lt;br /&gt;vti_title:SR|Search Center      &lt;br /&gt;vti_cachedtitle:SR|Search Center      &lt;br /&gt;vti_charset:SR|utf-8      &lt;br /&gt;ContentTypeId:SW|0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF390064DEA0F50FC8C147B0B6EA0636C4A7D400B86BB823B4EF734998C6CF97A89029EE      &lt;br /&gt;PublishingPageLayout:SW|/_catalogs/masterpage/searchmain.aspx, Search Page      &lt;br /&gt;vti_author:SR|      &lt;br /&gt;vti_setuppath:SX|SiteTemplates\\SRCHCEN\\default.aspx      &lt;br /&gt;vti_cachedneedsrewrite:BR|false      &lt;br /&gt;' ows__Level='1' ows__IsCurrentVersion='1' ows_SelectTitle='1' ows_SelectFilename='1' ows_Edit='0' ows_owshiddenversion='2' ows__UIVersion='512' ows__UIVersionString='1.0' ows_Order='100.000000000000' ows_GUID='{5FAA46F1-443E-4FF7-A60B-7A229EBD9C03}' ows_WorkflowVersion='1' ows_ParentVersionString='1;#' ows_ParentLeafName='1;#' ows_Combine='0' ows_RepairDocument='0' ows_ServerRedirected='0'/&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;********* End of Item XML&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;********* Role Assignments Xml     &lt;br /&gt;&amp;lt;permissions&amp;gt;&amp;lt;permission memberid='3' mask='9223372036854775807' /&amp;gt;      &lt;br /&gt;&amp;lt;permission memberid='4' mask='756052856929' /&amp;gt;      &lt;br /&gt;&amp;lt;permission memberid='5' mask='1856436900591' /&amp;gt;      &lt;br /&gt;&amp;lt;permission memberid='6' mask='206292717568' /&amp;gt;      &lt;br /&gt;&amp;lt;permission memberid='7' mask='1856438737919' /&amp;gt;      &lt;br /&gt;&amp;lt;permission memberid='8' mask='4611688150860241903' /&amp;gt;      &lt;br /&gt;&amp;lt;permission memberid='9' mask='1856436900863' /&amp;gt;      &lt;br /&gt;&amp;lt;permission memberid='10' mask='206292848673' /&amp;gt;      &lt;br /&gt;&amp;lt;permission memberid='11' mask='206292717568' /&amp;gt;      &lt;br /&gt;&amp;lt;permission memberid='13' mask='756052856897' /&amp;gt;      &lt;br /&gt;&amp;lt;permission memberid='1073741823' mask='206292717568' /&amp;gt;      &lt;br /&gt;&amp;lt;/permissions&amp;gt;      &lt;br /&gt;********* End of Role Assignments Xml&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;**** End Miscellaneous for List Item&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;*** File default.aspx content:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;???&amp;lt;%@ Page Inherits=&amp;quot;Microsoft.SharePoint.Publishing.TemplateRedirectionPage,Microsoft.SharePoint.Publishing,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c&amp;quot; %&amp;gt; &amp;lt;%@ Reference VirtualPath=&amp;quot;~TemplatePageUrl&amp;quot; %&amp;gt; &amp;lt;%@ Reference VirtualPath=&amp;quot;~masterurl/custom.master&amp;quot; %&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;lt;html xmlns:mso=&amp;quot;urn:schemas-microsoft-com:office:office&amp;quot; xmlns:msdt=&amp;quot;uuid:C2F41010-65B3-11d1-A29F-00AA00C14882&amp;quot;&amp;gt;&amp;lt;head&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;lt;!--[if gte mso 9]&amp;gt;&amp;lt;xml&amp;gt;     &lt;br /&gt;&amp;lt;mso:CustomDocumentProperties&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;lt;mso:ContentType msdt:dt=&amp;quot;string&amp;quot;&amp;gt;Welcome Page&amp;lt;/mso:ContentType&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;lt;mso:PublishingPageLayout msdt:dt=&amp;quot;string&amp;quot;&amp;gt;/_catalogs/masterpage/searchmain.aspx, Search Page&amp;lt;/mso:PublishingPageLayout&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;lt;/mso:CustomDocumentProperties&amp;gt;     &lt;br /&gt;&amp;lt;/xml&amp;gt;&amp;lt;![endif]--&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;lt;title&amp;gt;Search Center&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;*** End File     &lt;br /&gt;*** Anonymous has rights on File default.aspx: [True]&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The code core is below. The cascade walking class was based on Sanjay’s class defined at &lt;a title="http://blogs.msdn.com/b/sanjaynarang/archive/2009/04/07/find-sharepoint-object-type-from-url.aspx" href="http://blogs.msdn.com/b/sanjaynarang/archive/2009/04/07/find-sharepoint-object-type-from-url.aspx"&gt;http://blogs.msdn.com/b/sanjaynarang/archive/2009/04/07/find-sharepoint-object-type-from-url.aspx&lt;/a&gt; .&lt;/p&gt;  &lt;p&gt;You can download code and executable here: &lt;a title="http://rodneyviana.codeplex.com/releases/view/19103" href="http://rodneyviana.codeplex.com/releases/view/19103"&gt;http://rodneyviana.codeplex.com/releases/view/19103&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It works for SharePoint 2010 but you have to change the references and recompile using 14.x assemblies.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;using System;     &lt;br /&gt;using System.Collections.Generic;      &lt;br /&gt;using System.Collections.Specialized;      &lt;br /&gt;using System.Linq;      &lt;br /&gt;using System.Text;      &lt;br /&gt;using System.Web;      &lt;br /&gt;using Microsoft.SharePoint;      &lt;br /&gt;using Microsoft.SharePoint.Administration;      &lt;br /&gt;using Microsoft.SharePoint.Deployment;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;namespace CheckEffectiveProperties     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public class SPObjType      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public Guid objectGuid;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public object obj;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string url;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string siteRelativeUrl;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public SPDeploymentObjectType objType;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public StringBuilder message = new StringBuilder(2000);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public SPBasePermissions currUserRights;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public SPBasePermissions testUser;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public SPBasePermissions anonymousMask;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public bool? isAnonymousEnabled = null;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public static string EnumeratePermission(SPBasePermissions Mask)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; StringBuilder sb = new StringBuilder(100);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sb.AppendFormat(&amp;quot;Perm Mask&amp;#160; -&amp;#160; Hex: {0} Binary {1}\n&amp;quot;, ((ulong)Mask).ToString(&amp;quot;x8&amp;quot;), Convert.ToString((Int64)Mask, 2));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; foreach (string permName in Enum.GetNames(typeof(SPBasePermissions)))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ulong i = (ulong)Mask &amp;amp; (ulong)(Enum.Parse(typeof(SPBasePermissions), permName));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (i &amp;gt; 0)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sb.Append(String.Format(&amp;quot;&amp;#160;&amp;#160;&amp;#160; {0} Hex [{1}] Binary [{2}]\n&amp;quot;, permName, i.ToString(&amp;quot;x8&amp;quot;),&amp;#160; Convert.ToString((Int64)i, 2)));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return sb.ToString();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void GetFile(SPFile File, SPBasePermissions Mask)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; byte[] binFile = File.OpenBinary();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ASCIIEncoding asc = new ASCIIEncoding();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string fileContent = asc.GetString(binFile);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; message.AppendFormat(&amp;quot;\n*** File {0} content:\n\n{1}\n\n&amp;quot;, File.Name, fileContent);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; message.Append(&amp;quot;\n*** End File&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (File.Item != null)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; message.AppendFormat(&amp;quot;\n*** Anonymous has rights on File {0}: [{1}]\n\n&amp;quot;, File.Name, File.Item.DoesUserHavePermissions(Mask));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; message.AppendFormat(&amp;quot;\n*** Unable to test Anonymous rights on File {0}\n\n&amp;quot;, File.Name);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; catch (Exception ex)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; message.AppendFormat(&amp;quot;\n\n***************&amp;#160; Error opening file {0}: {1}&amp;#160; ************\n\n&amp;quot;, File.Name, ex.Message);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; // The class below was originally created by Sanjay Narang to identify the object type from a URL     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // The code for this intent is found here: &lt;/font&gt;&lt;a href="http://blogs.msdn.com/b/sanjaynarang/archive/2009/04/07/find-sharepoint-object-type-from-url.aspx"&gt;&lt;font size="1" face="Courier New"&gt;http://blogs.msdn.com/b/sanjaynarang/archive/2009/04/07/find-sharepoint-object-type-from-url.aspx&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; //     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // It was modified to check properties and cascade access (Anonymous | Current User | GivenUser)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160; for an object pointed by Rodney Viana      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // You have to agree with this license to use this code/application: &lt;/font&gt;&lt;a href="http://rodneyviana.codeplex.com/license"&gt;&lt;font size="1" face="Courier New"&gt;http://rodneyviana.codeplex.com/license&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; // Details of the implementation can be found at: &lt;/font&gt;&lt;a href="http://blogs.msdn.com/rodneyviana"&gt;&lt;font size="1" face="Courier New"&gt;http://blogs.msdn.com/rodneyviana&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; // This project can be downloaded at: &lt;/font&gt;&lt;a href="http://rodneyviana.codeplex.com/releases/view/19103"&gt;&lt;font size="1" face="Courier New"&gt;http://rodneyviana.codeplex.com/releases/view/19103&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; class SanjayMossUtilities     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public SPObjType GetObjectTypeFromURL(string passedUrl, string User)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SPObjType oType = new SPObjType();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objType = SPDeploymentObjectType.Invalid;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objectGuid = Guid.Empty;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SPSite site = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SPWeb web = null;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SPList list = null;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.obj = null;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.url = null;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.siteRelativeUrl = null;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NameValueCollection queryParams = null;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.url = GetModifiedUrl(passedUrl, out queryParams);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; site = new SPSite(oType.url);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;**** Start Miscellaneous for Site {0}\n&amp;quot;, site.Url);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;IIS Allow Anonymous:&amp;#160; [{0}]\n&amp;quot;, site.IISAllowsAnonymous);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;IIS is impersonating: [{0}]\n&amp;quot;, site.Impersonating);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;Zone:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [{0}]\n&amp;quot;, site.Zone.ToString());      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;Host Name:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [{0}]\n&amp;quot;, site.HostName);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;Write Locked:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [{0}]\n&amp;quot;, site.WriteLocked);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;**** End Miscellaneous for Site\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; web = site.OpenWeb();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;**** Start Miscellaneous for Web {0}\n&amp;quot;, web.Url);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;Web Allow Anonymous:&amp;#160; [{0}]\n&amp;quot;, web.AllowAnonymousAccess);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;Anonymous Access to Lists and Libraries:&amp;#160; [{0}]\n&amp;quot;, web.AnonymousState.ToString());      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (web.AllowAnonymousAccess)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;********* Start of List of Rights to anonymous in this web\n&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(SPObjType.EnumeratePermission(web.AnonymousPermMask64));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;********* End of List of Rights to anonymous in this web\n\n&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!String.IsNullOrEmpty(User))     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;********* Start of List of Rights for User {0}\n&amp;quot;, User);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(SPObjType.EnumeratePermission(web.GetUserEffectivePermissions(User)));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;********* End of List of Rights\n\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string curUser = Environment.UserDomainName + &amp;quot;\\&amp;quot; + Environment.UserName;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (User.ToLower().Trim() != curUser.ToLower().Trim())      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;********* Start of List of Rights for Current User {0}\n&amp;quot;, curUser);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(SPObjType.EnumeratePermission(web.GetUserEffectivePermissions(curUser)));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;********* End of List of Rights\n\n&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;**** End Miscellaneous for Web\n\n&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (oType.url.Equals(site.Url, StringComparison.OrdinalIgnoreCase))     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objectGuid = site.ID;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objType = SPDeploymentObjectType.Site;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return oType;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (oType.url.Equals(web.Url, StringComparison.OrdinalIgnoreCase))     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objectGuid = web.ID;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objType = SPDeploymentObjectType.Web;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return oType;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.siteRelativeUrl = oType.url.TrimStart(web.Url.ToCharArray());&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; list = web.GetList(oType.url);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; catch(Exception ex)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;\n\n&amp;#160; *******&amp;#160; Error trying to retrieve List : {0}&amp;#160; ***** \n\n&amp;quot;, ex.Message);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; list = null;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (null != list )     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objectGuid = list.ID;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objType = SPDeploymentObjectType.List;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;**** Start Miscellaneous for List {0} at {1}\n&amp;quot;, list.Title, list.DefaultViewUrl);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;Access to Template List is Restricted&amp;#160;&amp;#160;&amp;#160;&amp;#160; :&amp;#160; [{0}]\n&amp;quot;, list.RestrictedTemplateList);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;Users Access Limited to Items they Created:&amp;#160; [{0}]\n&amp;quot;, (list.ReadSecurity==2));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;Anonymous can access&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; :&amp;#160; [{0}]\n&amp;quot;, list.DoesUserHavePermissions(list.AnonymousPermMask64));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;Everyone can view List&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; :&amp;#160; [{0}]\n&amp;quot;, list.AllowEveryoneViewItems);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;********* Start of List of Rights to anonymous in this List\n&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(SPObjType.EnumeratePermission(list.AnonymousPermMask64));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;********* End of List of Rights to anonymous in this List\n\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!String.IsNullOrEmpty(User))     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;********* Start of List of Rights for User {0}\n&amp;quot;, User);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(SPObjType.EnumeratePermission(list.GetUserEffectivePermissions(User)));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;********* End of List of Rights\n\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (User.ToLower().Trim() != curUser.ToLower().Trim())      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;********* Start of List of Rights for Current User {0}\n&amp;quot;, curUser);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(SPObjType.EnumeratePermission(list.GetUserEffectivePermissions(curUser)));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;********* End of List of Rights\n\n&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;**** End Miscellaneous for List\n\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (oType.siteRelativeUrl.Equals(list.RootFolder.Url, StringComparison.OrdinalIgnoreCase))     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return oType;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // if we are here, it means URL is none of these:      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // site, web, list      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // So, it can be either file, folder or a list item.      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Finding that is intricated.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.obj = web.GetObject(oType.url);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (null != oType.obj)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SPListItem item = (oType.obj as SPListItem);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (item != null)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!String.IsNullOrEmpty(User))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;**** Start Miscellaneous for List Item {0} at {1}\n&amp;quot;, item.Name, item.Url);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;Anonymous has access to list item&amp;#160;&amp;#160;&amp;#160; :&amp;#160; [{0}]\n&amp;quot;, item.DoesUserHavePermissions( list.AnonymousPermMask64));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;Permission Inheritance is broken&amp;#160;&amp;#160;&amp;#160;&amp;#160; :&amp;#160; [{0}]\n&amp;quot;, item.HasUniqueRoleAssignments);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(SPObjType.EnumeratePermission(web.AnonymousPermMask64));&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;********* Start of List of Rights for User {0}\n&amp;quot;, User);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(SPObjType.EnumeratePermission(item.GetUserEffectivePermissions(User)));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;********* End of List of Rights\n\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (User.ToLower().Trim() != curUser.ToLower().Trim())      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;********* Start of List of Rights for Current User {0}\n&amp;quot;, curUser);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(SPObjType.EnumeratePermission(item.GetUserEffectivePermissions(curUser)));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;********* End of List of Rights\n\n&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;********* Item Xml\n&amp;quot;, curUser);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;{0}\n&amp;quot;, item.Xml);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;********* End of Item XML\n\n&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;********* Role Assignments Xml\n&amp;quot;, curUser);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.AppendFormat(&amp;quot;{0}\n&amp;quot;, item.RoleAssignments.Xml);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;********* End of Role Assignments Xml\n\n&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.message.Append(&amp;quot;**** End Miscellaneous for List Item\n\n&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (oType.obj is SPFile)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Generally, we get here for Forms Pages,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // such as DispForm.aspx, AllItems.aspx      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // so, a SPFile object could be a list item Or      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // a folder in a list or a Folder&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Pages in root of the web are also returned as      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // SPFiles e.g. &lt;/font&gt;&lt;a href="http://moss/default.aspx"&gt;&lt;font size="1" face="Courier New"&gt;http://moss/default.aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // The URLs that point to a file in doc lib are      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // returned as SPListItem by GetObject method      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SPFile file = oType.obj as SPFile;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (null != queryParams)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // The logic to identify folder or item has      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // been explained in ValidateQueryString      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string idValue = queryParams[&amp;quot;ID&amp;quot;];      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string folderValue = queryParams[&amp;quot;RootFolder&amp;quot;];      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (null != idValue)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; item = list.GetItemById(int.Parse(idValue));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objectGuid = item.UniqueId;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objType = SPDeploymentObjectType.ListItem;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return oType;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else if (null != folderValue)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SPFolder folder = web.GetFolder(folderValue);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objectGuid = folder.UniqueId;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objType = SPDeploymentObjectType.Folder;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return oType;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Deployyment Object Type is: Invalid, so no need      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // to do anything      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objectGuid = file.UniqueId;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objType = SPDeploymentObjectType.File;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.GetFile(file, web.AnonymousPermMask64);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return oType;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else if (oType.obj is SPFolder)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SPFolder folder = oType.obj as SPFolder;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objectGuid = folder.UniqueId;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objType = SPDeploymentObjectType.Folder;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return oType;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else if (oType.obj is SPListItem)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; item = oType.obj as SPListItem;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // item can contain a folder of file also. e.g.      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // &lt;/font&gt;&lt;a href="http://moss.litwareinc.com/Documents/folderinlibrary"&gt;&lt;font size="1" face="Courier New"&gt;http://moss.litwareinc.com/Documents/folderinlibrary&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // &lt;/font&gt;&lt;a href="http://moss.litwareinc.com/Documents/FolderInLibrary/File2.doc"&gt;&lt;font size="1" face="Courier New"&gt;http://moss.litwareinc.com/Documents/FolderInLibrary/File2.doc&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (null != item.Folder)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objectGuid = item.Folder.UniqueId;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objType = SPDeploymentObjectType.Folder;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return oType;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else if (null != item.File)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objectGuid = item.File.UniqueId;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objType = SPDeploymentObjectType.File;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.GetFile(item.File, web.AnonymousPermMask64);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return oType;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objectGuid = item.UniqueId;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oType.objType = SPDeploymentObjectType.ListItem;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return oType;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; finally      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (web != null)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; web.Dispose();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (site != null)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; site.Dispose();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return oType;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private string GetModifiedUrl(string url, out NameValueCollection queryParams)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string modUrl = url; //modified url      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string querystring = string.Empty;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; queryParams = null;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // if it's a site or web or folder, user can pass '/' at      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // the end, which we need to trim      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (url.EndsWith(&amp;quot;/&amp;quot;))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; modUrl = url.TrimEnd(new char[] { '/' });      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // we need to get the URL without query string as it creates     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // problem getting the parent folder      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (url.Contains(&amp;quot;?&amp;quot;))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int tmp = url.IndexOf(&amp;quot;?&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; modUrl = url.Substring(0, tmp);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; querystring = url.Substring(tmp + 1);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; queryParams = HttpUtility.ParseQueryString(querystring);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // apply custom rules      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ValidateQueryString(queryParams);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return modUrl;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private void ValidateQueryString(NameValueCollection queryParams)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // when there's query string in the URL, the URL can point to a       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // list item (in a list) or a folder.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // For example if an item is a folder       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // 'FolderInTasksList' the URL of item would look like this&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // &lt;/font&gt;&lt;a href="http://moss.litwareinc.com/Lists/Tasks/DispForm.aspx?ID=2&amp;amp;RootFolder=/Lists/Tasks/FolderInTasksList"&gt;&lt;font size="1" face="Courier New"&gt;http://moss.litwareinc.com/Lists/Tasks/DispForm.aspx?ID=2&amp;amp;RootFolder=/Lists/Tasks/FolderInTasksList&lt;/font&gt;&lt;/a&gt;&lt;font size="1" face="Courier New"&gt; OR     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // &lt;/font&gt;&lt;a href="http://moss.litwareinc.com/Lists/Tasks/DispForm.aspx?ID=2&amp;amp;RootFolder=%2fLists%2fTasks%2fFolderInTasksList"&gt;&lt;font size="1" face="Courier New"&gt;http://moss.litwareinc.com/Lists/Tasks/DispForm.aspx?ID=2&amp;amp;RootFolder=%2fLists%2fTasks%2fFolderInTasksList&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // And if we need Url of the folder, it would be like this:      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // &lt;/font&gt;&lt;a href="http://moss.litwareinc.com/Lists/Tasks/AllItems.aspx?RootFolder=%2fLists%2fTasks%2fFolderInTasksList&amp;amp;FolderCTID=&amp;amp;View=%7bD8E1251D%2d829B%2d4FCE%2d9127%2d5E4FC6E6A5C4%7d"&gt;&lt;font size="1" face="Courier New"&gt;http://moss.litwareinc.com/Lists/Tasks/AllItems.aspx?RootFolder=%2fLists%2fTasks%2fFolderInTasksList&amp;amp;FolderCTID=&amp;amp;View=%7bD8E1251D%2d829B%2d4FCE%2d9127%2d5E4FC6E6A5C4%7d&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // From the above two examples, I'm applying the following       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // rules on the query string       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // 1. It can contain only these keys: ID, RootFolder, FolderCTID, View      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160; If there's any other key, i would treat that as invalid query string      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // 2. ID and RootFolder should never be empty      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160; otherwise, raise exception here rather than hitting that later      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // 3. the query string has to contain at least one of the following      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&amp;#160;&amp;#160;&amp;#160; a. ID, b. RootFolder&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Build a string collection with possible values. For comparison,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // we'll use lower case only      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; StringCollection strColl = new StringCollection();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strColl.Add(&amp;quot;ID&amp;quot;.ToLower());      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strColl.Add(&amp;quot;RootFolder&amp;quot;.ToLower());      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strColl.Add(&amp;quot;FolderCTID&amp;quot;.ToLower());      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strColl.Add(&amp;quot;View&amp;quot;.ToLower());&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Apply the Rules     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bool hasID = false;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bool hasRootFolder = false;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; foreach (string str in queryParams.AllKeys)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // can be used for debugging      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Console.WriteLine(&amp;quot;Name: &amp;quot; + str + &amp;quot; | Value: &amp;quot; + queryParams[str]);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Rule 1     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!(strColl.Contains(str.ToLower())))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; throw new ArgumentException(&amp;quot;Invalid argument in passed query string&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Rule 2      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (str.Equals(&amp;quot;id&amp;quot;, StringComparison.OrdinalIgnoreCase))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; hasID = true;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (queryParams[str].Equals(String.Empty))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; throw new ArgumentException(&amp;quot;Query string parameter \&amp;quot;&amp;quot; + str + &amp;quot;\&amp;quot; can not be empty.&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Rule 2      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (str.Equals(&amp;quot;rootfolder&amp;quot;, StringComparison.OrdinalIgnoreCase))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; hasRootFolder = true;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (queryParams[str].Equals(String.Empty))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; throw new ArgumentException(&amp;quot;Query string parameter \&amp;quot;&amp;quot; + str + &amp;quot;\&amp;quot; can not be empty.&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Rule 3      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!(hasID || hasRootFolder))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; throw new ArgumentException(&amp;quot;Query string must have at least one parameter from these: ID and RootFolder&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10089739" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/rodneyviana/archive/tags/_2200_Access+Denied_2200_+Anonymous+User+Rights+MOSS/">"Access Denied" Anonymous User Rights MOSS</category></item><item><title>Creating a Web Application using Kerberos as authentication instead of NTLM in SharePoint 2010 programmatically via PowerShell</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2010/10/08/creating-a-web-application-using-kerberos-as-authentication-instead-of-ntlm-in-sharepoint-2010-programmatically-via-powershell.aspx</link><pubDate>Fri, 08 Oct 2010 20:41:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10073470</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=10073470</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=10073470</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2010/10/08/creating-a-web-application-using-kerberos-as-authentication-instead-of-ntlm-in-sharepoint-2010-programmatically-via-powershell.aspx#comments</comments><description>&lt;p&gt;If you have ever tried to programmatically create a Web Application using Kerberos as authentication provider you noticed that the Authentication Provider resets to NTLM. The cmdlet to create a new Web Application is New-SPWebApplication (or New-SPWebApplicationExtension to extending an exixting one) which comes with the toggle parameter to disable Kerberos authentication (DisableKerberosAuthentication). It happens, though, that by default DisableKerberosAuthentication is set to True and as it is toggle type it does not enable the use of “DisableKerberosAuthentication $true”.&lt;/p&gt;  &lt;p&gt;Making a few tests to help respond a forum question I found out that we can circumvent this behavior in two ways:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Mode 1 - Setting Authentication Provider’s property DisableKerberos to false after creating an instance and passing this instance to New-SPWeb*. See example below:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;gt; $ap = (New-SPAuthenticationProvider)     &lt;br /&gt;&amp;gt; $ap | fl&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;DisplayName&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : Windows Authentication     &lt;br /&gt;ClaimProviderName&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : AD      &lt;br /&gt;AllowAnonymous&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : False      &lt;br /&gt;UseBasicAuthentication&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : False      &lt;br /&gt;DisableKerberos&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : True&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&amp;lt;&amp;lt;&amp;lt; Note that Kerberos is disabled by default      &lt;br /&gt;UseWindowsIntegratedAuthentication : True      &lt;br /&gt;AuthenticationRedirectionUrl&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : /_windows/default.aspx      &lt;br /&gt;UpgradedPersistedProperties&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; :&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;gt; $ap.DisableKerberos = $false&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;gt; $ap | fl *&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;DisplayName&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : Windows Authentication     &lt;br /&gt;ClaimProviderName&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : AD      &lt;br /&gt;AllowAnonymous&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : False      &lt;br /&gt;UseBasicAuthentication&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : False      &lt;br /&gt;DisableKerberos&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : False&amp;#160;&amp;#160; &amp;lt;&amp;lt;&amp;lt; Now I made sure that Kerberos is enabled      &lt;br /&gt;UseWindowsIntegratedAuthentication : True      &lt;br /&gt;AuthenticationRedirectionUrl&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : /_windows/default.aspx      &lt;br /&gt;UpgradedPersistedProperties&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : {}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;gt; New-SPWebApplication -Name &amp;quot;Kerberos App&amp;quot; -ApplicationPool &amp;quot;SharePoint - 80&amp;quot; -port 90 -url &lt;a href="http://www.contoso.com"&gt;http://www.contoso.com&lt;/a&gt; -AuthenticationProvider $ap&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Mode 2 - Forcing the property DisableKerberos to be false during instantiation using a hack (thanks to Dan Holme):&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;gt; $ap = New-SPAuthenticationProvider -DisableKerberos:$false&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;gt; New-SPWebApplication -Name &amp;quot;Kerberos App&amp;quot; -ApplicationPool &amp;quot;SharePoint - 80&amp;quot; -port 90 -url &lt;a href="http://www.contoso.com"&gt;http://www.contoso.com&lt;/a&gt; -AuthenticationProvider $ap&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Or using all in one single line:&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;gt; New-SPWebApplication -Name &amp;quot;Kerberos App&amp;quot; -ApplicationPool &amp;quot;SharePoint - 80&amp;quot; -port 90 -url &lt;a href="http://www.contoso.com"&gt;http://www.contoso.com&lt;/a&gt; –AuthenticationProvider (New-SPAuthenticationProvider -DisableKerberos:$false)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;*** SECOND WORKAROUND CREDIT ***&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Binging around before posting this I found a post where Dan Holme suggests the second workaround:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.windowsitpro.com/article/sharepoint/Power-Trip-PowerShell-Bug-and-Claims.aspx" href="http://www.windowsitpro.com/article/sharepoint/Power-Trip-PowerShell-Bug-and-Claims.aspx"&gt;http://www.windowsitpro.com/article/sharepoint/Power-Trip-PowerShell-Bug-and-Claims.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10073470" width="1" height="1"&gt;</description></item><item><title>ForeFront The Missing Manual</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2010/04/13/forefront-the-missing-manual.aspx</link><pubDate>Wed, 14 Apr 2010 01:22:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9995515</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=9995515</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=9995515</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2010/04/13/forefront-the-missing-manual.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;My friend Yuri Diogenes, one of the security gurus here at Microsoft, in partnership with Jim Harrison, Mohit Saxena and having Tom Shinder as Technical Reviewer released last February the Microsoft Press Administrator’s Companion for Forefront TMG 2010, the new generation of Microsoft Firewall, which had ISA Server as it predecessor. The book has around 1050 pages of technical content, and it is the only official Forefront TMG 2010 book released by Microsoft Press. If you want to try it before buy, read the two sample chapters available at &lt;a href="http://blogs.msdn.com/microsoft_press/archive/2010/01/13/forefront-tmg-2010-administrator-s-companion-sample-chapters.aspx"&gt;MSPress Blog&lt;/a&gt;. For more information on this book you can access &lt;a href="http://www.mstmgbook.org"&gt;www.mstmgbook.org&lt;/a&gt;. The book is now available at &lt;a href="http://www.amazon.com/Microsoft-Forefront-Management-Administrators-Administrators/dp/0735626383"&gt;Amazon.com&lt;/a&gt; with 37% discount, better hurry to get yours.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9995515" width="1" height="1"&gt;</description></item><item><title>Some thoughts on Impersonation</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2009/12/30/some-thoughts-on-impersonation.aspx</link><pubDate>Wed, 30 Dec 2009 23:57:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9942451</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=9942451</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=9942451</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2009/12/30/some-thoughts-on-impersonation.aspx#comments</comments><description>&lt;p&gt;I normally talk about SharePoint topics but this post is also important for non-SharePoint people. First let me explain what is the relationship between impersonation and SharePoint, or better, the relationship between SharePoint and the thread [security] token. &lt;strong&gt;SPRequest&lt;/strong&gt; is the unmanaged low level class in SharePoint that works as HtppHandler for SharePoint requests. In the very heart of the security checks in SPRequest, it tries to get the SID of the user being impersonated in the current thread (&lt;strong&gt;Microsoft.SharePoint.Library.SPRequestInternalClass.OpenWebInternal&lt;/strong&gt;() will be the last managed stack entry followed by some variation of &lt;strong&gt;Microsoft.SharePoint.Library.SPRequest &lt;/strong&gt;when an error occurs). In some occasions, the thread token cannot be retrieved and you will see an error like &lt;strong&gt;System.Security.Authentication.AuthenticationException&lt;/strong&gt;. This situation is normally related to custom code when there are other levels of Http Handlers involved, however it is potentially possible to happen in other situations which I am not aware of.&lt;/p&gt;  &lt;p&gt;I have faced such problem and being in a production environment and not reproducible outside that environment, I was unable to do a live debug of the problem. I’ve got the iDNA trace which is the closest you can get to a live debug in a situation like that. I could confirm the very point where the application was failing (and the last point of failure was indeed in SharePoint as most errors end up in kernel.dll even though the problem is not in kernel.dll). In normal circumstances the thread token can be retrieved. The problem always happens when the custom application is involved (and the custom http handlers are in the way of SharePoint Http Handler). To make things even worse the custom application was not failing in other environments. All indications led to problems in the authentication mechanism of the environment (read this as Active Directory Problems). In order to create some tests that would help identify the problem in the environment I put together an application to test impersonation of threads and “logon as” kind of behavior. I am sure this could be done in .NET but I decided to use C++ instead because it showed to be easier to implement (and reuse some available code).&lt;/p&gt;  &lt;p&gt;The source code and installation binaries can be found at &lt;a href="http://rodneyviana.codeplex.com"&gt;http://rodneyviana.codeplex.com&lt;/a&gt; (downloads).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/SomethoughtsonImpersonation_F1C4/image_6.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="129" alt="image" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/SomethoughtsonImpersonation_F1C4/image_thumb_2.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Running in elevated privilege (not necessary but since I implemented I kept the code)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;When you start an application there is no way you can change the privileges of that instance, you will have to run it again as Administrator to make it work. If you verify how Task Manager works in Vista and above you will notice that seeing process for all users (which requires run in elevated privileges) requires a restart in Task Manager.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/SomethoughtsonImpersonation_F1C4/image_4.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="106" alt="image" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/SomethoughtsonImpersonation_F1C4/image_thumb_1.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This is the code that implement it:&lt;/p&gt;  &lt;p&gt;&lt;font face="courier " size="1"&gt;void CImpersonationDlg::OnBnClickedButton4()     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // TODO: Add your control notification handler code here      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SHELLEXECUTEINFO sei = { sizeof(SHELLEXECUTEINFO) };      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int argc;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PWSTR *argsv = CommandLineToArgvW(GetCommandLine(), &amp;amp;argc);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(argc == 0)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PrintError(L&amp;quot;Error retrieving path. Elevation was aborted&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="courier " size="1"&gt;&amp;#160;&amp;#160;&amp;#160; // Get Process Full Path     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sei.lpFile = (LPCWSTR)argsv[0]; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="courier " size="1"&gt;&amp;#160;&amp;#160;&amp;#160; // Ask for privileges elevation.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sei.lpVerb = _T(&amp;quot;runas&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="courier " size="1"&gt;&amp;#160;&amp;#160;&amp;#160; sei.nShow = SW_SHOWNORMAL;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; bool closeWindow = true;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(!ShellExecuteEx(&amp;amp;sei))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PrintError(L&amp;quot;Unable to elevate privileges&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; closeWindow = false;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; HeapFree(GetProcessHeap(), 0, argsv);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(closeWindow)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this-&amp;gt;CloseWindow();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Getting the Thread Token&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In my test I get the same error that the custom application was getting (it is normal to get the error when you do not impersonate).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/SomethoughtsonImpersonation_F1C4/image_8.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="247" alt="image" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/SomethoughtsonImpersonation_F1C4/image_thumb_3.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This is the code for that:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;void CImpersonationDlg::OnBnClickedButtonThreadget()     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // TODO: Add your control notification handler code here      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; HANDLE tokenHandle;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ClearFields();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, FALSE, &amp;amp;tokenHandle))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PrintError(L&amp;quot;Unable to get Current Thread Token. Try to impersonate first.&amp;quot;);&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; AfxMessageBox(L&amp;quot;Current Thread Token retrieved successfully&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FillUserInformationFromToken(tokenHandle);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CloseHandle(tokenHandle);      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;And the code to show the latest system error formatted:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;// Print System Error adapted from &lt;/font&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms680582(VS.85).aspx"&gt;&lt;font face="Courier" size="1"&gt;http://msdn.microsoft.com/en-us/library/ms680582(VS.85).aspx&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font face="Courier" size="1"&gt;void CImpersonationDlg::PrintError(LPTSTR lpszFunction)      &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Retrieve the system error message for the last-error code &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; LPVOID lpMsgBuf;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; LPVOID lpDisplayBuf;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DWORD dw = GetLastError(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; FormatMessage(     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FORMAT_MESSAGE_ALLOCATE_BUFFER |       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FORMAT_MESSAGE_FROM_SYSTEM |      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FORMAT_MESSAGE_IGNORE_INSERTS,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NULL,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dw,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (LPTSTR) &amp;amp;lpMsgBuf,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0, NULL ); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; // Display the error message &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR));       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; StringCchPrintf((LPTSTR)lpDisplayBuf,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LocalSize(lpDisplayBuf) / sizeof(TCHAR),      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TEXT(&amp;quot;%s\nFailed with error %d: %s&amp;quot;),       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lpszFunction, dw, lpMsgBuf);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; MessageBox((LPCTSTR)lpDisplayBuf, TEXT(&amp;quot;Error&amp;quot;), MB_OK); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; LocalFree(lpMsgBuf);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; LocalFree(lpDisplayBuf);      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Getting Process Token&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Process Token must exist. You may not have rights to see it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/SomethoughtsonImpersonation_F1C4/image_10.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="128" alt="image" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/SomethoughtsonImpersonation_F1C4/image_thumb_4.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is the code:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;void CImpersonationDlg::OnBnClickedButtonProcessget()     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // TODO: Add your control notification handler code here      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; HANDLE tokenHandle;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ClearFields();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &amp;amp;tokenHandle))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PrintError(L&amp;quot;Unable to get Current Process Token&amp;quot;);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FillUserInformationFromToken(tokenHandle);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; AfxMessageBox(L&amp;quot;Process Token was retrieved successfully&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(tokenHandle)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CloseHandle(tokenHandle);      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Code for getting user information from the token:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;void CImpersonationDlg::FillUserInformationFromToken(HANDLE Token)     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TCHAR user[MAX_PATH], domain[MAX_PATH];      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DWORD sizeSID;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DWORD sizeUser = sizeof(user);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DWORD sizeDomain = sizeof(domain); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; SID_NAME_USE sidNameUse;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TOKEN_USER* tokenUser = (TOKEN_USER*)malloc(MAX_PATH);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TCHAR* sidString;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(!GetTokenInformation(Token, TokenUser, tokenUser, MAX_PATH, &amp;amp;sizeSID))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PrintError(L&amp;quot;Unable to retrieve user info.&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ConvertSidToStringSid(tokenUser-&amp;gt;User.Sid, &amp;amp;sidString);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; textSID.SetWindowText(sidString);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LocalFree(sidString);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(!LookupAccountSid(NULL, tokenUser-&amp;gt;User.Sid, user, &amp;amp;sizeUser, domain, &amp;amp;sizeDomain, &amp;amp;sidNameUse))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PrintError(L&amp;quot;Unable to retrieve user infomation (UserName and Domain). Only SID was retrieved&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; } else     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; textDomain.SetWindowText(domain);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; textUserName.SetWindowText(user);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //textPassword.SetWindowText(L&amp;quot;nopassword&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Impersonating the process user (button Impersonate Self)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;After doing this you can retrieve the thread token.&lt;/p&gt;  &lt;p&gt;Code:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;void CImpersonationDlg::OnBnClickedButtonImpersonate()     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // TODO: Add your control notification handler code here      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; HANDLE tokenHandle;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ClearFields();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &amp;amp;tokenHandle))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PrintError(L&amp;quot;Unable to get Current Process Token&amp;quot;);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(!ImpersonateLoggedOnUser(tokenHandle))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PrintError(L&amp;quot;Unable to impersonate credential. Try 'Interactive Logon' instead.&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AfxMessageBox(L&amp;quot;Impersonation from Process Token was sucessful&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; btnRevertToSelf.EnableWindow();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ClearFields();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FillUserInformationFromToken(tokenHandle); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(tokenHandle)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CloseHandle(tokenHandle); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Impersonating User you typed in&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In this option you can choose whether to Logon as Network token or Logon as a user. If the user has no logon rights in the computer the attempt will fail (and you would probably would get no error from NETWORK logon). Logging on as network will not enable you to access both Process and Thread tokens (“Revert to Self” will resolve the problem in this case).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Code:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;void CImpersonationDlg::OnBnClickedButtonProcessset()     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // TODO: Add your control notification handler code here      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; HANDLE token;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TCHAR userName[MAX_PATH], domain[MAX_PATH], password[MAX_PATH];      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; textUserName.GetWindowText(userName, sizeof(userName));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; textDomain.GetWindowText(domain, sizeof(domain));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; textPassword.GetWindowText(password, sizeof(password));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; textSID.SetWindowText(L&amp;quot;&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;&amp;#160;&amp;#160;&amp;#160; DWORD logonType = LOGON32_LOGON_NETWORK;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(chkInteractive.GetCheck() == BST_CHECKED)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; logonType = LOGON32_LOGON_INTERACTIVE;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(!LogonUser(userName, domain, password, logonType, LOGON32_PROVIDER_DEFAULT, &amp;amp;token))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PrintError(L&amp;quot;Unable to logon with user credential.&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(!ImpersonateLoggedOnUser(token))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PrintError(L&amp;quot;Unable to impersonate credential.&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AfxMessageBox(L&amp;quot;Impersonation was sucessful. You may want to Impersonate Self now.&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; btnRevertToSelf.EnableWindow();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ClearFields();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FillUserInformationFromToken(token); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(token)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CloseHandle(token);      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Reverting to Self&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Returns to the user that initiated the application.&lt;/p&gt;  &lt;p&gt;Code:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;void CImpersonationDlg::OnBnClickedReverttoself()     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // TODO: Add your control notification handler code here      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // TODO: Add your control notification handler code here      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(!RevertToSelf())      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PrintError(L&amp;quot;Unable to revert to self.&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; AfxMessageBox(L&amp;quot;Revert to Self was successful.&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier" size="1"&gt;}&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9942451" width="1" height="1"&gt;</description></item><item><title>You cannot edit list or document library items on existing SharePoint sites</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2009/12/17/you-cannot-edit-list-or-document-library-items-on-existing-sharepoint-sites.aspx</link><pubDate>Thu, 17 Dec 2009 02:19:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9937989</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=9937989</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=9937989</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2009/12/17/you-cannot-edit-list-or-document-library-items-on-existing-sharepoint-sites.aspx#comments</comments><description>&lt;p&gt;This problem was fixed in &lt;a href="http://support.microsoft.com/kb/961175" target="_blank"&gt;KB961175&lt;/a&gt;. The patch will keep the problem from happening again in new lists/libraries you create after applying the patch. However if you have a backup before the patch the restored contents will continue to show the same error. It is also true to existing items. In order to fix this other issue, Microsoft released &lt;a href="http://support.microsoft.com/kb/971351" target="_blank"&gt;KB971351&lt;/a&gt; showing some code to fix the problem in existing items. There are two code blocks: one for webs and another for lists. At the time of this writing the codes contained some minor typos and also some memory leaks. Nothing that would prevent a developer to make it work. The memory leak is not an issue as well since it is supposed to only run once. I understand that most of the support people are not that into coding, I put together a more intuitive code together which can be downloaded here (including executable):&lt;/p&gt;  &lt;p&gt;&lt;a title="http://rodneyviana.codeplex.com/" href="http://rodneyviana.codeplex.com/"&gt;http://rodneyviana.codeplex.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How do you know you are experience this problem?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The symptom is having someone with full access to a site collection, web, list or document library being unable to edit list items (user receives access denied) however user can see list items using view item.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Source Code:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You know the disclaimer: I work for Microsoft but the code I put in codeplex is NOT endorsed by Microsoft. This is a community tool and must be treated as such. That being told, the application complies with Microsoft best practices and can be used in your environment if you are experiencing the problems described in KB961175. The application will not change anything if you are not facing the problem described.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This is the full source code:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;using System;     &lt;br /&gt;using System.Collections.Generic;      &lt;br /&gt;using System.Text;      &lt;br /&gt;using Microsoft.SharePoint;      &lt;br /&gt;using System.Xml; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;namespace KB971351     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; class Program      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; static private string RenderXMLPattenAttribute = &amp;quot;RenderXMLUsingPattern&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; static private string webUrl = &amp;quot;&lt;/font&gt;&lt;a href="http://localhost&amp;quot;;"&gt;&lt;font face="Courier New" size="1"&gt;http://localhost&amp;quot;;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; static void FixList()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.Write(&amp;quot;Please enter web site (&lt;/font&gt;&lt;a href="http://localhost):"&gt;&lt;font face="Courier New" size="1"&gt;http://localhost):&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" size="1"&gt; &amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string inputWeb = Console.ReadLine();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!String.IsNullOrEmpty(inputWeb))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; webUrl = inputWeb;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;\nTrying to open web site: {0}&amp;quot;, webUrl);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string listName = null;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; using (SPSite site = new SPSite(webUrl))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;Web site {0} found&amp;quot;, webUrl);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; using (SPWeb web = site.OpenWeb())      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; while (String.IsNullOrEmpty(listName))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.Write(&amp;quot;Enter list name or press [enter] to display all lists: &amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; listName = Console.ReadLine();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (String.IsNullOrEmpty(listName))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for (int i = 0; i &amp;lt; web.Lists.Count; i++)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!web.Lists[i].Hidden)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(web.Lists[i].Title);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SPList list = web.Lists[listName];     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SPField f = list.Fields.GetFieldByInternalName(&amp;quot;PermMask&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string s = f.SchemaXml;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XmlDocument xd = new XmlDocument();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xd.LoadXml(s);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XmlElement xe = xd.DocumentElement;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (xe.Attributes[RenderXMLPattenAttribute] == null)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XmlAttribute attr = xd.CreateAttribute(RenderXMLPattenAttribute);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; attr.Value = &amp;quot;TRUE&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xe.Attributes.Append(attr);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string strXml = xe.OuterXml;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f.SchemaXml = strXml;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;SUCESS: problem identified in KB 971351 was found and fixed&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;WARNING: problem identified in KB 971351 was NOT found. No change was made&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; catch (Exception ex)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;\nApplication Failed with error: {0}&amp;quot;, ex.Message);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;No changes were made. Please run application again&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; static void FixWeb()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.Write(&amp;quot;Please enter web site (&lt;/font&gt;&lt;a href="http://localhost):"&gt;&lt;font face="Courier New" size="1"&gt;http://localhost):&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" size="1"&gt; &amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string inputWeb = Console.ReadLine();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!String.IsNullOrEmpty(inputWeb))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; webUrl = inputWeb;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;\nTrying to open web site: {0}&amp;quot;, webUrl);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; using (SPSite site = new SPSite(webUrl))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;Web site {0} found&amp;quot;, webUrl);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; using (SPWeb web = site.OpenWeb())      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SPField f = web.Fields.GetFieldByInternalName(&amp;quot;PermMask&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string s = f.SchemaXml;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XmlDocument xd = new XmlDocument();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xd.LoadXml(s);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XmlElement xe = xd.DocumentElement;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (xe.Attributes[RenderXMLPattenAttribute] == null)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XmlAttribute attr = xd.CreateAttribute(RenderXMLPattenAttribute);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; attr.Value = &amp;quot;TRUE&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xe.Attributes.Append(attr);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string strXml = xe.OuterXml;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f.SchemaXml = strXml;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;SUCESS: problem identified in KB 971351 was found and fixed&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;WARNING: problem identified in KB 971351 was NOT found. No change was made&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; catch (Exception ex)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;\nApplication Failed with error: {0}&amp;quot;, ex.Message);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;No changes were made. Please run application again&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; static void Main(string[] args)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;Implementation of code in KB 971351&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;====================================&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;Written by Rodney Viana&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;More info at &lt;/font&gt;&lt;a href="http://blogs.msdn.com/rodneyviana"&gt;&lt;font face="Courier New" size="1"&gt;http://blogs.msdn.com/rodneyviana&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" size="1"&gt; and &lt;/font&gt;&lt;a href="http://support.microsoft.com/kb/971351"&gt;&lt;font face="Courier New" size="1"&gt;http://support.microsoft.com/kb/971351&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" size="1"&gt; \n&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;This sample application is supplied \&amp;quot;AS IS\&amp;quot;&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;It is ONLY for demonstration/proof of concept purposes&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;If you DO NOT agree with the license at:\n\thttp://www.codeplex.com/rodneyviana/license\n\tPress Ctrl+C\n\n\n&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;Choose one of the options below:&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;0. If you don't want to do it now and end the application&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;1. If you are experiencing problems in anye web site fields&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;2. If you are experiencing problems in a list or document library&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ConsoleKeyInfo key = new ConsoleKeyInfo();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; while(key == null || (key.KeyChar != '0' &amp;amp;&amp;amp; key.KeyChar != '1' &amp;amp;&amp;amp; key.KeyChar != '2'))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; key = Console.ReadKey();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(key.KeyChar == '1')     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;You have chosen to fix a web site&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FixWeb();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(key.KeyChar == '2')     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;You have chosen to fix a list&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FixList();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(key.KeyChar == '0')     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;You have chosen to abort application&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.Write(&amp;quot;Press any key...&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.ReadKey(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9937989" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/rodneyviana/archive/tags/_2200_Access+Denied_2200_+_2200_Edit+List+Item_2200_+Edit+Document+Library+Item/">"Access Denied" "Edit List Item" Edit Document Library Item</category></item><item><title>MOSS Load Test</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2009/09/03/moss-load-test.aspx</link><pubDate>Thu, 03 Sep 2009 08:23:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9890745</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=9890745</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=9890745</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2009/09/03/moss-load-test.aspx#comments</comments><description>&lt;p&gt;I had put together an application to perform Load Test in both Microsoft Office SharePoint Server (MOSS) 2007 and Windows SharePoint Services (WSS) 3.0. The application as it is now is more “Load” than “Test”. The next step will be to save the results in a database and enable live queries. I am planning to use the Jet Database (Access). I am releasing this intermediate version because if used with other tools it can complete the cycle. &lt;strong&gt;This can be used to test capacity problems before publishing a SharePoint portal&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;This is how the application works: you enter a SharePoint URL (Web Collection or Web) and the application enumerates all items (lists, list items, webs, sub-webs, documents, pages etc) and hit each once for every user you define. In the screen below we will simulate 5 users hitting the site for 30 minutes. You can run the application from any workstation. You don’t have to run it from the server. All operations used in this application are supported in production environment (i.e. it only uses webservices and browser requests) and it does not alter any configuration nor add any content. It access the information in a similar way of SharePoint Designer’s.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/MOSSLoadTest_56E/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Initial Settings" border="0" alt="Initial Settings" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/MOSSLoadTest_56E/image_thumb.png" width="244" height="165" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;When you click the “Start” button you are asked to enter your credentials (no anonymous or FBA authentication since it will use the webservices to enumerate the content). Choose current user or enter the credentials if you don’t have the appropriate rights.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/MOSSLoadTest_56E/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Login Window" border="0" alt="Login Window" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/MOSSLoadTest_56E/image_thumb_1.png" width="212" height="244" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;After logging in, the application will enumerate all items and hit them. In this fiddler except you can see how it silently works:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/MOSSLoadTest_56E/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/MOSSLoadTest_56E/image_thumb_2.png" width="244" height="142" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If there is any error (unauthorized user, resource not found or time out) it will show up in the error list view. Note that some errors from SharePoint will not show in this version as it does not return a status error. A tool like Fiddler can help in this gap.&lt;/p&gt;  &lt;p&gt;Full Project including source code can be found here:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://mossloadtest.codeplex.com/" href="http://mossloadtest.codeplex.com/"&gt;http://mossloadtest.codeplex.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I plan to continue this project and feedback is highly appreciated via this blog.&lt;/p&gt;  &lt;p&gt;Notice that this is another private project and it is not endorsed or supported by my employer Microsoft. I will try my best to answer questions and fix bugs, but it is an application AS IS.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9890745" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/rodneyviana/archive/tags/MOSS+Load+Test/">MOSS Load Test</category></item><item><title>Presenting MOSS Support Explorer (Not even Beta Yet)</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2009/08/13/presenting-moss-support-explorer-not-even-beta-yet.aspx</link><pubDate>Thu, 13 Aug 2009 04:50:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9867473</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=9867473</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=9867473</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2009/08/13/presenting-moss-support-explorer-not-even-beta-yet.aspx#comments</comments><description>&lt;p&gt;There are some occasions in the course of work as Support Escalation Engineer in Microsoft that we rely heavily in analyzing SharePoint metadata. Installing software in a production environment is a no-no for most companies (or at least it requires a change control request). I had put together a few features in an Explorer like SharePoint GUID that uses web-services and thus does not have to be installed in the server (any desktop will do). The way it is now, it is still very incipient but it enables you to verify most of internal metadata of lists definition and results sets. I had put it in codeplex a long time a go and planned to get back to work with it again soon. This time actually never came. Now, a friend in Australia volunteered to help me finish the application. I am also bringing this back to life because a colleague here at Microsoft, &lt;a href="http://blogs.technet.com/yuridiogenes/archive/2009/08/07/unable-to-access-some-moss-links-when-published-through-isa-server-2006.aspx" target="_blank"&gt;Yuri Diogenes&lt;/a&gt;, from the Security Team worked with me in a MOSS/ISA issue and found the application helpful to identify Alternate Access Mapping (AAM) and Host Headers issues. The application let's you choose your authentication mode with SharePoint (User/Password, Current User or Certificate).&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/PresentingMOSSSupportExplorerNotevenBeta_120A4/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/PresentingMOSSSupportExplorerNotevenBeta_120A4/image_thumb_1.png" width="212" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;After connecting, it lists all site collection lists and libraries:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/PresentingMOSSSupportExplorerNotevenBeta_120A4/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="144" alt="image" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/PresentingMOSSSupportExplorerNotevenBeta_120A4/image_thumb_2.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Including the metadata internals:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/PresentingMOSSSupportExplorerNotevenBeta_120A4/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="168" alt="image" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/PresentingMOSSSupportExplorerNotevenBeta_120A4/image_thumb_3.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You can download it here:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.codeplex.com/MOSSSupportExplorer"&gt;http://www.codeplex.com/MOSSSupportExplorer&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The full source code is also included. Please noticed that this is a personal project I put in Codeplex. This is not a &lt;strong&gt;Microsoft Product&lt;/strong&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9867473" width="1" height="1"&gt;</description></item><item><title>Blobcache will not work if the request url is not in the Alternate Access Mapping list</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2009/06/24/blobcache-will-not-work-if-the-request-url-is-not-in-the-alternate-access-mapping-list.aspx</link><pubDate>Wed, 24 Jun 2009 07:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9800631</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=9800631</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=9800631</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2009/06/24/blobcache-will-not-work-if-the-request-url-is-not-in-the-alternate-access-mapping-list.aspx#comments</comments><description>&lt;p&gt;There are scenarios on which you can access a unique site collection using different URLs even if these URLs are not listed in the Alternate Access Mapping (AAM) of the application. This normally does not cause any problem and even though you should not, you can live without adding DNS/Netbios aliases to AAM. If you plan to use blob cache, however, make sure that you list all URLs you may think of in the AAM.&lt;/p&gt;  &lt;p&gt;One probable and common scenario is that on which you have multiples Web Front End (WFEs) and they are reached via Network Load Balancer (NLB). You did not add any host header when you created the web application and yet you can access the web application using both the local server name (eg. MOSS-WFE01) or the DNS entry (eg. http://myportal.contoso.com). However, when you add blob cache functionality to the site (see how to do this &lt;a href="http://office.microsoft.com/en-us/sharepointserver/HA101762841033.aspx" target="_blank" mce_href="http://office.microsoft.com/en-us/sharepointserver/HA101762841033.aspx"&gt;here&lt;/a&gt;), the cache does not seem to (and actually does not) work.&lt;/p&gt;  &lt;p&gt;It happens because blob cache serving and caching happens in a level above SharePoint. It relies on the class HttpApplication rather than WebApplication. If necessary it goes to SharePoint to get the content and cache or just skip the file. If the file is already cached it retrieves from the file system rather than via SharePoint. At some point the blob cache trims the resource accordingly to user permission. At this point SharePoint has to be inquired and if part of the URL containing the web application is not in the AAM, SharePoint will assume the user has no rights and will not return anything at all.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How to verify if I am using the correct Alternate Access Mapping in my Network Load Balancer&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Knowing the exact host header coming from the NLB is not so easy. Depending on the configuration, the NLB may use just an IP address or a FQDN. In order to find out do the following.&lt;/p&gt;  &lt;p&gt;1. Enable IIS logging by selecting Web Sites, right-clicking and choosing properties.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_2.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_thumb.png" width="244" height="167" mce_src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2. In Properties/Advanced make sure Host (cs-host) is enabled.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_4.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_thumb_1.png" width="244" height="235" mce_src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_thumb_1.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;3. Clear the cache in the web browser in any workstation (make sure the request will go through the NLB) and hit a couple of pages to populate the log&lt;/p&gt;  &lt;p&gt;4. Navigate to the log file in the server you made the change (normally c:\windows\system32\LogFiles) and fin the latest file. You will something like this (in this example cs-host = team.learning.local):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_8.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_thumb_3.png" width="404" height="188" mce_src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_thumb_3.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;5. Make sure the host header is listed in the Alternate Access Mapping (Central Administration | Operations | Alternate Access Mapping | Edit Public Url | Choose Web Application):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_10.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_thumb_4.png" width="244" height="155" mce_src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/Blobcachewillnotworkiftherequesturlisnot_12536/image_thumb_4.png" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;*** UPDATE: I submitted this blog entry as KB and it was published here: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/2000283"&gt;http://support.microsoft.com/kb/2000283&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;*** UPDATE 2: See this article for instructions on how to add log fields in IIS 7.x &lt;/p&gt;  &lt;p&gt;&lt;a title="http://technet.microsoft.com/en-us/library/cc754702(WS.10).aspx" href="http://technet.microsoft.com/en-us/library/cc754702(WS.10).aspx"&gt;http://technet.microsoft.com/en-us/library/cc754702(WS.10).aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9800631" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/rodneyviana/archive/tags/AAM+_2600_quot_3B00_Alternate+Access+Mapping_2600_quot_3B00_+Blobcache+showing+pictures+_2600_quot_3B00_Network+Load+Balancer_2600_quot_3B00_+NLB/">AAM &amp;quot;Alternate Access Mapping&amp;quot; Blobcache showing pictures &amp;quot;Network Load Balancer&amp;quot; NLB</category></item><item><title>The fine art of updating MOSS 2007 and WSS 3.0</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2009/05/20/the-fine-art-of-updating-moss-2007-and-wss-3-0.aspx</link><pubDate>Wed, 20 May 2009 04:42:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9630662</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=9630662</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=9630662</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2009/05/20/the-fine-art-of-updating-moss-2007-and-wss-3-0.aspx#comments</comments><description>&lt;p&gt;Let's face it, updating Sharepoint is not an easy task. It is true for both Microsoft Office Sharepoint Server (MOSS) 2007 and Windows Sharepoint Services 3.0. Let's highlight some points:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;MOST IMPORTANT:&lt;/strong&gt; MOSS is built on top of WSS and you have to apply WSS and MOSS updates on MOSS installation  &lt;li&gt;You have to install localized versions of the updates even if you only uses English  &lt;li&gt;If you have MOSS, you have to install localized version of the updates even if you use English only  &lt;li&gt;&lt;strong&gt;VERY IMPORTANT:&lt;/strong&gt; A later update patch DOES NOT include previous patches, so you may have to install a series of patches to get to a specific version. For example, August CU requires you to install SP1, Infrastructure Updates and other patches to be installed before.  &lt;li&gt;The only reliable information about current and past update paths can be found at &lt;a href="http://blogs.msdn.com/sharepoint"&gt;http://blogs.msdn.com/sharepoint&lt;/a&gt;  &lt;li&gt;Before December Cumulative Update (CU) Uber Package, you were supposed to download a patch for each additional language you have installed in your farm.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;How to update:&lt;/h3&gt; &lt;p&gt;First, know where you are now. The way to know your version is going to Central Administration | Operations | Servers in Farm. The version will be shown in the page. This version will not tell you all as you have other components besides the server version. Some people, including me, prefer to check the version in the files. To get the version of the files, we use &lt;a href="http://www.codeplex.com/spsreport" target="_blank"&gt;SPSReports&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;SPSReports will generate a large amount of captured files. The file version will be available at &amp;lt;SERVERNAME&amp;gt;_WSEVer.TXT. This is an excerpt of such file (showing SP1 files):&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c:\program files\common files\microsoft shared\web server extensions\12\bin\*.*&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL ENU&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6.6.7.5 shp&amp;nbsp; 1,030,144 02-21-2007 dbghelp.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; APP&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.4518.1016 shp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 23,824 11-08-2006 hcinstal.exe&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.4518.1014 shp&amp;nbsp;&amp;nbsp;&amp;nbsp; 123,232 10-26-2006 microsoft.office.irm.formprotector.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.4518.1014 shp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 38,736 10-26-2006 microsoft.office.irm.msoprotector.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.4518.1014 shp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 34,640 10-26-2006 microsoft.office.irm.ofcprotector.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.6211.1000 shp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 92,000 08-24-2007 msscntrs.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; APP&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.6211.1000 shp&amp;nbsp;&amp;nbsp;&amp;nbsp; 282,496 08-24-2007 mssdmn.exe&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; APP&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.6211.1000 shp&amp;nbsp;&amp;nbsp;&amp;nbsp; 159,648 08-24-2007 mssearch.exe&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.6211.1000 shp&amp;nbsp;&amp;nbsp;&amp;nbsp; 694,104 08-24-2007 mssph.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.6211.1000 shp&amp;nbsp; 2,059,104 08-24-2007 mssrch.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.6212.1000 shp&amp;nbsp; 1,079,200 09-02-2007 offparser.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.6219.1000 shp&amp;nbsp; 3,012,136 11-15-2007 owssvr.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.6211.1000 shp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 26,496 08-25-2007 oisimg.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.4518.1016 shp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 26,456 11-08-2006 oleparser.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.6211.1000 shp&amp;nbsp;&amp;nbsp;&amp;nbsp; 357,264 08-25-2007 onetnative.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.6219.1000 shp&amp;nbsp; 1,983,528 11-16-2007 onetutil.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.4518.1014 shp&amp;nbsp;&amp;nbsp;&amp;nbsp; 100,144 10-27-2006 osafehtm.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; APP&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.6211.1000 shp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 58,232 08-25-2007 owstimer.exe&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.4518.1014 shp&amp;nbsp;&amp;nbsp;&amp;nbsp; 400,200 10-26-2006 microsoft.office.policy.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.4518.1014 shp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 52,040 10-26-2006 microsoft.office.workflow.tasks.dll&lt;br&gt;--a-- W32i&amp;nbsp;&amp;nbsp; DLL&amp;nbsp;&amp;nbsp; -&amp;nbsp; 12.0.6211.1000 shp&amp;nbsp; 6,407,584 08-24-2007 microsoft.sharepoint.portal.dll&lt;br&gt;(....)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Depending on the product, there will be files with more significance than others and be aware that not all files will be updated to the latest build. In the excerpt above oleparser.dll is still in version 12.0.4518 (RTM version) while owssrv.dll is in SP1 (12.0.6219).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Checking your version:&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;For WSS Global: Check OWSSVR.dll  &lt;li&gt;For WSS Local: normally by checking the localized javascript version and comparing with the global javascript files and by mssmsg.dll (it may vary - see Knowledge Base method later in this post)  &lt;li&gt;For MOSS Local: normally by checking the localized javascript version and comparing withe the global javascript files and by Htmlchkr.dll (it may vary - see knowledge Base method later in this post)  &lt;li&gt;For MOSS Global: Check Microsoft.Sharepoint.Portal.dll (also make sure all other updates as WSS and DLC are compatible with the build, I will talk about it later)  &lt;li&gt;For Document Lifecycle Management (DLC) aka Workflow: highest version between microsoft.office.policy.dll and microsoft.office.workflow.tasks.dll  &lt;li&gt;For Infrastructure Updates (IU): It varies (see Knowledge Base method later in this post)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Checking what takes to get up-to-date&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;As I told you before, the Sharepoint Team blog is the most reliable source of update path. If you want to update to the latest recommended version or just fix a previous update not working so well because you did not know that WSS updates was also mandatory, you better check the blog. Other reason to fix a previous update is when your javascript yields an error every time you try to edit a rich edit field or it only yields an error when you are not editing in English.&lt;/p&gt; &lt;p&gt;One of the problems I see occasionally in my work at Microsoft is clients who were not aware they had to install the language patch update for every language they have in addition to the local English patch. One symptom of the problem is the Javascript errors I mentioned. Sometimes they prefer to wait for SP2 and avoid to update in all Cumulative Updates released. Before December CU, all other patches required a long list of prerequisites. My colleague &lt;a href="http://blogs.technet.com/rgullick/archive/2009/01/10/sharepoint-updates.aspx" target="_blank"&gt;Robert Gullick&lt;/a&gt; put together a list for all paths up to December CU.&lt;/p&gt; &lt;p&gt;The new updates make things easier. For example, October CU required at least 4 patches (if you don't have other languages installed) while December CU only requires two patches no matter how many languages you have installed.&lt;/p&gt; &lt;p&gt;Let's take a look at the requirements for having October CU in MOSS (i.e. update path):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;KB936988 - WSS SP1 + LanguagePack SP1 - 6219  &lt;li&gt;KB957109 - WSS August CU Local - 6327  &lt;li&gt;KB957691 - WSS October CU Global - 6332  &lt;li&gt;KB936984 - MOSS SP1 + Language Pack SP1 - 6219  &lt;li&gt;KB955586 - MOSS DLC Component Update Local - 6324  &lt;li&gt;KB955937 - MOSS Excel Services security update - 6324 *  &lt;li&gt;KB958569 - MOSS DLC Component Update Global - 6331  &lt;li&gt;KB958567 - MOSS October CU Local - 6331  &lt;li&gt;KB957693 -MOSS October CU Global - 6331&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If you had installed any of the KBs in the path you don't have to install the KB again. And now we finally will talk about how to use the KB method.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;How to identify if the KB is already installed (Knowledge Base method)&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Unfortunately the KBs are not visible in Add/Remove Programs in Control Panel. But the information is in the registry. Let's say I want to check if KB958569 is installed or not.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Open Registry Editor (Start | Run | Regedit.exe)  &lt;li&gt;Go to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall  &lt;li&gt;Press Ctrl+F to start a search  &lt;li&gt;Look for the KB number by entering only the number without the prefix (eg. 958569)  &lt;li&gt;If you find it under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall it is because it is installed. &lt;li&gt;This method is not so reliable because it does not keep track of past KB installed but it can be a good start &lt;li&gt;You can issue the command "reg export HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall uninst.txt" to dump the registry info in the text file.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;How to download a specific KB hotfix (don't forget the local patches also)&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Some hotfixes do not have an immediate public download place. You have to request. Please see the sample below for KB 958567 which is local update (and must be installed for each language you have in your environment). &lt;p&gt;The KB is located here: &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/958567"&gt;http://support.microsoft.com/kb/958567&lt;/a&gt; &lt;p&gt;for other KBs, just change the number in the url. &lt;p&gt;The hotfix can be download here: &lt;p&gt;&lt;a href="http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=958567"&gt;http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=958567&lt;/a&gt; &lt;p&gt;Notice that you will be offered only the English version initially. Click on “Show hotfixes for all platforms and languages” and it will show for all languages and architectures (x86 and x64). &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/ThefineartofupdatingMOSS2007andWSS3.0_10F20/clip_image002_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="45" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/ThefineartofupdatingMOSS2007andWSS3.0_10F20/clip_image002_thumb.jpg" width="244" border="0"&gt;&lt;/a&gt; &lt;p&gt;Choose all languages and architectures that apply. You will receive an e-mail with instructions on how to download the patch. &lt;p&gt;Please follow these for all patches.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9630662" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/rodneyviana/archive/tags/Updating+WSS+MOSS+Version+Mismatch+SP1+SP2/">Updating WSS MOSS Version Mismatch SP1 SP2</category></item><item><title>Getting Sharepoint Site/Web Context in a Console Application</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2009/05/20/getting-sharepoint-site-web-context-in-a-console-application.aspx</link><pubDate>Wed, 20 May 2009 04:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9630638</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=9630638</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=9630638</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2009/05/20/getting-sharepoint-site-web-context-in-a-console-application.aspx#comments</comments><description>&lt;p&gt;I had recently faced a problem which I believe other people will face at least once: how to get the context from a URL in a C# Console Application. I needed to use ProfileLoader which requires a context. You cannot get current context when you run an application outside a Sharepoint page (like in Windows or Console Application). The solution below gets a context from the topology (which happens to be deprecated but works) and get all properties from the profile. See the sample code below:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&lt;strong&gt;&lt;em&gt;using System;&lt;br&gt;using System.Collections.Generic;&lt;br&gt;using System.Text;&lt;br&gt;using Microsoft.Office.Server.UserProfiles;&lt;br&gt;using Microsoft.Office.Server;&lt;br&gt;using Microsoft.SharePoint.Portal;&lt;br&gt;using Microsoft.SharePoint.Portal.Topology;&lt;br&gt;using Microsoft.SharePoint;&lt;br&gt;using System.Web; &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&lt;strong&gt;&lt;em&gt;namespace TestProperties&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Program&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main(string[] args)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //get portal site context from topology&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string strUrl = "&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;a href="http://myserver&amp;quot;;"&gt;&lt;font face="Courier New" size="2"&gt;&lt;strong&gt;&lt;em&gt;http://myserver";&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;br&gt;&lt;font face="Courier New" size="2"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TopologyManager tm = new TopologyManager();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PortalSite ps = tm.PortalSites[new Uri(strUrl)];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PortalContext pc = PortalApplication.GetContext(ps);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ServerContext sc = pc.ServerContext; &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PropertyCollection props = ProfileLoader.GetProfileLoader(sc).GetUserProfileManager().Properties; &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (Property prop in props)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (prop.Type != PropertyDataType.Binary &amp;amp;&amp;amp; prop.DefaultPrivacy == Privacy.Public)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; Console.WriteLine("{0} - {1}", prop.DisplayName, prop.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; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9630638" width="1" height="1"&gt;</description></item><item><title>How to test the Mail Settings for a Sharepoint Web Application</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2008/11/06/how-to-test-the-mail-settings-for-a-sharepoint-web-application.aspx</link><pubDate>Thu, 06 Nov 2008 05:05:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9046001</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=9046001</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=9046001</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2008/11/06/how-to-test-the-mail-settings-for-a-sharepoint-web-application.aspx#comments</comments><description>&lt;p&gt;WSS and MOSS enable outgoing e-mail configuration and most of the time this configuration is straightforward. As of matter of fact you do not have much to configure as shown below:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/HowtotesttheMailSettingsforaSharepointWe_1157D/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="137" alt="image" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/HowtotesttheMailSettingsforaSharepointWe_1157D/image_thumb.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Figure 1 - Outgoing e-mail settings&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;This same configuration is used for alerts and notifications as it is for invitations. Most of the e-mail sending is accomplished by OWSTIMER.EXE (The Sharepoint Timer Service) which run as the Farm Administrator Account in all servers in the farm. When you have alerts sending e-mail most of the time and failing just occasionally, it is possible that one of the servers is not able to deliver the e-mail. Testing e-mail delivery in WFEs (Web Front Ends) is easier, since adding someone to a site and sending a welcome (see screenshot below) mail will force Sharepoint to send the e-mail from the WFE serving the request and the result is shown immediately when you press OK. It may bring some extra configuration to identify the WFE if you are using NLB (Network Load Balancer), but nothing compared to OWSTIMER.EXE identification problem.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/HowtotesttheMailSettingsforaSharepointWe_1157D/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="144" alt="image" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/HowtotesttheMailSettingsforaSharepointWe_1157D/image_thumb_1.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Figure 2 - Sending Welcome mail is a fast to way to identify connection problems as the result is in the next page&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;However if you still have problems to identify why e-mails are not being delivered using the Welcome Page or the server you suspect is not serving pages you may need to run a few other tests. First, you have to check if the suspect server is reaching the SMTP server. You can use the basic ping and then try the telnet connection to see if you get the right response as specified in &lt;a href="http://support.microsoft.com/kb/153119" target="_blank"&gt;KB153119&lt;/a&gt;. If everything seems correct and you still have problem, try the following code:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;(UPDATED)&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;using System;&lt;br&gt;using System.Collections.Generic;&lt;br&gt;using System.Text;&lt;br&gt;using Microsoft.SharePoint;&lt;br&gt;using Microsoft.SharePoint.Administration;&lt;br&gt;using Microsoft.SharePoint.Utilities;&lt;br&gt;using System.Net.Mail; &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;namespace SendMail&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MailServerInfo&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected string server; &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Server&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return server; }&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; protected string from; &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string From&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return from; }&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; protected string replyTo; &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string ReplyTo&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return replyTo; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public MailServerInfo(SPSite spSite)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server = "(empty)";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from = "(empty)";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; replyTo = "(empty)";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPWebApplication spWebApplication = spSite.WebApplication;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (spWebApplication.OutboundMailServiceInstance != null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from = spWebApplication.OutboundMailSenderAddress;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; replyTo = spWebApplication.OutboundMailReplyToAddress;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPOutboundMailServiceInstance smtpServer = spWebApplication.OutboundMailServiceInstance;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server = smtpServer.Server.Address;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string ServerInformation&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return String.Format("Site Specific - server: {0}, From: {1}, ReplyTo: {2}",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server, from, replyTo); &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Program&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main(string[] args)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Sharepoint e-mail configuration tester");&lt;br&gt;&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;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Written by Rodney Viana");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("More info at &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;a href="http://blogs.msdn.com/rodneyviana\n&amp;quot;);"&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;http://blogs.msdn.com/rodneyviana\n");&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;br&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("This sample application is supplied \"AS IS\"");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("It is ONLY for demonstration/proof of concept purposes");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("If you DO NOT agree with the license at:\n\thttp://www.codeplex.com/rodneyviana/license\n\tPress Ctrl+C");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Write("Press any other key to continue...");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.ReadKey();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Write("\n\nPlease enter url (eg.: &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;a href="http://localhost):&amp;quot;);"&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;http://localhost):");&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;br&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string siteUrl = Console.ReadLine(); &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (SPSite spSite = new SPSite(siteUrl))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; using (SPWeb web = spSite.OpenWeb())&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; if (web == null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; Console.WriteLine("Web could not be found (OpenWeb returned null). Aborting.");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; Console.WriteLine("The site has been found at " + web.Url);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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.Write("Please enter recipient login name (eg. domain\\administrator): ");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string login = Console.ReadLine();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string displayName = "";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string emailAddress = "";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; SPUtility.GetFullNameandEmailfromLogin(web, login, out displayName,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out emailAddress);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; catch (Exception ex)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; Console.WriteLine("Unable to get user information.");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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("Error: "+ex.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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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.Write("Press any key...");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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.ReadKey(); &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; Console.WriteLine("Display Name: {0}\nE-mail: {1}", displayName,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; emailAddress);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string subject = "Test 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string body = "Testing app 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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MailServerInfo serverInfo = new MailServerInfo(spSite); &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string server = serverInfo.Server;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string replyTo = serverInfo.ReplyTo;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string from = serverInfo.From; &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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(serverInfo.ServerInformation);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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("Trying to send e-mail via Sharepoint..."); &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!SPUtility.SendEmail(web, true, true, emailAddress, subject, body))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; Console.WriteLine("Error: Unable to send e-mail via Sharepoint");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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("Trying via SMTP..."); &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SmtpClient client;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; client = new SmtpClient(server);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; catch (Exception ex)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; Console.WriteLine("Could not contact server");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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("Error: " + ex.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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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.Write("Press any key...");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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.ReadKey(); &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; try&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; client.Send(from, emailAddress, subject, body); &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; catch (Exception ex)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; Console.WriteLine("Unable to send via SMTP client");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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("Error: " + ex.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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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.Write("Press any key...");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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.ReadKey(); &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; Console.WriteLine("E-mail has been sent successfully via SMTP client"); &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; Console.WriteLine("E-mail has been sent successfully via Sharepoint");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception ex)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Unable to find url.");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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("Error: " + ex.Message); &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Write("Press any key...");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.ReadKey(); &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&lt;/font&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;You can download project and executable at&amp;nbsp; &lt;a title="http://www.codeplex.com/rodneyviana/Release/ProjectReleases.aspx?ReleaseId=19103" href="http://www.codeplex.com/rodneyviana/Release/ProjectReleases.aspx?ReleaseId=19103"&gt;http://www.codeplex.com/rodneyviana/Release/ProjectReleases.aspx?ReleaseId=19103&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;If you are not much in software development you can extract only the .exe file (SendMail\SendMail\bin\Debug\SendMail.exe) and run it without installation. This application will send an e-mail using the farm's configuration. Enter the url of a valid site and a valid user login name which will be the recipient of the test message. The application will retrieve the e-mail information from the user login name. You must run the application from one of the servers in the farm.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/HowtotesttheMailSettingsforaSharepointWe_1157D/clip_image001_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="124" alt="clip_image001" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/HowtotesttheMailSettingsforaSharepointWe_1157D/clip_image001_thumb.png" width="244" border="0"&gt;&lt;/a&gt;  &lt;p&gt;Figure 3 - The application will resolve the recipient e-mail address as well as the farm's outgoing e-mail configuration  &lt;p&gt;&amp;nbsp; &lt;p&gt;If the configuration is correct the intended recipient will receive the following e-mail:  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/HowtotesttheMailSettingsforaSharepointWe_1157D/clip_image002_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="209" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/HowtotesttheMailSettingsforaSharepointWe_1157D/clip_image002_thumb.png" width="244" border="0"&gt;&lt;/a&gt;  &lt;p&gt;Figure 4 - E-mail will be received if everything is configured correctly  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;If you can receive this e-mail and still are unable to receive e-mail from sharepoint check the Application Pool credential (in case of Welcome page) or web farm administrator account (in case of alert and other e-mails sent by OWSTIMER.EXE).&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9046001" width="1" height="1"&gt;</description></item><item><title>Org Chart Web Part - Part I - Overview and Download</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2008/07/25/org-chat-web-part-part-i-overview-and-download.aspx</link><pubDate>Fri, 25 Jul 2008 05:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8770894</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>100</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=8770894</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=8770894</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2008/07/25/org-chat-web-part-part-i-overview-and-download.aspx#comments</comments><description>&lt;P&gt;In this post we are going to explore User Profiles by extending the Organizational Hierarchy in MOSS. I've posted in Codeplex both installer and code for the Organizational Chart Hierarchy web part. This post will only discuss installation and configuration. I will discuss the code in posts to come.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What this webpart does:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This web part reads and analyzes the user profiles in MOSS and creates a full hierarchical organizational chart.&amp;nbsp; See screenshot below:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=413 alt=image src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_thumb.png" width=811 border=0 mce_src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What I need to make it work:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;1. It requires MOSS (Microsoft Office Sharepoint Server) 2007.&lt;/P&gt;
&lt;P&gt;2. It requires you have imported profiles from you AD.&lt;/P&gt;
&lt;P&gt;3. In order to have the hierarchy displayed correctly you have to include managerial and department information for all users who have manager (see the example in the snapshot below).&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=437 alt=image src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_thumb_1.png" width=365 border=0 mce_src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;4. You have to edit the departmentconfig.xml file if you want links to the department sites. After the install, this file normally is found at: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\OrgChartPart\. This file is only available after the install is complete.&lt;/P&gt;
&lt;P&gt;5. Just edit, add or delete &lt;STRONG&gt;&lt;EM&gt;&amp;lt;Mapping Department="[Department Name As in Profile]"&amp;gt;[url]&amp;lt;/Mapping&amp;gt;&lt;/EM&gt;&lt;/STRONG&gt; entries as appropriate. The mapping must be exact. As the example below (this entry is case sensitive):&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;lt;Mapping Department="Operations"&amp;gt;http://myweb/sites/operations&amp;lt;/Mapping&amp;gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Installing Steps:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;1. Download the latest release here: &lt;A title=http://www.codeplex.com/orgchartpart/Release/ProjectReleases.aspx?ReleaseId=15590 href="http://www.codeplex.com/orgchartpart/Release/ProjectReleases.aspx?ReleaseId=15590" mce_href="http://www.codeplex.com/orgchartpart/Release/ProjectReleases.aspx?ReleaseId=15590"&gt;http://www.codeplex.com/orgchartpart/Release/ProjectReleases.aspx?ReleaseId=15590&lt;/A&gt; and save in a folder you will remember later (eg. c:\downloads).&lt;/P&gt;
&lt;P&gt;2. Go to MOSS Bin folder, commonly at C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\BIN&lt;/P&gt;
&lt;P&gt;3. Run the following commands from the command prompt when logged as farm administrator (assuming the .wsp file is in C:\Downloads):&lt;/P&gt;
&lt;P&gt;stsadm -o addsolution -filename c:\downloads\OrgChartPart.wsp&lt;BR&gt;stsadm -o deploysolution -name c:\downloads\OrgChartPart.wsp -allowgacdeployment -immediate&lt;BR&gt;stsadm -o execadmsvcjobs 
&lt;P&gt;4. Go to the shared services provider you use for personalization in Central Administration.&lt;/P&gt;
&lt;P&gt;5. Choose Personalization services permission under User Profiles and My Sites.&lt;/P&gt;
&lt;P&gt;6. Make sure NT AUTHORITY\Authenticated Users has "Personal Features" and "Personal Site" rights.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_6.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=292 alt=image src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_thumb_2.png" width=651 border=0 mce_src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;7. Go to the site collection you want to include the web part (eg. http:/myweb).&lt;/P&gt;
&lt;P&gt;8. Go to Site Actions | Site Settings | Modify All Site Settings&lt;/P&gt;
&lt;P&gt;9. Go to Site Collection Features under Site Collection Administration&lt;/P&gt;
&lt;P&gt;10. Activate Org chart Web Part&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_8.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=49 alt=image src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_thumb_3.png" width=642 border=0 mce_src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;11. Verify if OrgChartPart is available in the Web Part Gallery of the Site Collection (Site Actions | Site Settings | Galleries | WebParts)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_10.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=32 alt=image src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_thumb_4.png" width=568 border=0 mce_src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_thumb_4.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;12. Add the web part wherever you want in a page&lt;/P&gt;
&lt;P&gt;13. Make sure you adjust the web part to render correctly:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_12.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=311 alt=image src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_thumb_5.png" width=232 border=0 mce_src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/OrgChatWebPartPartIOverviewandDownload_D6AD/image_thumb_5.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Notes:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The beautiful tree layout in Javascript was developed by the talented Emilio CL and can be found here: &lt;A title=http://www.codeproject.com/KB/scripting/graphic_javascript_tree.aspx href="http://www.codeproject.com/KB/scripting/graphic_javascript_tree.aspx" mce_href="http://www.codeproject.com/KB/scripting/graphic_javascript_tree.aspx"&gt;http://www.codeproject.com/KB/scripting/graphic_javascript_tree.aspx&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Don't try it in a large Enterprise with over 500 user profiles. It will work but will be slow. A few modifications are necessary to enable better performance.&lt;/LI&gt;
&lt;LI&gt;Next post will be about the source code.&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8770894" width="1" height="1"&gt;</description></item><item><title>Populating BDC fields from a query string in MOSS (Microsoft Office Sharepoint Server) 2007</title><link>http://blogs.msdn.com/b/rodneyviana/archive/2008/06/06/populating-bdc-fields-from-a-query-string-in-moss-microsoft-office-sharepoint-server-2007.aspx</link><pubDate>Fri, 06 Jun 2008 03:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8576624</guid><dc:creator>Rodney Viana - MSFT - DSI Team</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/rsscomments.aspx?WeblogPostID=8576624</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/rodneyviana/commentapi.aspx?WeblogPostID=8576624</wfw:comment><comments>http://blogs.msdn.com/b/rodneyviana/archive/2008/06/06/populating-bdc-fields-from-a-query-string-in-moss-microsoft-office-sharepoint-server-2007.aspx#comments</comments><description>&lt;P&gt;Whomever tried to populate a MOSS (Microsoft Office Sharepoint Server) form field using Javascript noticed that it is far from being straightforward. The secret is in the undocumented core.js After a client's request I was able to come up with a not so-intrusive Javascript solution. 
&lt;P&gt;You have to open the site in Sharepoint Designer, navigate to the list you want (in my example I used a list called "Public Details"), look for a spot in the html code and copy the Javascript code below to both EditForm.aspx and NewForm.aspx. 
&lt;P&gt;For each list in your site there will be a folder. For instance, let’s say you have a list called Public Details. In Sharepoint Designer you should edit files under &lt;STRONG&gt;&lt;EM&gt;site\Lists\Public Details&lt;/EM&gt;&lt;/STRONG&gt; as shown below (be aware these pages will be unghosted after that): 
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/PopulatingBDCfieldsfromaquerystringinMOS_115FF/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/PopulatingBDCfieldsfromaquerystringinMOS_115FF/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=398 alt=image src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/PopulatingBDCfieldsfromaquerystringinMOS_115FF/image_thumb.png" width=614 border=0 mce_src="http://blogs.msdn.com/blogfiles/rodneyviana/WindowsLiveWriter/PopulatingBDCfieldsfromaquerystringinMOS_115FF/image_thumb.png"&gt;&lt;/A&gt; 
&lt;P&gt;To test the application, just add the query string &lt;STRONG&gt;?BDC=&amp;lt;value&amp;gt;&lt;/STRONG&gt; to the url (eg. &lt;STRONG&gt;http://portal/Lists/Public+Details.aspx?BDC=123&lt;/STRONG&gt;). See code below: 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=2 width=674 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=672&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;&amp;lt;script type="text/javascript" language="javascript" for="window" event="onload"&amp;gt;&lt;/STRONG&gt; &lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;var elems = document.getElementsByTagName("DIV");&lt;BR&gt;var bdcString="";&lt;/STRONG&gt; &lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;var queryString = document.location.search.split("&amp;amp;");&lt;/STRONG&gt; &lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;for (var i=0;i&amp;lt;queryString.length;i++) {&lt;BR&gt;if ((queryString[i].split("=")[0]=="BDC") || (queryString[i].split("=")[0]=="?BDC")) bdcString=queryString[i].split("=")[1]; &lt;BR&gt;}&lt;/STRONG&gt; &lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;if(bdcString == "") return;&lt;/STRONG&gt; &lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;for (var i=0;i&amp;lt;elems.length;i++) {&lt;/STRONG&gt; &lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT face="Courier New"&gt;&lt;STRONG&gt;if (elems[i].id.indexOf("_upLevelDiv") &amp;gt; 1)&lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var subs = elems[i].id.substring(0,elems[i].id.indexOf("_upLevelDiv")); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var upLevel = document.getElementById(subs+"_upLevelDiv");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(upLevel == null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert("error Up Level is invalid: "+subs+"\n"+upLevel);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var downlevel=document.getElementById(getSubControlID(subs, g_EntityEditorDownLevelId));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; downlevel.value = bdcString;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var editor=document.getElementById(subs)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetInnerText(upLevel, bdcString); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; copyUplevelToHidden(subs);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;/STRONG&gt; &lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="Courier New" size=1&gt;&amp;lt;/script&amp;gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Courier size=1&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8576624" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/rodneyviana/archive/tags/BDC+Fields+JavaScript+MOSS+Sharepoint+Populate/">BDC Fields JavaScript MOSS Sharepoint Populate</category></item></channel></rss>