<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Jerry Orman</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/jorman/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/jorman/feed.xml</link>
    <description>Adventures in SharePoint</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:13:47 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Never open a Camelbak bottle filled with water in the middle of a flight</title>
      <link>https://docs.microsoft.com/archive/blogs/jorman/never-open-a-camelbak-bottle-filled-with-water-in-the-middle-of-a-flight</link>
      <pubDate>Sat, 17 Dec 2011 14:25:00 GMT</pubDate>
      <dc:creator><![CDATA[Jerry_Orman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jorman/2011/12/17/never-open-a-camelbak-bottle-filled-with-water-in-the-middle-of-a-flight/</guid>
      <description><![CDATA[I recently flew up to Seattle for work. I drink a lot of water, and when I fly, I typically buy a...]]></description>
      <content:encoded><![CDATA[<p>I recently flew up to Seattle for work. I drink a lot of water, and when I fly, I typically buy a bottle of water at the airport and take it on the plane so I can put on some music and pretend I&rsquo;m not stuck on a plane for hours.&nbsp; This time, I decided I would pack my water bottle in my back pack, then fill it up after I got through security. I drink a ton of water and a few years ago picked up some Camelbak water bottles to avoid buying a bunch of individual bottles. They&rsquo;re pretty cool, and the straw on top flips open and closed to keep them from leaking. If you&rsquo;re in the market for a water bottle, these work great.</p>
<p><a href="http://www.camelbak.com/Sports-Recreation/Bottles/Better-Bottle-75L.aspx"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="75bottle_blue[1]" border="0" alt="75bottle_blue[1]" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/2626.75bottle_blue1_709EB2E1.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/2626.75bottle_5F00_blue1_5F00_709EB2E1.jpg" width="79" height="240" /></a></p>
<p>I&rsquo;m sitting next to the window, and after about an hour into the flight, I get thirsty and pull the bottle out of the pocket in front of me. I flip up the straw to get a drink and water starts spraying out all over the window and wall next to me. It looked similar to holding your finger over a water hose!!!!</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/4670.hose-with-finger1_61F406FC.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/4670.hose_2D00_with_2D00_finger1_5F00_61F406FC.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="hose with finger[1]" border="0" alt="hose with finger[1]" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/4276.hose-with-finger1_thumb_416CC74A.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/4276.hose_2D00_with_2D00_finger1_5F00_thumb_5F00_416CC74A.jpg" width="240" height="128" /></a></p>
<p>After a couple seconds staring at the water spraying all over the side of the plane, I realized it would be a good idea to close the straw and stop the water works. The window and wall next to me was pretty soaked at this point. I look to my right to see if the woman next to me had seen the water show to find her staring at me with water all over her face and arm! I guess it was bouncing off the wall with pretty good force, or she got in the line of fire while I was closing the straw on the bottle. She had a look of disbelief on her face, and says to me in a deadpan voice, &ldquo;I guess there was a lot of pressure in that bottle&rdquo;. I cracked up laughing while trying to apologize, and she was very understanding once I told her it was only water and nothing sticky.</p>
<p>Lesson learned. On my way home, I bought a bottle of water at the airport with a screw on cap.</p>]]></content:encoded>
    </item>
    <item>
      <title>External List Missing New and Edit Forms</title>
      <link>https://docs.microsoft.com/archive/blogs/jorman/external-list-missing-new-and-edit-forms</link>
      <pubDate>Sat, 19 Nov 2011 17:21:19 GMT</pubDate>
      <dc:creator><![CDATA[Jerry_Orman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jorman/2011/11/19/external-list-missing-new-and-edit-forms/</guid>
      <description><![CDATA[I was recently walking a customer through creating an External Content Type [ECT] that uses stored...]]></description>
      <content:encoded><![CDATA[<p>I was recently walking a customer through creating an <a href="http://msdn.microsoft.com/en-us/library/ee556391.aspx">External Content Type [ECT]</a> that uses stored procedures instead of just pointing directly to a table. When we created an <a href="http://msdn.microsoft.com/en-us/library/ee558778.aspx">External List</a> using the External Content Type, the list didn’t have the option to create new items, nor could we edit items. SharePoint Designer displayed the following dialog when the external list was being created:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/2843.image5_6316B9FE.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/2843.image5_5F00_6316B9FE.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/5315.image5_thumb_025960D2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/5315.image5_5F00_thumb_5F00_025960D2.png" width="252" height="265" /></a>     <br /></p>  <p>Looking at the list in SharePoint Designer would show the following in the forms section:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/4401.image9_7ACDF164.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/4401.image9_5F00_7ACDF164.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/6064.image9_thumb_1A109838.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/6064.image9_5F00_thumb_5F00_1A109838.png" width="527" height="131" /></a>     <br /></p>  <p>The external content type has all the types required for the external list to support creating and editing items, so we were initially at a loss for why the warnings and the resulting list missing the forms:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/8611.image_40727B83.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/8611.image_5F00_40727B83.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/8117.image_thumb_09B5207F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/8117.image_5F00_thumb_5F00_09B5207F.png" width="529" height="170" /></a></p>  <p>&#160;</p>  <p>At this point, if you are using the default Diagnostic Logging settings, you’ll see the following entries to line up with the error dialog displayed in SharePoint Designer.&#160; </p>  <p>10/30/2011 20:03:16.17&#160;&#160;&#160;&#160; w3wp.exe (0x1434)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 0x189C&#160;&#160;&#160; SharePoint Foundation&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; General&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; fvo2&#160;&#160;&#160; Medium&#160;&#160;&#160;&#160;&#160; <br />VLPROV: Data source does not support Create, no NewForm.aspx page is being provisioned for list with ID 'e5d7abe6-84f4-4a2d-b2bc-bff5c4b9f00c', URL '/Lists/MYDB People List'.&#160;&#160;&#160; 72e37591-e309-452e-9feb-19ec93841cfc     <br />    <br />10/30/2011 20:03:16.17&#160;&#160;&#160;&#160; w3wp.exe (0x1434)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 0x189C&#160;&#160;&#160; SharePoint Foundation&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; General&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; fvo3&#160;&#160;&#160; Medium&#160;&#160;&#160;&#160;&#160; <br />VLPROV: Data source does not support Update, no EditForm.aspx page is being provisioned for list with ID 'e5d7abe6-84f4-4a2d-b2bc-bff5c4b9f00c', URL '/Lists/MYDB People List'.&#160;&#160;&#160; 72e37591-e309-452e-9feb-19ec93841cfc     <br />    <br />    <br /></p>  <p>Once you enable Verbose logging for the SharePoint Foundation - General category, you’ll get more details that start to point to the root cause for the behavior :</p>  <p>10/30/2011 20:05:14.19&#160;&#160;&#160;&#160; w3wp.exe (0x1434)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 0x0230&#160;&#160;&#160; SharePoint Foundation&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; General&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; f9ca&#160;&#160;&#160; Verbose&#160;&#160;&#160;&#160; <br />Updater 'PeopleEdit' skipped because it could not be determined to be in the ViewGroup induced by SpecificFinder 'PeopleGetOne'.&#160;&#160;&#160; 276e6ba8-e00d-4ef9-b1f9-023321f3832a     <br />    <br />10/30/2011 20:05:14.19&#160;&#160;&#160;&#160; w3wp.exe (0x1434)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 0x0230&#160;&#160;&#160; SharePoint Foundation&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; General&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; f9c8&#160;&#160;&#160; Verbose&#160;&#160;&#160;&#160; <br />Creator 'PeopleCreate' skipped because it could not be determined to be in the ViewGroup induced by SpecificFinder 'PeopleGetOne'.&#160;&#160;&#160; 276e6ba8-e00d-4ef9-b1f9-023321f3832a     <br /></p>  <p>Mapping up the BCS specific references to SharePoint Designer, the <a href="http://msdn.microsoft.com/en-us/library/ff464399.aspx">SpecificFinder</a> is your Read Item method on your External Content Type. The ViewGroup is the list of fields returned by the SpecificFinder. When SharePoint Designer is building out the external list, it is using the input and output parameters for the stored procedures to line up the columns. If the columns returned from the Read Item command do not match the input parameters for the Create and Update commands, the forms are not generated.&#160; For example, given the following table named People:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/2728.image_41F39797.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/2728.image_5F00_41F39797.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/3005.image_thumb_418764A2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/3005.image_5F00_thumb_5F00_418764A2.png" width="516" height="51" /></a>     <br /></p>  <p>The Read Item stored procedure named PeopleGetOne may look like:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/4807.image_!24F0.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/4807.image_5F00_210024F0.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/4073.image_thumb_677D14F8.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/4073.image_5F00_thumb_5F00_677D14F8.png" width="517" height="145" /></a></p>  <p>   <br />The PeopleEdit stored procedure may look like the following:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/5468.image_1BB13E3F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/5468.image_5F00_1BB13E3F.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/4382.image_thumb_2602629F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/4382.image_5F00_thumb_5F00_2602629F.png" width="519" height="225" /></a></p>  <p>Notice that PeopleGetOne returns a column named ID, but the PeopleEdit stored procedure takes in a parameter named @PersonID. This is when you hit this problem. In order to have SharePoint Designer create a New Form, you would need to change the PeopleEdit’s parameter to be @ID instead of @PersonID.</p>]]></content:encoded>
    </item>
    <item>
      <title>Performance Impact of File Attachments in InfoPath Forms</title>
      <link>https://docs.microsoft.com/archive/blogs/jorman/performance-impact-of-file-attachments-in-infopath-forms</link>
      <pubDate>Tue, 18 Oct 2011 16:56:00 GMT</pubDate>
      <dc:creator><![CDATA[Jerry_Orman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jorman/2011/10/18/performance-impact-of-file-attachments-in-infopath-forms/</guid>
      <description><![CDATA[I was recently looking into the impact of increasing the Session State size associated with InfoPath...]]></description>
      <content:encoded><![CDATA[<p>I was recently looking into the impact of increasing the Session State size associated with InfoPath forms. The main reason for the investigation was to allow users to attach files up to 20MB in size to InfoPath forms in SharePoint 2010. InfoPath does leverage the <a href="http://technet.microsoft.com/library/cc262263.aspx">State Service to store transient data</a>, but I was mainly interested in the performance impact of attaching larger files. I first started out by confirming that File Attachments are considered transient data. The above linked article seemed to indicate they were, but it’s always good to confirm. During this test, I also confirmed that it does not matter what type of InfoPath form you create. If you start out with a Blank Form, or a SharePoint List Form, the InfoPath File Attachment control stores the entire attachment into the State Service database until the form is saved. I did the confirmation <a href="http://support.microsoft.com/kb/841057">by running the following query against the State Service database</a>:</p>  <p>Select Datalength([ItemData]) as ItemDataLength, *    <br />From Sessions</p>  <p>In my test, I had a 22MB WMV file I was attaching to my form. Before the file was attached, the ItemDataLength was close to 0.&#160; After attaching the the file, the ItemDataLength was a little over 22MB. Saving the form resulted in the ItemDataLength,dropping close to 0. Transient data…confirmed.</p>  <p>Next up, what areas are impacted by this work? In order for the session data to be persisted in the database, the data is <a href="http://msdn.microsoft.com/en-us/library/7ay27kt9(v=VS.71).aspx">serialized</a>. This process will use up CPU on the machine handling the web requests. The more data you store, the longer the CPU will be hit for a given request. Once the data is serialized, it is written to the State Service database.&#160; With a larger session, and a significant number of users, you could see quite a bit of churn on the disks hosting the State Service database along with your CPU usage.</p>  <p>With the above information there are a couple concerns:</p>  <ul>   <li>How big will the State Service database get? </li>    <li>Will the amount of traffic to the State Service database impact other databases on the same set of disks? </li>    <li>Will the spike in CPU while serializing the files negatively affect the performance of the farm? </li> </ul>  <p>Unfortunately, there is no magic number for this scenario, the behavior will depend on your specific scenario and environment. To fully understand the impact, you would want to start out with the following:</p>  <ul>   <li>What is the size of file attachments users are planning on uploading? </li>    <li>How many users are planning to do this type of work? </li>    <li>How often users will be performing this work? </li>    <li>How long do users typically leave the form open? </li> </ul>  <p>Once you understand the above information, you’ll start getting an idea of the general impact. For example, if you have 1-2 users uploading a large file on an under-utilized farm at the same time, you probably won’t notice the impact. However, if you have a high volume of InfoPath form usage with large file attachments, you will notice the CPU hit. Any databases hosted on the same disks as the state service will likely notice as well.</p>  <p>The only way to find out what the potential impact will be is to test your scenario and analyze the results. Be sure to append your results to your current farm performance to ensure you are below your thresholds for performance.&#160; For example, if the CPU on the web servers is running around 5%, and testing shows an increase of 10-15%, you probably don’t have much to worry about.&#160; If testing shows a 60-70% increase, you would probably have reason for concern. </p>]]></content:encoded>
    </item>
    <item>
      <title>RSS Viewer Web Part Making Excessive Requests</title>
      <link>https://docs.microsoft.com/archive/blogs/jorman/rss-viewer-web-part-making-excessive-requests</link>
      <pubDate>Tue, 18 Oct 2011 15:28:42 GMT</pubDate>
      <dc:creator><![CDATA[Jerry_Orman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jorman/2011/10/18/rss-viewer-web-part-making-excessive-requests/</guid>
      <description><![CDATA[I was investigating a scenario in which someone was seeing thousands of hits to the destination...]]></description>
      <content:encoded><![CDATA[<p>I was investigating a scenario in which someone was seeing thousands of hits to the destination location of an RSS Viewer Web Part. They had the Feed Refresh Interval set to 120 minutes, and increasing the value did not seem to reduce the number of requests hitting the RSS Feed page. </p>  <p>We were able to track this down to how the RSS Feed requests are cached. The RSS Viewer Web Part leverages the <a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.webcontrols.xmlurldatasource.aspx">XmlUrlDataSource</a> class to call the location for the RSS Feed.&#160; This class is also responsible for handling the cache of the response from the RSS Feed. The reason this is important, is because this class creates a cache key in the following format:</p>  <p>&#160;&#160;&#160;&#160;&#160; URL + tab + Name</p>  <p>This would indicate that for each RSS Viewer Web Part, if you set the cache for 24 hours, you will end up with a request for each distinct user back to the RSS Feed.&#160; For example, if you have 1,000 distinct users accessing a page with the RSS Viewer web part, you would see 1,000 requests to the RSS Feed location. </p>  <p>To validate what I was finding, I put together a <a href="http://msdn.microsoft.com/en-us/library/ff597539.aspx">Visual Web Part</a> that dumps out the keys in the ASP.Net Cache. This cannot be a sandboxed solution due to <a href="http://msdn.microsoft.com/en-us/library/ff798382.aspx">the code needing to execute in the application pool hosting ASP.Net</a>, and it’s associated cache.</p>  <p>ASCX file has the following:</p>  <blockquote>   <p>&lt;asp:BulletedList ID=”BulletedList1” runat=”server”/&gt;</p> </blockquote>  <p>Page load in the .cs file has the following:</p>  <div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">   <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">     <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> ArrayList keys = <span style="color: #0000ff">new</span> ArrayList();</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span>&#160; </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span> <span style="color: #0000ff">foreach</span>(DictionaryEntry cacheEntry <span style="color: #0000ff">in</span> HttpRuntime.Cache)</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span> {</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>     keys.Add(cacheEntry.Key);</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span> }</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>&#160; </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span> BulletedList1.DataSource = keys;</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span> BulletedList1.DataBind();</pre>
<!--CRLF--></div>
</div>

<p>I then added an RSS Viewer Web Part to a page pointing to an anonymous feed on TechNet. Then added my visual web part.&#160; I logged into SharePoint with two separate accounts, and the Visual Web Part output shows two separate cache entries.&#160; In my case, I have a domain with my account, as well as an account for Bob Smith. The cache has the following two entries:</p>

<p>http://www.microsoft.com/feeds/technet/en-us/TechNetNewsFeed.xml&#160;&#160;&#160;&#160; Bob Smith</p>

<p>http://www.microsoft.com/feeds/technet/en-us/TechNetNewsFeed.xml&#160;&#160;&#160;&#160; Jerry Orman</p>]]></content:encoded>
    </item>
    <item>
      <title>Deploying SharePoint 2010 Solution with PowerShell</title>
      <link>https://docs.microsoft.com/archive/blogs/jorman/deploying-sharepoint-2010-solution-with-powershell</link>
      <pubDate>Wed, 28 Sep 2011 13:28:28 GMT</pubDate>
      <dc:creator><![CDATA[Jerry_Orman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jorman/2011/09/28/deploying-sharepoint-2010-solution-with-powershell/</guid>
      <description><![CDATA[Put together a small script that to help automate deployment of a solution.&#160; The script handles...]]></description>
      <content:encoded><![CDATA[<p>Put together a small script that to help automate deployment of a solution.&#160; The script handles the following:</p>  <ul>   <li>Install and Deploy a farm level solution</li>    <li>Activate a web application scoped feature</li>    <li>Activate a site collection scoped feature</li> </ul>  <p>The tricky part with scripting this occurs when the solution is deployed [Install-SPSolution cmdlet].&#160; The script needs to wait for the deployment to finish before activating the features.&#160; Without waiting, the script will immediately continue, and try to activate the features that have not been deployed yet. That means evil red text will appear complaining about features not existing in the farm.</p>  <p>Here’s a copy of the script.&#160; There are some things hard coded in this sample.&#160; The name of the solution package on the Install-SPSolution line, and the Feature ID’s on the Enable-SPFeature lines.</p>  <div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">   <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">     <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> param($wspPath, $url)</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span> <span style="color: #006080">&quot;`r`nBegin : Installing and deploying solution package from $wspPath&quot;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>     <span style="color: #006080">&quot;`r`n`tBegin : Adding Solution to farm solution store&quot;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span>         #Add the WSP to the solution store</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span>         Add-SPSolution <span style="color: #006080">&quot;$wspPath&quot;</span> | Out-Null</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span>     <span style="color: #006080">&quot;`tEnd : Adding Solution to farm solution store&quot;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12">  12:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13">  13:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14">  14:</span>     <span style="color: #006080">&quot;`r`n`tBegin : Deployng the solution package&quot;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15">  15:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16">  16:</span>         #Deploy the solution</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17">  17:</span>         Install-SPSolution MySolutionPackage.wsp -GacDeployment</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18">  18:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19">  19:</span>         #Wait <span style="color: #0000ff">for</span> the solution to deploy prior to continuing</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum20">  20:</span>         <span style="color: #0000ff">while</span>((Get-SPSolution MySolutionPackage.wsp).Deployed -eq $<span style="color: #0000ff">false</span>)</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum21">  21:</span>         {</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum22">  22:</span>             Start-Sleep -seconds 30</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum23">  23:</span>         }</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum24">  24:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum25">  25:</span>     <span style="color: #006080">&quot;`tEnd : Deployng the solution package&quot;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum26">  26:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum27">  27:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum28">  28:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum29">  29:</span>     <span style="color: #006080">&quot;`r`n`tBegin : Enabling Web Application Feature&quot;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum30">  30:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum31">  31:</span>         #Enable Web Application Feature</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum32">  32:</span>         Enable-SPFeature 316883d1-01f8-4474-8e0d-e5e32cecfc2c -url $url -force</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum33">  33:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum34">  34:</span>     <span style="color: #006080">&quot;`tEnd : Enabling Web Application Feature&quot;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum35">  35:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum36">  36:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum37">  37:</span>     <span style="color: #006080">&quot;`r`n`tBegin : Enabling Site Collection Feature&quot;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum38">  38:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum39">  39:</span>         #Enable Site Collection Feature</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum40">  40:</span>         Enable-SPFeature b47afc1d-3369-4399-9fde-15ff0ade7316 -url $url -force</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum41">  41:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum42">  42:</span>     <span style="color: #006080">&quot;`tEnd : Enabling Site Collection Feature&quot;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum43">  43:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum44">  44:</span>     #<span style="color: #006080">&quot;`tBegin : Setting Web Application Properties&quot;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum45">  45:</span>     #</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum46">  46:</span>     #    #Set the property <span style="color: #006080">&quot;MyProperty&quot;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum47">  47:</span>     #    Get-SPWebApplication $url | %{$_.Properties[<span style="color: #006080">&quot;MyProperty&quot;</span>] = <span style="color: #006080">&quot;Some Value&quot;</span>; $_.Update()}</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum48">  48:</span>     #    </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum49">  49:</span>     #    #Retrieve the property <span style="color: #006080">&quot;MyProperty&quot;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum50">  50:</span>     #    Get-SPWebApplication $url | %{$_.Properties[<span style="color: #006080">&quot;MyProperty&quot;</span>] }</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum51">  51:</span>     #</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum52">  52:</span>     #<span style="color: #006080">&quot;`tEnd : Setting Web Application Properties&quot;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum53">  53:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum54">  54:</span>  </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum55">  55:</span> <span style="color: #006080">&quot;`r`nEnd : Installing and deploying solution package from $wspPath`r`n&quot;</span></pre>
<!--CRLF--></div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Reporting Server shows me a SharePoint link I can’t access</title>
      <link>https://docs.microsoft.com/archive/blogs/jorman/reporting-server-shows-me-a-sharepoint-link-i-cant-access</link>
      <pubDate>Thu, 25 Aug 2011 21:08:00 GMT</pubDate>
      <dc:creator><![CDATA[Jerry_Orman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jorman/2011/08/25/reporting-server-shows-me-a-sharepoint-link-i-cant-access/</guid>
      <description><![CDATA[When you setup SQL Server Reporting Services [SSRS] in SharePoint Integrated mode, browsing...]]></description>
      <content:encoded><![CDATA[<p>When you setup <a href="http://msdn.microsoft.com/en-us/library/bb326356.aspx">SQL Server Reporting Services [SSRS] in SharePoint Integrated mode</a>, browsing <a href="http://servername/ReportServer">http://servername/ReportServer</a> will show you a directory listing view of SharePoint Site Collections that is security trimmed to you. However, there are some downsides to this view.&nbsp; Users can probe through the directory structure of your site that they have read access to, and users may see links to sites that you didn&rsquo;t intend for them to see.&nbsp;</p>
<p>In my test farm, when a user named BobSmith browses, he sees the following:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/4212.clip_image0015_00584938.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/4212.clip_5F00_image0015_5F00_00584938.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="clip_image001[5]" border="0" alt="clip_image001[5]" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/8831.clip_image0015_thumb_7F7FE34D.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/8831.clip_5F00_image0015_5F00_thumb_5F00_7F7FE34D.jpg" width="571" height="198" /></a></p>
<p>If bobsmith clicks on the link for <a href="http://teams.jormanvmas.com">http://teams.jormanvmas.com</a>, he is able to browse through the folder structure of the site collection.&nbsp; If he ever finds a report [RDL file], he could click on the RDL file and the report would try to render. Users may also discover URLs that they didn&rsquo;t know existed, and the person that owns the site may not want them to know the site exists.</p>
<p>For example, in the above output, BobSmith sees a link for <a href="http://teams.jormanvmas.com/sites/cqwp.&nbsp; However, if he">http://teams.jormanvmas.com/sites/cqwp.&nbsp; <span style="color: #000000;" color="#000000">However, if he</span></a><span style="color: #000000;" color="#000000"> clicks that link he gets: </span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/8422.clip_image002_6CCAE996.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/8422.clip_5F00_image002_5F00_6CCAE996.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="clip_image002" border="0" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/5488.clip_image002_thumb_2C289D27.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/5488.clip_5F00_image002_5F00_thumb_5F00_2C289D27.jpg" width="510" height="99" /></a></p>
<p>If he browses the URL directly in the browser, as opposed to going through Report Server, he gets the following:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/1106.clip_image003_6467143F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/1106.clip_5F00_image003_5F00_6467143F.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="clip_image003" border="0" alt="clip_image003" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/0842.clip_image003_thumb_6AADEACD.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/0842.clip_5F00_image003_5F00_thumb_5F00_6AADEACD.png" width="469" height="217" /></a></p>
<p>This is odd, the Report Server page should return sites that BobSmith has permissions to, but for some reason, he&rsquo;s unable to browse the URL returned.&nbsp; To track down why this is occurring, I turned to the <a href="http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx">Debugging Tools for Windows</a>.&nbsp; I attached windbg to ReportingServicesService.exe, and broke in on managed exceptions [command : sxe clr].&nbsp; This revealed that Report Services has an HttpHandler, that eventually calls OpenWeb for each site collection in the farm.</p>
<p><strong>Microsoft.SharePoint.Library.SPRequest.OpenWeb</strong>(&hellip;) <br />Microsoft.SharePoint.SPWeb.InitWeb() <br />Microsoft.SharePoint.SPWeb.get_Description() <br />Microsoft.ReportingServices.SharePoint.Objects.RSSPImpWeb.get_Description() <br />Microsoft.ReportingServices.SharePoint.Utilities.CatalogItemUtilities.CreateCatalogItem(Microsoft.ReportingServices.SharePoint.ObjectModel.RSSPWeb) <br />Microsoft.ReportingServices.SharePoint.Server.SharePointDBInterface.InternalFindObjects(&hellip;) <br />Microsoft.ReportingServices.SharePoint.Server.SharePointDBInterface.FindObjectsNonRecursive(&hellip;) <br />Microsoft.ReportingServices.Library.ListChildrenAction.PerformActionNow() <br />Microsoft.ReportingServices.Library.RSSoapAction`1[[System.__Canon, mscorlib]].Execute() <br />Microsoft.ReportingServices.WebServer.ReportServiceHttpHandler.RenderFolder() <br />Microsoft.ReportingServices.WebServer.ReportServiceHttpHandler.RenderPageContent() <br />Microsoft.ReportingServices.WebServer.ReportServiceHttpHandler.RenderPage() <br /><strong>Microsoft.ReportingServices.WebServer.ReportServiceHttpHandler.ProcessRequest</strong>(System.Web.HttpContext)</p>
<p>I confirmed that when this call fails, the link will not render.&nbsp; This means that BobSmith&rsquo;s account is able to call OpenWeb on the Site, even though BobSmith is unable to browse the site. I then browsed the CQWP site as another account that has full access, and used the <a href="http://office.microsoft.com/en-us/sharepoint-server-help/check-permissions-for-a-person-or-site-HA101794808.aspx">Check Permissions</a> functionality to determine what permissions BobSmith has on the site.&nbsp; This showed that BobSmith has Limited Access, which was granted via the Style Resource Readers group.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/6470.image_299F6B69.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/6470.image_5F00_299F6B69.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/1106.image_thumb_48E2123C.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/1106.image_5F00_thumb_5F00_48E2123C.png" width="478" height="235" /></a></p>
<p>I then checked the Limited Access Permission Set and found that the following are granted: </p>
<ul>
<li>View Application Pages&nbsp; -&nbsp; View forms, views, and application pages. Enumerate lists.</li>
<li>Browse User Information&nbsp; -&nbsp; View information about users of the Web site.</li>
<li>Use Remote Interfaces&nbsp; -&nbsp; Use SOAP, Web DAV, the Client Object Model or SharePoint Designer interfaces to access the Web site.&nbsp;</li>
<li>Use Client Integration Features&nbsp; -&nbsp; Use features which launch client applications. Without this permission, users will have to work on documents locally and upload their changes.&nbsp;</li>
<li><span style="background-color: #ffff00;"><b>Open&nbsp; -&nbsp; Allows users to open a Web site, list, or folder in order to access items inside that container.</b><b> </b></span></li>
</ul>
<p>There we are, the link shows up because BobSmith has Open permissions, which is enough for Reporting Server to render the link.&nbsp; I wanted to confirm why BobSmith was in the Style Resource Readers group. This group is added by the Publishing Features, and the group contains the NT Authority\Authenticated Users group.&nbsp; For some information on Style Resource Readers group and the authenticated users group, see the following article <a href="http://technet.microsoft.com/en-us/library/cc262690.aspx">http://technet.microsoft.com/en-us/library/cc262690.aspx</a></p>
<p><a href="http://msdn.microsoft.com/en-us/library/zec9k340(v=VS.71).aspx"><strong><span style="font-size: small;" size="3">HTTPModule</span></strong></a></p>
<p>From the above, we know that any site with the Publishing Features enabled will show up in the list of links when a user browses /ReportServer/, and if a user has read access, they can probe into the directory structure of your site.&nbsp; There&rsquo;s not an out of the box way to disable that view, so if you want to disable it, you&rsquo;re looking at writing some code. I put together an HttpModule that will block incoming requests that will render that view.&nbsp; The trick is that the Report Viewer control also makes requests to the /ReportServer URL to render reports, so you can&rsquo;t block all requests.&nbsp; I went with the following to determine if a request should be blocked:</p>
<ul>
<li>Request has <a href="http://msdn.microsoft.com/en-us/library/ms153683.aspx">rs:Command</a> QueryString set to ListChildren</li>
</ul>
<blockquote>
<p>OR</p>
</blockquote>
<ul>
<li>There is not an rs:Command and the request is to /ReportServer or /ReportServer/</li>
</ul>
<p>The first scenario covers users sending a ListChildren command to the ReportServer.&nbsp; The second scenario covers a user sending a GET to the ReportServer url in a browser, as well as users sending a POST request via PowerShell or some other language to the root.&nbsp; These filters will still allow other rs:Command values as well as calls to the ASMX web services in the /ReportServer URL.</p>
<p>Here&rsquo;s the code for a sample HttpModule.&nbsp; There are 3 methods:</p>
<ul>
<li><strong>Init </strong>&ndash; hook up the BeginRequest event to your Application_BeginRequest method</li>
<li><strong>Application_BeginRequest </strong>&ndash; This is where the URL is checked out</li>
<li><strong>FailRequest </strong>&ndash; This clears and ends the response</li>
</ul>
<div style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;" id="codeSnippetWrapper">
<div style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;" id="codeSnippet">
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum1"> 1:</span> <span style="color: #0000ff;">using</span> System;</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum2"> 2:</span> <span style="color: #0000ff;">using</span> System.Web;</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum3"> 3:</span>&nbsp; </pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum4"> 4:</span> <span style="color: #008000;">/// &lt;summary&gt;</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum5"> 5:</span> <span style="color: #008000;">/// HttpModule that checks incoming URLs and blocks HTTP GET requests to /ReportServer or /ReportServer/. This</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum6"> 6:</span> <span style="color: #008000;">/// prevents users from browsing the Report Server URL to click through links to try and find reports.</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum7"> 7:</span> <span style="color: #008000;">/// </span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum8"> 8:</span> <span style="color: #008000;">///</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum9"> 9:</span> <span style="color: #008000;">/// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum10"> 10:</span> <span style="color: #008000;">/// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum11"> 11:</span> <span style="color: #008000;">/// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum12"> 12:</span> <span style="color: #008000;">/// PARTICULAR PURPOSE.</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum13"> 13:</span> <span style="color: #008000;">/// &lt;/summary&gt;</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum14"> 14:</span> <span style="color: #008000;">/// </span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum15"> 15:</span>&nbsp; </pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum16"> 16:</span> <span style="color: #0000ff;">namespace</span> Sample.SharePoint.ReportServer</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum17"> 17:</span> {</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum18"> 18:</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> ReportServerBlocker : IHttpModule</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum19"> 19:</span>     {</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum20"> 20:</span>         <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> ReportServer()</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum21"> 21:</span>         {</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum22"> 22:</span>         }</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum23"> 23:</span>&nbsp; </pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum24"> 24:</span>         <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> Dispose()</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum25"> 25:</span>         {</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum26"> 26:</span>             </pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum27"> 27:</span>         }</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum28"> 28:</span>&nbsp; </pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum29"> 29:</span>         <span style="color: #008000;">//When the module is initialized, hook the BeginRequest event</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum30"> 30:</span>         <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> Init(HttpApplication context)</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum31"> 31:</span>         {</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum32"> 32:</span>             context.BeginRequest += <span style="color: #0000ff;">new</span> EventHandler(<span style="color: #0000ff;">this</span>.Application_BeginRequest);</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum33"> 33:</span>         }</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum34"> 34:</span>&nbsp; </pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum35"> 35:</span>         <span style="color: #008000;">//When a new request comes in, check the URL. If the request is a GET request to /ReportServer or /ReportServer/, then clear and end the response.</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum36"> 36:</span>         <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> Application_BeginRequest(Object source, EventArgs e)</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum37"> 37:</span>         {</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum38"> 38:</span>             HttpApplication application = (HttpApplication)source;</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum39"> 39:</span>             HttpContext context = application.Context;</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum40"> 40:</span>&nbsp; </pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum41"> 41:</span>             <span style="color: #008000;">//Pull the HttpMethod and the URL from the request</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum42"> 42:</span>             <span style="color: #0000ff;">string</span> httpMethod = context.Request.HttpMethod.ToLower();</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum43"> 43:</span>             <span style="color: #0000ff;">string</span> path = context.Request.Url.AbsolutePath.ToLower();</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum44"> 44:</span>&nbsp; </pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum45"> 45:</span>             <span style="color: #008000;">//Pull the rs:Command querystring</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum46"> 46:</span>             <span style="color: #0000ff;">string</span> command = context.Request.QueryString[<span style="color: #006080;">"rs:Command"</span>];</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum47"> 47:</span>&nbsp; </pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum48"> 48:</span>             <span style="color: #008000;">//if the rs:Command querystring has ListChildren, fail out the request</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum49"> 49:</span>             <span style="color: #0000ff;">if</span> (command != <span style="color: #0000ff;">null</span>)</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum50"> 50:</span>             {</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum51"> 51:</span>                 <span style="color: #0000ff;">if</span> (command.ToLower() == <span style="color: #006080;">"listchildren"</span>)</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum52"> 52:</span>                 {</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum53"> 53:</span>                     FailRequest(context);</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum54"> 54:</span>                 }</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum55"> 55:</span>                 <span style="color: #0000ff;">else</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum56"> 56:</span>                 {</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum57"> 57:</span>                     <span style="color: #0000ff;">return</span>;</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum58"> 58:</span>                 }</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum59"> 59:</span>             }</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum60"> 60:</span>             <span style="color: #008000;">//if there is no querystring, and the request is to /reportserver or /reportserver/, fail the request</span></pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum61"> 61:</span>             <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> (command == <span style="color: #0000ff;">null</span> &amp;&amp; (path.EndsWith(<span style="color: #006080;">"reportserver"</span>) || path.EndsWith(<span style="color: #006080;">"reportserver/"</span>)))</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum62"> 62:</span>             {</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum63"> 63:</span>                 FailRequest(context);</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum64"> 64:</span>             }            </pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum65"> 65:</span>         }</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum66"> 66:</span>&nbsp; </pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum67"> 67:</span>         <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> FailRequest(HttpContext context)</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum68"> 68:</span>         {</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum69"> 69:</span>             context.Response.Clear();</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum70"> 70:</span>             context.Response.End();</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum71"> 71:</span>         }</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum72"> 72:</span>&nbsp; </pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum73"> 73:</span>     }</pre>
<!--CRLF-->
<pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;" id="lnum74"> 74:</span> }</pre>
<!--CRLF--></div>
</div>
<p>Once you build out the HttpModule, you add it to the &lt;httpModules&gt; section of the web.config for Report Server, then restart the SQL Server Reporting Services service.&nbsp; By default, the web.config is found at :</p>
<p><span style="font-family: Courier New;" face="Courier New">C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\web.config</span></p>
<p>For example, if you build the above code into an assembly named Sample.SharePoint.ReportServer.dll, you would add the following to the &lt;httpModules&gt; section of the web.config [after the &lt;clear/&gt; tag]:</p>
<p><span style="font-family: Courier New;" face="Courier New">&lt;add name="ReportViewerBlocker" <br /></span><span style="font-family: Courier New;" face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp; type="Sample.SharePoint.ReportServer.ReportServerBlocker, <br />&nbsp;&nbsp;&nbsp;&nbsp; Sample.SharePoint.ReportServer, <br />&nbsp;&nbsp;&nbsp;&nbsp; Version=1.0.0.0, Culture=neutral, <br />&nbsp;&nbsp;&nbsp;&nbsp; PublicKeyToken=263da74b91424116" /&gt;</span></p>]]></content:encoded>
    </item>
    <item>
      <title>Testing SSL URLs when using SSL Termination</title>
      <link>https://docs.microsoft.com/archive/blogs/jorman/testing-ssl-urls-when-using-ssl-termination</link>
      <pubDate>Sun, 14 Aug 2011 15:22:43 GMT</pubDate>
      <dc:creator><![CDATA[Jerry_Orman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jorman/2011/08/14/testing-ssl-urls-when-using-ssl-termination/</guid>
      <description><![CDATA[Here’s the situation, SSL is setup to terminate at the load balancer.&#160; Sticky sessions are...]]></description>
      <content:encoded><![CDATA[<p>Here’s the situation, SSL is setup to terminate at the load balancer.&#160; Sticky sessions are setup as well, so once you hit a particular WFE, your future requests are routed to the same box.&#160; The problem is that there is not an easy way to validate that the sites are responding from a client machine, or an automation tool.&#160; In this scenario, sticky sessions are handled using cookies, and if you clear your cookies in the browser, you cannot predict which web front end you’ll hit with your next request.&#160; With SharePoint, you could extend the web application with an HTTP URL, and then use host files to hit the HTTP URL, but the downside of that approach is that you’re not confirming the SSL components are working.&#160; Also, if you extend to a new IIS web site, your HTTP URL will be in a separate app domain which could result in your test request to HTTP working, but the SSL site not working.</p>  <p>In order to tackle this scenario, we created a PowerShell script that will send an web request with the appropriate cookie to allow for validating multiple SSL terminated URLs against all the machines in a farm.&#160; In order to do the test, you need a few pieces of information:</p>  <ul>   <li>The URLs to test.</li>    <li>The name of the cookie used for sticky sessions.&#160; You’ll typically have one cookie name per unique URL</li>    <li>The value of the cookie.&#160; You’ll typically have one cookie value per server handling requests</li> </ul>  <p>The key to being able to pull this off via script is to us an <a href="http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx">HttpWebRequest object</a>.&#160; This object allows you to add cookies to a request, as well as get the response status code and the data contained in the response.&#160; There is a sample PowerShell script attached to the post that will perform the test.&#160; In general, the script loops through the URL’s, then loops through each server and validates the response from each server.&#160; If the URL is considered a failure, the request is retried up to a total of 5 times.&#160; If all the retries fail, the URL-server combo is added to a collection of bad servers.&#160; The bad servers can then be sent via email, or you could do some remediation, like recycle an application pool.&#160; </p>  <p>Here’s a rundown of the major parts of the script:</p>  <ul>   <li>Storage for the required data is done with <a href="http://technet.microsoft.com/en-us/library/ee692803.aspx">hashtables</a>.&#160; This will need to be updated to match your environment.&#160; The script can currently handle testing two environments.&#160; In my example, I have a set of values for a production environment, and a set of values for a test environment.      <br /></li>    <ul>     <li>$prodServers&#160; -&#160; Associate a server name with a cookie value.</li>      <li>$prodCookieNames&#160; -&#160; Associates the URL to a cookie name.</li>      <li>$testServers and $testCookieNames&#160; -&#160; the same as above, but for a test environment.</li>   </ul> </ul>  <div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">   <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">     <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #008000">#Associate a servername to a cookie value</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span> $prodServers = @{<span style="color: #006080">&quot;ServerName01&quot;</span> = <span style="color: #006080">&quot;0000000001.20480.0000&quot;</span>;</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span>                     <span style="color: #006080">&quot;ServerName02&quot;</span> = <span style="color: #006080">&quot;0000000002.20480.0000&quot;</span>;</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span>                     <span style="color: #006080">&quot;ServerName03&quot;</span> = <span style="color: #006080">&quot;0000000003.20480.0000&quot;</span>;</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>                     <span style="color: #006080">&quot;ServerName04&quot;</span> = <span style="color: #006080">&quot;0000000004.20480.0000&quot;</span>;}</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>                     </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>&#160; </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span> <span style="color: #008000">#Associate a URL to a cookie name</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span> $prodCookieNames = @{    <span style="color: #006080">&quot;https://teams.contoso.com&quot;</span> = <span style="color: #006080">&quot;BIGipServerpl_teams_80&quot;</span>; </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span>                         <span style="color: #006080">&quot;https://mysite.contoso.com&quot;</span> = <span style="color: #006080">&quot;BIGipServerpl_sp_mysite.contoso.com_80&quot;</span>; </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span>                         <span style="color: #006080">&quot;http://apps.contoso.com&quot;</span> = <span style="color: #006080">&quot;BIGipServerpl_sp_apps.contoso.com_80&quot;</span>}</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12">  12:</span>&#160; </pre>
<!--CRLF--></div>
</div>

<p>&#160;</p>

<ul>
  <li>TestUrl function.&#160; This function makes the web request, then does an initial test of the status code and content length.&#160; The content length check was to rule out requests that don’t fit our failure content.&#160; We were testing for the error response described <a href="http://blogs.msdn.com/b/jorman/archive/2010/03/01/unexpected-error-has-occurred.aspx">here</a>, as any status code 400 or higher.

    <br /></li>

  <li>TestResponse function.&#160; This function runs validation on the response from TestUrl.&#160; In order to test for the HTML for the “An unexpected error has occurred.”, I replace the carriage return/line feeds, tabs and spaces, then do a match against the response for the text “&lt;body&gt;anunexpectederrorhasoccurred.&lt;/body&gt;”.&#160; I also check if the response is empty which should only occur when a response status code is 400 or larger.
    <br /></li>

  <li>SendEmail function.&#160; This function sends email with the server-URL combinations that failed.</li>
</ul>

<p>&#160;</p>

<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:F60BB8FA-6F02-4999-8F5E-9DD4E92C4DA7:0c5ebe9c-087c-479c-bebc-01d51b8e2d4c" class="wlWriterEditableSmartContent"><div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/7762.URLTester_Generic_5CB333F4.ps1" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/7762.URLTester_5F00_Generic_5F00_5CB333F4.ps1" target="_self">URLTester_Generic.ps1</a></div></div>]]></content:encoded>
    </item>
    <item>
      <title>Why is my control working even though I don’t have a SafeControl entry?</title>
      <link>https://docs.microsoft.com/archive/blogs/jorman/why-is-my-control-working-even-though-i-dont-have-a-safecontrol-entry</link>
      <pubDate>Mon, 01 Aug 2011 19:53:21 GMT</pubDate>
      <dc:creator><![CDATA[Jerry_Orman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jorman/2011/08/01/why-is-my-control-working-even-though-i-dont-have-a-safecontrol-entry/</guid>
      <description><![CDATA[This one came as a surprise to me.&#160; Customer pushes out a master page to all their site...]]></description>
      <content:encoded><![CDATA[<p>This one came as a surprise to me.&#160; Customer pushes out a master page to all their site collections using a solution and feature.&#160; The master page has a server control that renders some information, so the control should have a <a href="http://msdn.microsoft.com/en-us/library/ms451053.aspx">SafeControl</a> entry in the web.config file.&#160; Oddly enough, the sites render using the master page, including the server control, without any issues…and there is not a SafeControl entry for the control in the config file.</p>  <p>As it turns out, SharePoint only uses the SafeControl entries when rendering <a href="http://msdn.microsoft.com/en-us/library/cc406685(v=office.12).aspx">customized</a> pages.&#160; When the master page is deployed using the solution and a feature, the file is uncustomized at that point, and the control will render just fine.&#160; Once you touch the page with SharePoint Designer, or in this case use export/import on a site, the master page gets customized and the SafeControl entries are in play, resulting in the site failing to render.&#160; Here’s some documentation for your perusal, highlighting was added to point out the important bits.</p>  <p><a href="http://msdn.microsoft.com/en-us/library/bb964680.aspx">http://msdn.microsoft.com/en-us/library/bb964680.aspx</a> </p>  <p>“Safe Controls </p>  <p>Safe mode processing goes a step beyond protecting against in-line script <b>by also considering what controls a user might place on a customized page</b>. For example, imagine a scenario in which a site administrator tries to mount an attack by adding a server-side control to a site page and parameterizing it in a certain way. Safe mode allows the farm administrator to determine which controls can be used in pages that are processed in safe mode. </p>  <p><b>Customized pages can only contain server-side controls that are explicitly registered as safe controls</b>. Registering a control as a safe control is accomplished by adding a SafeControl entry into the web.config file for the hosting Web application.”</p>  <p>&#160;</p>  <p>Just for completeness, here’s the error and a screenshot of what you get when the SafeControl entry is missing.</p>  <p align="center">“The base type ‘TestControl.DemoMaster’ is not allowed for this page. The type is not registered as safe.”</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/8877.image_008EC6D6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/8877.image_5F00_008EC6D6.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/8867.image_thumb_6411D4F5.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/8867.image_5F00_thumb_5F00_6411D4F5.png" width="498" height="241" /></a></p>]]></content:encoded>
    </item>
    <item>
      <title>Connection Failed Error Using SQL Reporting Services with Kerberos Based Claims</title>
      <link>https://docs.microsoft.com/archive/blogs/jorman/connection-failed-error-using-sql-reporting-services-with-kerberos-based-claims</link>
      <pubDate>Tue, 26 Jul 2011 20:53:00 GMT</pubDate>
      <dc:creator><![CDATA[Jerry_Orman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jorman/2011/07/26/connection-failed-error-using-sql-reporting-services-with-kerberos-based-claims/</guid>
      <description><![CDATA[When you try to connect to a SharePoint 2010 site using Report Builder, you may receive the...]]></description>
      <content:encoded><![CDATA[<p>When you try to connect to a SharePoint 2010 site using Report Builder, you may receive the following error :</p>
<p><strong>Connection failed. <br />Unable to connect to the server that is specified in the URL, &lsquo;http://teams.jormanvmas.com/&rsquo;. <br />Make sure that the server is running, the URL is correct, and you have permission to use the server.</strong></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/3632.image_431CA748.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/3632.image_5F00_431CA748.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/7357.image_thumb_269FB568.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/7357.image_5F00_thumb_5F00_269FB568.png" width="473" height="227" /></a><strong></strong></p>
<p>I was on my lab environment, so I asked myself if I have permission to use the server.&nbsp; I told myself I can use the server, but it still didn&rsquo;t work :-)&nbsp; I started digging into things, and I have the following configuration:</p>
<ul>
<li>Web application is configured for Kerberos based claims.&nbsp;</li>
</ul>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/4721.image_40274295.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/4721.image_5F00_40274295.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/5710.image_thumb_50530A8E.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/5710.image_5F00_thumb_5F00_50530A8E.png" width="426" height="254" /></a></p>
<ul>
<li>SQL Server Reporting services is configured for Windows Authentication in Central Admin.&nbsp;</li>
</ul>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/6765.image_15F794AD.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/6765.image_5F00_15F794AD.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/55/71/metablogapi/6378.image_thumb_0E6C2540.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-55-71-metablogapi/6378.image_5F00_thumb_5F00_0E6C2540.png" width="560" height="235" /></a></p>
<p>When you have SharePoint 2010 and Reporting Services setup this way, reporting services should fall back to using Trusted Account for the Authentication Mode.&nbsp; In this mode, Reporting Services will connect using the application pool account configured for the SharePoint web application.&nbsp; There was a bug in the initial release of the Reporting Services add-in, that installs with the SharePoint 2010 Prerequisite Installer, in which Reporting Services tries to delegate your claims credentials to Reporting Services.&nbsp; You can tell if you are hitting this by checking the Reporting Services log.&nbsp; When you get the above error in Report Builder, you will see the following entry in the Report Server log:</p>
<p>library!ReportServer_0-1!1784!07/26/2011-19:02:01:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: , Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: The permissions granted to user '<span style="background-color: #ffff00;">i:0#.w|jormanvmas\jerry</span>' are insufficient for performing this operation.;</p>
<p>The interesting piece is that the user in the log entry is a claims identity, when it should be the application pool account for the web application. If you really dig into the issue and attach Windbg.exe to the ReportingServicesService.exe process, the stack when the exception is thrown looks like the following.&nbsp; The function at the top of the stack is actually comparing the account name that was received against the application pool accounts configured on the web applications in SharePoint.&nbsp; If the accounts don&rsquo;t match, you get the above error logged.</p>
<p>0:017&gt; !clrstack <br />Microsoft.ReportingServices.SharePoint.Server.SharePointTrustedUserVerification.CheckProcessAccount(Microsoft.ReportingServices.SharePoint.Administration.ObjectModel.RSSPWebApplicationCollection, System.String) <br />Microsoft.ReportingServices.SharePoint.Server.SharePointTrustedUserVerification.VerifyTrustedUserAccessToWssContent(System.String, System.String, System.String) <br />Microsoft.ReportingServices.Library.TrustedAccountVerification.VerifyTrustedAccountAccess(System.String, System.String) <br />Microsoft.ReportingServices.WebServer.WebServiceHelper.ExtractWebUserInfo(Microsoft.ReportingServices.WebServer.TrustedUserHeader, System.String) <br />Microsoft.ReportingServices.WebServer.RsSoapBase.Init(System.String, Boolean) <br />Microsoft.ReportingServices.WebServer.ReportingService2010.Initialize(System.String, Boolean) <br />Microsoft.ReportingServices.WebServer.ReportingService2010.Initialize(System.String) <br />Microsoft.ReportingServices.WebServer.ReportingService2010.ListItemTypes() <br />System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, Boolean) <br />System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)</p>
<p>If you&rsquo;re hitting this issue, and need to use Kerberos for authentication, you will want to install the <a href="http://www.microsoft.com/download/en/details.aspx?id=26728">SP1 update for the reporting services add-in</a> on all your SharePoint 2010 boxes [you want the rsSharePoint.exe download].&nbsp; This has a fix that will let Kerberos based claims fallback to Trusted Account when connecting to Reporting Services.&nbsp; If you need a quick workaround, you can switch the authentication mode on the web application to NTLM.</p>
<p>For information on how Reporting Services works with claims authentication, see <a href="http://msdn.microsoft.com/en-us/library/ff487970(v=SQL.105).aspx">Claims Authentication and Reporting Services</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>SHA512 Forms Authentication in SharePoint 2010</title>
      <link>https://docs.microsoft.com/archive/blogs/jorman/sha512-forms-authentication-in-sharepoint-2010</link>
      <pubDate>Mon, 25 Jul 2011 20:38:00 GMT</pubDate>
      <dc:creator><![CDATA[Jerry_Orman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jorman/2011/07/25/sha512-forms-authentication-in-sharepoint-2010/</guid>
      <description><![CDATA[I was recently working through an issue in which I needed to setup the SQL Membership provider to...]]></description>
      <content:encoded><![CDATA[<p>I was recently working through an issue in which I needed to setup the SQL Membership provider to use SHA512 as the hashing algorithm, instead of the default SHA1.&nbsp; For a normal ASP.Net application, you would set the <a href="http://msdn.microsoft.com/en-us/library/1b9hw62f.aspx">hashAlgorithmType</a> in the web.config for the application.&nbsp; For SharePoint 2010, you need to set the attribute on the web.config for the Security Token Service.&nbsp; By default, this config file is located in the following directory:</p>
<p><span style="font-family: Courier New;" face="Courier New">C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\WebServices\SecurityToken</span></p>
<p>If you make the change in the Web Application, instead of the Security Token Service, you&rsquo;ll get the following entry in the ULS logs when you try to logon :</p>
<p><span style="font-family: Courier New; font-size: x-small;" face="Courier New" size="2">05/17/2011 17:43:19.96 w3wp.exe (0x189C)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />SharePoint Foundation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />Claims Authentication&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />fsq7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />High&nbsp;&nbsp;&nbsp; <br />Request for security token failed with exception: <strong><span style="color: #ff0000;" color="#ff0000">System.ServiceModel.FaultException: The security token username and password could not be validated.</span></strong>&nbsp;&nbsp;&nbsp;&nbsp; <br />at Microsoft.IdentityModel.Protocols.WSTrust.WSTrustChannel.ReadResponse&nbsp;&nbsp;&nbsp;&nbsp; <br />at Microsoft.IdentityModel.Protocols.WSTrust.WSTrustChannel.Issue <br />at Microsoft.IdentityModel.Protocols.WSTrust.WSTrustChannel.Issue <br /></span><span style="font-family: Courier New; font-size: x-small;" face="Courier New" size="2">at Microsoft.SharePoint.SPSecurityContext.SecurityTokenForContext</span></p>
<p>Some items to be aware of if you&rsquo;re making this type of change :</p>
<ul>
<li>There is only one Security Token Service per farm.&nbsp; This would mean that you can only have one hashAlgorithmType setting per farm.&nbsp; If you need to have multiple web apps with multiple hash algorithms, you&rsquo;ll end up building a custom membership provider. </li>
<li>Depending on your membership provider, if you try to logon too many times, you&rsquo;ll get a locked out account. Now you&rsquo;re troubleshooting your provider configuration along with a locked out account.</li>
</ul>
<p>If you&rsquo;re looking for some walkthroughs on setting up forms authentication in SharePoint 2010, <a href="http://sharepointchick.com/Default.aspx">Mirjam van Olst</a> has some very good blogs on setting up both SQL and LDAP providers :</p>
<ul>
<li><a href="http://sharepointchick.com/archive/2010/05/07/configuring-claims-and-forms-based-authentication-for-use-with-a.aspx">Configuring claims and forms based authentication for use with a SQL provider in SharePoint 2010</a></li>
<li><a href="http://sharepointchick.com/archive/2010/05/06/configuring-claims-and-forms-based-authentication-for-use-with-an.aspx">Configuring claims and forms based authentication for use with an LDAP provider in SharePoint 2010</a></li>
</ul>]]></content:encoded>
    </item>
  </channel>
</rss>