<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Ideas &amp; Solutions Etc.</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/johnlee/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/johnlee/feed.xml</link>
    <description>perception vision dedication inspiration action realization</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:14:59 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Get Groups for Current User</title>
      <link>https://docs.microsoft.com/archive/blogs/johnlee/get-groups-for-current-user</link>
      <pubDate>Tue, 29 Jan 2013 22:16:02 GMT</pubDate>
      <dc:creator><![CDATA[pursca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/johnlee/2013/01/29/get-groups-for-current-user/</guid>
      <description><![CDATA[There are several ways of doing this but performance differs:  Method 1:   WindowsIdentity wi =...]]></description>
      <content:encoded><![CDATA[<p>There are several ways of doing this but performance differs:</p>  <p>Method 1: </p>  <pre class="csharpcode">WindowsIdentity wi = System.Security.Principal.WindowsIdentity.GetCurrent();

<span class="kwrd">foreach</span> (var u <span class="kwrd">in</span> wi.Groups)
{
     Console.WriteLine(<span class="str">&quot;{0} &quot;</span>, u.Value);
}
</pre>

<p></p>

<p>Method 2: </p>

<p>&#160;</p>

<pre class="csharpcode">AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
WindowsIdentity wi = System.Threading.Thread.CurrentPrincipal.Identity <span class="kwrd">as</span> WindowsIdentity;
 
<span class="kwrd">foreach</span> (var u <span class="kwrd">in</span> wi.Groups)
{
    Console.WriteLine(<span class="str">&quot;{0} &quot;</span>, u.Value);
}
</pre>

<pre class="csharpcode">Method 3:</pre>

<pre class="csharpcode"><span class="kwrd">using</span> (var adContext = <span class="kwrd">new</span> PrincipalContext(ContextType.Domain, domainName))
{
      UserPrincipal user = UserPrincipal.Current;
      PrincipalSearchResult&lt;Principal&gt; results = user.GetAuthorizationGroups();
      <span class="kwrd">foreach</span> (var u <span class="kwrd">in</span> results)
      {
          Console.WriteLine(<span class="str">&quot;{0}&quot;</span>, u.Sid);
      }
}
</pre>

<pre class="csharpcode"></pre>

<pre class="csharpcode">Method 4:</pre>

<pre class="csharpcode"><pre class="csharpcode">DirectoryEntry rootDSE = <span class="kwrd">new</span> DirectoryEntry(<span class="str">&quot;LDAP://RootDSE&quot;</span>);
<span class="kwrd">string</span> domainContext = rootDSE.Properties[<span class="str">&quot;defaultNamingContext&quot;</span>].Value <span class="kwrd">as</span> <span class="kwrd">string</span>;
<span class="kwrd">string</span> username = Environment.UserName;

List&lt;<span class="kwrd">string</span>&gt; userNestedMembership = <span class="kwrd">new</span> List&lt;<span class="kwrd">string</span>&gt;();

DirectoryEntry domainConnection = <span class="kwrd">new</span> DirectoryEntry();
domainConnection.Path = <span class="kwrd">string</span>.Format(<span class="str">&quot;LDAP://{0}&quot;</span>, domainContext);
domainConnection.AuthenticationType = AuthenticationTypes.Secure;

DirectorySearcher samSearcher = <span class="kwrd">new</span> DirectorySearcher();

samSearcher.SearchRoot = domainConnection;
samSearcher.Filter = <span class="str">&quot;(samAccountName=&quot;</span> + username + <span class="str">&quot;)&quot;</span>;

SearchResult samResult = samSearcher.FindOne();

<span class="kwrd">if</span> (samResult != <span class="kwrd">null</span>)
{
    DirectoryEntry theUser = samResult.GetDirectoryEntry();
    theUser.RefreshCache(<span class="kwrd">new</span> <span class="kwrd">string</span>[] { <span class="str">&quot;tokenGroups&quot;</span> });

    <span class="kwrd">foreach</span> (<span class="kwrd">byte</span>[] resultBytes <span class="kwrd">in</span> theUser.Properties[<span class="str">&quot;tokenGroups&quot;</span>])
    {
        System.Security.Principal.SecurityIdentifier mySID = <span class="kwrd">new</span> System.Security.Principal.SecurityIdentifier(resultBytes, 0);
        Console.WriteLine(mySID);
    }
}
</pre></pre>]]></content:encoded>
    </item>
    <item>
      <title>SQL Server Reporting Service Application 2012 DR Procedures</title>
      <link>https://docs.microsoft.com/archive/blogs/johnlee/sql-server-reporting-service-application-2012-dr-procedures</link>
      <pubDate>Wed, 03 Oct 2012 15:09:15 GMT</pubDate>
      <dc:creator><![CDATA[pursca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/johnlee/2012/10/03/sql-server-reporting-service-application-2012-dr-procedures/</guid>
      <description><![CDATA[I was tasked to find out and test the detailed steps to handle DR for SSRS 2012 service application...]]></description>
      <content:encoded><![CDATA[<p>I was tasked to find out and test the detailed steps to handle DR for SSRS 2012 service application on SharePoint 2010 and in this blog I will share the steps I took to move SSRS 2010 service application from “production” to DR environment.</p>  <p>Environment: </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/85/91/metablogapi/4762.image_5A118D35.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-85-91-metablogapi/4762.image_5F00_5A118D35.png"><img style="background-image: none; display: inline" 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/85/91/metablogapi/8562.image_thumb_4E7BCFF6.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-85-91-metablogapi/8562.image_5F00_thumb_5F00_4E7BCFF6.png" width="334" height="291" /></a></p>  <p>Prepare the environment:</p>  <ul>   <li>DNS A record: drtestweb.contoso.com – 10.0.0.200 </li>    <li>Kerberos settings (I will omit the FQDN part of the settings in the blog)      <ul>       <li>setspn –a MSSQLSvc/LAB-SQL2008R2 contoso\sp_sql </li>        <li>setspn –a HTTP/drtestweb contoso\sp_app </li>        <li>KCD: allow contoso\sp_c2wts to delegate SPNs on contoso\sp_sql for any protocol&#160; (SSRS 2012 SA is claim aware and is similar to PPS and Excel Service – please refer to TechNet document how to configure Kerberos for PPS and Excel Service) </li>     </ul>   </li>    <li>create production farm on SP2010DRTEST1      <ol>       <li>configure C2WTS service to run under contoso\sp_c2wts account and also assign “act as part of OS” permission and make it local admin </li>        <li>install SQL Server 2012 Reporting Service Application for SharePoint 2010 and create SSRS SA and also configure the unattended execution account </li>        <li>create web application <a href="https://drtestweb.contoso.com">https://drtestweb.contoso.com</a> using Team site for root web </li>        <li>create a document library SSRS2012 and add 3 SSRS content types to this library </li>        <li>create two data sources:          <ol>           <li>dsUserCredential – this will access LAB-SQL2008R2 using end user’s credential (Kerberos) </li>            <li>dsUnattendedAccount – this will access LAB-SQL2008R2 using unattended account </li>         </ol>       </li>        <li>create one report for each of the above data source (note – it seems like a bug that you could not use the data source that is configured using unattended account to create report but you can temporarily switch to use user credential to create the report and then switch back to unattended account after report created) </li>     </ol>   </li>    <li>create DR farm on SP2010DRTEST2      <ul>       <li>make sure to use same service accounts as production farm (Kerberos will just work after switch) </li>        <li>configure C2WTS service to run under contoso\sp_c2wts account and also assign “act as part of OS” permission and make it local admin </li>        <li>install SQL Server 2012 Reporting Service Application for SharePoint 2010 – DO NOT create SSRS SA </li>        <li>create web application <a href="https://drtestweb.contoso.com/">https://drtestweb.contoso.com</a> and then delete the content database </li>     </ul>   </li>    <li>TEST production farm      <ul>       <li>go to Win7client, make sure the two reports are working as expected </li>     </ul>   </li> </ul>  <p>BCM steps:</p>  <ul>   <li>from SSRS SA, backup the encryption key and copy this key to a safe place and note the password in a secret place </li>    <li>for SharePoint content database, you can either choose log shipping or async database mirroring to sync production database SQL to DR SQL server </li>    <li>for 3 SSRS databases, <a href="https://technet.microsoft.com/en-us/library/cc678868.aspx#Section7" target="_blank">TechNet</a> says log shipping and database mirroring is not supported so what you need to do for those 3 databases is to have a schedule for full backup and log backup and copy the backup files offsite for DR purpose.<font style="background-color: #ffffff"> <font color="#ff0000"><strong>[UPDATE] we might change the word not support soon because when we say not supported we really meant in some cases the SQL agent job cannot automatically failover. so for DR purpose, we can use log shipping or async database mirroring to make the production database in sync with DR site.</strong></font></font></li>    <li>In this test, I will use simple backup and restore for all 4 databases </li> </ul>  <p>In case of Disaster, here are the steps for Recovery (the following steps are in DR farm): </p>  <ol>   <li>assume we have the encryption key and all database backups </li>    <li>restore content database and 3 SSRS database </li>    <li>create SSRS SA and specify the name of the database to the database name you restored from the backup </li>    <li>in the SSRS key management, restore the encryption key </li>    <li>configure the unattended account – make sure using the same unattended account you used in production </li>    <li>attach the content database to web application <a href="https://drtestweb.contoso.com">https://drtestweb.contoso.com</a> </li> </ol>  <p>TEST DR</p>  <ol>   <li>shutdown SP2010DRTEST1 server (mimic Disaster) </li>    <li>go to Win7Client you will not be able to access the site </li>    <li>go to DC, change the DNS A record drtestwebapp to point to 10.0.201 (DR farm box) </li>    <li>go back to Win7Client machine, issue ipconfig /flushdns, verify you can ping drtestwebapp to resolve 10.0.0.201 and then test both reports and it worked for me </li> </ol>  <p>Hope this will benefit someone else who are interested in how to handle SSRS 2010 SA DR. Happy DR!!!</p>]]></content:encoded>
    </item>
    <item>
      <title>SharePoint 2010 Forms Authentication with Sql</title>
      <link>https://docs.microsoft.com/archive/blogs/johnlee/sharepoint-2010-forms-authentication-with-sql</link>
      <pubDate>Sun, 02 Sep 2012 18:04:31 GMT</pubDate>
      <dc:creator><![CDATA[pursca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/johnlee/2012/09/02/sharepoint-2010-forms-authentication-with-sql/</guid>
      <description><![CDATA[https://blogs.technet.com/b/mahesm/archive/2010/04/07/configure-forms-based-authentication-fba-with-s...]]></description>
      <content:encoded><![CDATA[<p><a title="https://blogs.technet.com/b/mahesm/archive/2010/04/07/configure-forms-based-authentication-fba-with-sharepoint-2010.aspx" href="https://blogs.technet.com/b/mahesm/archive/2010/04/07/configure-forms-based-authentication-fba-with-sharepoint-2010.aspx">https://blogs.technet.com/b/mahesm/archive/2010/04/07/configure-forms-based-authentication-fba-with-sharepoint-2010.aspx</a></p>  <p><a title="https://cks.codeplex.com/releases/view/7450" href="https://cks.codeplex.com/releases/view/7450">https://cks.codeplex.com/releases/view/7450</a></p>  <p>Federated Search</p>  <p><a title="https://manish-sharepoint.blogspot.com/2009/12/federated-search-in-sharepoint-2010.html" href="https://manish-sharepoint.blogspot.com/2009/12/federated-search-in-sharepoint-2010.html">https://manish-sharepoint.blogspot.com/2009/12/federated-search-in-sharepoint-2010.html</a></p>  <p><a title="https://manish-sharepoint.blogspot.com/2009/12/federated-search-in-sharepoint-2010_21.html" href="https://manish-sharepoint.blogspot.com/2009/12/federated-search-in-sharepoint-2010_21.html">https://manish-sharepoint.blogspot.com/2009/12/federated-search-in-sharepoint-2010_21.html</a></p>  <p><a title="https://blogs.technet.com/b/vedant/archive/2010/10/27/federated-search-connectors-for-enterprise-search.aspx" href="https://blogs.technet.com/b/vedant/archive/2010/10/27/federated-search-connectors-for-enterprise-search.aspx">https://blogs.technet.com/b/vedant/archive/2010/10/27/federated-search-connectors-for-enterprise-search.aspx</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Multi-tenancy with Service Farm</title>
      <link>https://docs.microsoft.com/archive/blogs/johnlee/multi-tenancy-with-service-farm</link>
      <pubDate>Sat, 01 Sep 2012 19:57:41 GMT</pubDate>
      <dc:creator><![CDATA[pursca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/johnlee/2012/09/01/multi-tenancy-with-service-farm/</guid>
      <description><![CDATA[Service farm provide the following partitioned service applications: SSS, MMS, BCS, Search, UPA...]]></description>
      <content:encoded><![CDATA[<p>Service farm provide the following partitioned service applications: SSS, MMS, BCS, Search, UPA</p>  <p>Consuming farm one web application <a href="https://hosting.litware.local">https://hosting.litware.local</a> hosting several host header site collections for tenant </p>  <ul>   <li><font face="Calibri">Steps to create partitioned service applications</font></li>    <ul>     <li><font face="Calibri">PowerShell with either PartitionMode or Partitioned switch</font></li>   </ul>    <li>Publish service applications</li>    <ul>     <li>trust Root authority and STS cert from consuming farm</li>      <li>grant consuming farm ID full trust to <font color="#ff0000">Application Discovery and Load Balancer Service App</font> and related service apps to be published</li>      <li>publish service applications from UI and get all Uri from the publishing screen</li>      <li>Permissions</li>      <ul>       <li>UPA</li>        <ul>         <li>setup account full control and administrators full control, consuming farm account and webapp account full control</li>          <li></li>       </ul>        <li>Search</li>        <ul>         <li></li>       </ul>        <li>BCS</li>        <ul>         <li></li>       </ul>        <li>SSS</li>        <ul>         <li></li>       </ul>        <li>MMS</li>        <ul>         <li></li>       </ul>     </ul>   </ul>    <li>Consuming service applications</li>    <ul>     <li>trust publishing farm Root authority cert</li>      <li>use powershell New-SPXXXProxy cmdlet with Partitioned or PartitionMode to create proxy, the –Uri is the Uri you got from the publishing screen</li>      <li><font style="background-color: rgb(255, 255, 0);">note: when connects to remote BCS and SSS you cannot specify partitionmode so you need to fix the proxy afterward using following scripts</font>:</li>      <p>-- SSS       <br /> $proxy = Get-SPServiceApplicationProxy fb99edae-1b27-49c2-82bf-60bf6b9e91a        <br /> $prop = $proxy.Properties        <br /> $type = $prop[&quot;Microsoft.Office.Server.Utilities.SPPartitionOptions&quot;].GetType()        <br /> $partition = [enum]::Parse( $type, 1 )        <br /> $prop[&quot;Microsoft.Office.Server.Utilities.SPPartitionOptions&quot;] = $partition        <br /> $proxy.Update()</p>      <p>-- BCS       <br /> $proxy = Get-SPServiceApplicationProxy db0f1f9f-aec4-45c1-a149-47f105278304        <br /> $prop = $proxy.Properties        <br /> $type = $prop[&quot;Microsoft.SharePoint.Utilities.SPPartitionOptions&quot;].GetType()        <br /> $partition = [enum]::Parse( $type, 1 )        <br /> $prop[&quot;Microsoft.SharePoint.Utilities.SPPartitionOptions&quot;] = $partition        <br /> $proxy.Update()</p>   </ul>    <li>Create a named proxy group to group all partitioned service proxy, then use UI to add those proxies into this named group</li>    <ul>     <li>New-SPServiceProxyGroup “Partioned Service Applications”</li>      <li>associate the named proxy group to web application <a href="https://hosting.litware.local">https://hosting.litware.local</a> </li>   </ul>    <li>Turn on multi-tenancy</li>    <ul>     <li>create Settings Service Application and start the service instance</li>      <p>Get-spserviceinstance | ? {$_.GetType().Name -eq &quot;SPSubscriptionSettingsServiceInstance&quot;} | Start-SPServiceInstance</p>      <p>$acc = Get-SPManagedAccount&#160; &quot;LITWARE\sp_service&quot;       <br /> $appPool = New-SPServiceApplicationPool -Name &quot;Settings Service App Pool&quot; -Account $acc        <br /> $app = New-SPSubscriptionSettingsServiceApplication –ApplicationPool $appPool –Name &quot;Settings Service App&quot; -DatabaseServer LITSQL1 –DatabaseName Internet_SettingsServiceDB        <br /> $proxy = New-SPSubscriptionSettingsServiceApplicationProxy –ServiceApplication $app        <br /></p>      <li>create a host header site collection and test if the site collection is working before adding to subscription</li>      <ul>       <li>New-SPSite -Url <a href="https://aw.local">https://aw.local</a> -OwnerAlias &quot;litware\aw1&quot; -HostHeaderWebApplication &quot;<a href="https://hosting.litware.local">https://hosting.litware.local&quot;</a> -Template &quot;STS#0&quot;</li>        <li><font style="background-color: rgb(255, 255, 0);">Note:</font> To avoid manually creating IIS host header for host header site collections on the web application, you should not use host header when creating the web application that will be used for the host named site collections. What I did not make it work is to stop default website which is using the port 80, created a web application on port 80 (<a href="https://litsp1">https://litsp1</a>) and then create host header site collections using <a href="https://litsp1">https://litsp1</a> and this works without manually adding host header to the IIS website; I further extended <a href="https://litsp1">https://litsp1</a> to <a href="https://host2.litware.local">https://host2.litware.local</a> to different zone, then I used the <a href="https://host2.litware.local">https://host2.litware.local</a> to create host header site collection (<a href="https://pursca.local">https://pursca.local</a>) and this works too – I checked the SPSite.WebApplication for <a href="https://pursca.local">https://pursca.local</a> is still pointed to <a href="https://litsp1">https://litsp1</a> even I used the <a href="https://host2.litware.local">https://host2.litware.local</a> in the New-SPSite command to create the second site collection.&#160; <font style="background-color: rgb(255, 192, 0);">So the question is how do we make host header site collections load balanced on multiple servers if the SPSite.WebApplication always pointed to the physical box name? (to be researched on this)</font></li>        <li>good reading from <a href="https://blogs.msdn.com/b/kaevans/archive/2012/03/27/what-every-sharepoint-admin-needs-to-know-about-host-named-site-collections.aspx" target="_blank">Kirkk Evans on Host Named Site Collections</a>          <br /></li>     </ul>      <li>create subscription and add the site collection into subscription</li>      <ul>       <li><strong>$sub = Get-SPSiteSubscription &lt;Guid&gt;</strong></li>        <li>$site = Get-SPSite <a href="https://aw.local">https://aw.local</a></li>        <li>$sub.Add($site)</li>     </ul>      <li>create tenant management site</li>      <ul>       <li>New-SPSite -Url <a href="https://aw.local/sites/admin">https://aw.local/sites/admin</a> -OwnerAlias &quot;litware\aw1&quot; -AdministrationSiteType tenantAdministration -HostHeaderWebApplication &quot;<a href="https://hosting.litware.local&quot;">https://hosting.litware.local&quot;</a> -SiteSubscription $sub -Template &quot;<font style="background-color: rgb(255, 255, 0);">tenantadmin#0&quot;</font></li>     </ul>      <li>create hostheader managed path for mysite (<a href="https://aw.local/my">https://aw.local/my</a>) and a mysite host</li>      <ul>       <li>New-SPManagedPath “my” –hostheader –Explicit</li>        <li>New-SPSite -Url <a href="https://aw.local/my">https://aw.local/my</a> -OwnerAlias &quot;litware\aw1&quot; -HostHeaderWebApplication &quot;<a href="https://hosting.litware.local&quot;">https://hosting.litware.local&quot;</a> -SiteSubscription $sub -Template &quot;SPSMSITEHOST#0&quot;</li>        <li><font style="background-color: rgb(255, 255, 0);">new-spmanagedpath &quot;/my/personal&quot; -hostheader</font></li>     </ul>      <li>create search center (if your aw.local is using publishing portal, you will have a subsite named as search so to avoid confusion you might want use /sites/searchcenter for cross site collections search) </li>      <ul>       <li>New-SPSite -Url <a href="https://aw.local/sites/search">https://aw.local/sites/search</a> -OwnerAlias &quot;litware\aw1&quot; -HostHeaderWebApplication &quot;<a href="https://hosting.litware.local&quot;">https://hosting.litware.local&quot;</a> -SiteSubscription $sub -Template &quot;SRCHCEN#0&quot;</li>     </ul>      <li><font style="background-color: rgb(255, 255, 0);">Import user profile after adding first tenant</font></li>      <ul>       <li>$sub = Get-SPSiteSubscription &lt;Guid&gt;</li>        <li>$upaProxy = Get-SPServiceApplicationProxy &lt;Guid&gt;</li>        <li>Add-SPSiteSubscriptionProfileConfig -id $sub –SynchronizationOU “AdventureWorks” –MySiteHostLocation &quot;<a href="https://aw.local/my&quot;">https://aw.local/my&quot;</a> -MySiteManagedPath &quot;/my/personal&quot; -SiteNamingConflictResolution &quot;None&quot; -ProfileServiceApplicationProxy $upaProxy</li>        <li><font style="background-color: rgb(255, 192, 0);">note: by some reason the sp_farm are imported for each tenant as an user – need to do some investigation</font>&#160;</li>     </ul>      <li>MySite settings (<a href="https://aw.local/my/username">https://aw.local/my/username</a>)</li>      <ul>       <li>enable self-site creation on <a href="https://hosting.litware.local">https://hosting.litware.local</a> – root site collection must be created before you can enable self-site creation</li>        <li></li>     </ul>      <li>Search </li>      <ul>       <li>Content Search</li>        <ul>         <li><a href="https://hosting.litware.local">https://hosting.litware.local</a></li>       </ul>        <li>People Search</li>        <ul>         <li>sps3://aw.local</li>          <li>sps3://con.local</li>       </ul>     </ul>   </ul> </ul>]]></content:encoded>
    </item>
    <item>
      <title>Remove Orphan PWA</title>
      <link>https://docs.microsoft.com/archive/blogs/johnlee/remove-orphan-pwa</link>
      <pubDate>Wed, 25 Jul 2012 17:38:51 GMT</pubDate>
      <dc:creator><![CDATA[pursca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/johnlee/2012/07/25/remove-orphan-pwa/</guid>
      <description><![CDATA[I had a test web application with PWA provisioned and I just deleted the web application without...]]></description>
      <content:encoded><![CDATA[<p>I had a test web application with PWA provisioned and I just deleted the web application without unprovisioning the PWA. Now I run Get-Spdatabase and I got those PWA databases showing there even after I deleted the databases from the SQL server. I tried to use STSADM –o deleteconfigurationobject –id &lt;spdatabase_id&gt; and this will complain that the database is referenced by a project site=Guid.</p>  <p>How do we get rid of the orphan PWA?</p>  <p>$sa = Get-SPServiceApplication | ? {$_.TypeName –eq “Project Server PSI Service Application”}</p>  <p>$sa.SiteCollection&#160; … this will display all PWA including those orphaned ones – you need to locate those orphaned one and get the ID of that Site Collection then you remove them from the collection as follows:</p>  <p>$sa.SiteCollection.Remove(“Orphan PWA Site Collection GUID”)</p>  <p>$sa.Update()</p>]]></content:encoded>
    </item>
    <item>
      <title>Object reference not set to an instance of an object while uploading InfoPath Form</title>
      <link>https://docs.microsoft.com/archive/blogs/johnlee/object-reference-not-set-to-an-instance-of-an-object-while-uploading-infopath-form</link>
      <pubDate>Mon, 23 Jul 2012 17:29:18 GMT</pubDate>
      <dc:creator><![CDATA[pursca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/johnlee/2012/07/23/object-reference-not-set-to-an-instance-of-an-object-while-uploading-infopath-form/</guid>
      <description><![CDATA[&#160;  I have a full trusted InfoPath form that was OK in MOSS 2007 and it was also OK to import...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>I have a full trusted InfoPath form that was OK in MOSS 2007 and it was also OK to import from the exported cab files with SharePoint 2010 RTM. But it throws the following error after SP2010 SP1&#160; when I tried to upload the same InfoPath form:</p>  <p>System.NullReferenceException: Object reference not set to an instance of an object.&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Converter.DetectUnsupportedNamespaces.VerifyNamespace(String ns, String nodeName, ICollection`1 problems)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Converter.BusinessLogicScanner.&lt;&gt;c__DisplayClass2.&lt;Analyze&gt;b__1(MethodBase method)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Converter.BusinessLogicScanner.VisitMethod(MethodBase method, MethodInfoVisitor methodVisitor)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Converter.BusinessLogicScanner.VisitBody(MethodBase method, MethodInfoVisitor methodVisitor)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Converter.BusinessLogicScanner.VisitBody(MethodBase method, MethodInfoVisitor methodVisitor)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Converter.BusinessLogicScanner.VisitBody(MethodBase method, MethodInfoVisitor methodVisitor)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Converter.BusinessLogicScanner.VisitMethods(Type mainType, MethodInfoVisitor methodVisitor)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Converter.BusinessLogicScanner.Analyze(Type mainType, List`1 rules)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.SolutionLifetime.BusinessLogicLoader.VerifyUsingFxCop(Assembly rootAssembly)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.SolutionLifetime.BusinessLogicLoader.Microsoft.Office.InfoPath.Server.SolutionLifetime.ISolutionComponent.Parse(XPathNavigator documentClassNode, XmlNamespaceManager solutionNamespaceManager, ConversionContext context)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.SolutionLifetime.Solution.ParseManifest(ConversionContext context, XPathNavigator node)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.SolutionLifetime.Solution.LoadFromXsn(ConversionContext context, SolutionCabinet solutionCabinet, SolutionIdentity solutionId)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.SolutionLifetime.Solution.&lt;&gt;c__DisplayClass2.&lt;ConstructFromXsnFile&gt;b__0()&#160;&#160;&#160; <br /> at Microsoft.Office.Server.Diagnostics.FirstChanceHandler.ExceptionFilter(Boolean fRethrowException, TryBlock tryBlock, FilterBlock filter, CatchBlock catchBlock, FinallyBlock finallyBlock)&#160;&#160;&#160; <br /> at Microsoft.Office.Server.Diagnostics.ULS.SendWatsonOnExceptionTag(UInt32 tagID, ULSCatBase categoryID, String output, Boolean fRethrowException, TryBlock tryBlock, CatchBlock catchBlock, FinallyBlock finallyBlock)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.SolutionLifetime.Solution.ConstructFromXsnFile(ConversionContext context, SolutionCabinet solutionCabinet, SolutionIdentity solutionId)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Converter.ConversionAppDomain.OperationRunner.ExecuteConversion(ConversionContext&amp; context, SolutionCabinet solutionCabinet, SolutionIdentity solutionId, Boolean executeVerification)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Converter.ConversionAppDomain.OperationRunner.ExecuteConversion(ConversionContext&amp; context, SolutionCabinet solutionCabinet, SolutionIdentity solutionId, Boolean executeVerification)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Converter.ConversionAppDomain.ExecuteInRemote(ConversionContext context, AppDomain domain, SolutionCabinet solutionCabinet, SolutionIdentity solutionId)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Converter.ConversionAppDomain.&lt;&gt;c__DisplayClass4.&lt;TryRunConversion&gt;b__0()&#160;&#160;&#160; <br /> at Microsoft.Office.Server.Diagnostics.FirstChanceHandler.ExceptionFilter(Boolean fRethrowException, TryBlock tryBlock, FilterBlock filter, CatchBlock catchBlock, FinallyBlock finallyBlock)&#160;&#160;&#160; <br /> at Microsoft.Office.Server.Diagnostics.ULS.SendWatsonOnExceptionTag(UInt32 tagID, ULSCatBase categoryID, String output, Boolean fRethrowException, TryBlock tryBlock, CatchBlock catchBlock, FinallyBlock finallyBlock)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Converter.ConversionAppDomain.TryRunConversion(ConversionContext context, SolutionCabinet solutionCabinet, SolutionIdentity solutionId, Byte[] solutionData, WspSolutionInfo wspSolution)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Converter.ConversionAppDomain.RunConversion(ConversionContext context, SolutionCabinet solutionCabinet, SolutionIdentity solutionId)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Util.InstalledSolutions.&lt;&gt;c__DisplayClass7.&lt;VerifyUnpackedSolution&gt;b__6()&#160;&#160;&#160; <br /> at Microsoft.Office.Server.Diagnostics.FirstChanceHandler.ExceptionFilter(Boolean fRethrowException, TryBlock tryBlock, FilterBlock filter, CatchBlock catchBlock, FinallyBlock finallyBlock)&#160;&#160;&#160; <br /> at Microsoft.Office.Server.Diagnostics.ULS.SendWatsonOnExceptionTag(UInt32 tagID, ULSCatBase categoryID, String output, Boolean fRethrowException, TryBlock tryBlock, CatchBlock catchBlock, FinallyBlock finallyBlock)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Util.InstalledSolutions.VerifyUnpackedSolution(SolutionCabinet solutionCabinet, String originalFileName, ConversionContext context, ConverterLog&amp; outputConverterLog, Byte[]&amp; outputConvertedData)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Util.InstalledSolutions.VerifySolution(String absoluteLocalPath, ConversionContext context, ConverterLog&amp; converterLog, Byte[]&amp; convertedData)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Administration.FormTemplateCollection.VerifyFormTemplateInternal(String solutionPath, ConverterLog&amp; converterLog)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.Administration.FormTemplateCollection.TryAdd(String solutionPath, ConverterLog&amp; converterLog)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.ApplicationPages.UploadFormTemplatePage.&lt;&gt;c__DisplayClass1.&lt;ButtonOkClick&gt;b__0(String sourceName)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.ApplicationPages.UploadFormTemplatePage.HandleFiles(HandleFile fileHandler)&#160;&#160;&#160; <br /> at Microsoft.Office.InfoPath.Server.ApplicationPages.UploadFormTemplatePage.ButtonOkClick(Object sender, EventArgs e)&#160;&#160;&#160; <br /> at System.Web.UI.WebControls.Button.OnClick(EventArgs e)&#160;&#160;&#160; <br /> at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)&#160;&#160;&#160; <br /> at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)&#160;&#160;&#160; <br /> at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)</p>  <p>In the troubleshooting process, I copied this InfoPath to a fresh SharePoint farm and tried to upload it and it verified OK but give me a list of referenced assemblies that were missing. I added the missing assembly to GAC and the above error showed up again. So there is must be something special about the assembly – looked at the source code and found out that the public class used by InfoPath form code does not have namespace. Added the namespace and everything works fine now.</p>]]></content:encoded>
    </item>
    <item>
      <title>SSRS 2012 with SharePoint 2010</title>
      <link>https://docs.microsoft.com/archive/blogs/johnlee/ssrs-2012-with-sharepoint-2010</link>
      <pubDate>Mon, 30 Apr 2012 08:38:53 GMT</pubDate>
      <dc:creator><![CDATA[pursca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/johnlee/2012/04/30/ssrs-2012-with-sharepoint-2010/</guid>
      <description><![CDATA[SSRS 2008 R2 SharePoint mode has some limitations such as it could not delegate user’s credential...]]></description>
      <content:encoded><![CDATA[<p>SSRS 2008 R2 SharePoint mode has some limitations such as it could not delegate user’s credential using Windows Kerberos authentication if the web application is using claims based authentication and <a href="https://blogs.msdn.com/b/psssql/archive/2011/02/24/sharepoint-adventures-why-isn-t-claims-working-with-ssrs.aspx">Adam explained it why in his blog</a>. </p>  <p>Some documents indicated that SSRS 2012 will be claim aware and work with C2WTS to convert Windows claims to Windows token. I deployed it in my lab environment and it did work with kerberos authentication in both classic and claims based authentication web application. Here are the of steps of installing and configure SSRS 2012 service application. </p>  <ul>   <li>Install SSRS 2012 (Reporting Services – SharePoint and Reporting Services Add-in for SharePoint Products) from SQL 2012 CD on SharePoint App server </li>    <li>Create a SQL server </li>    <li>Optionally you can configure the Kerberos authentication as you would for Excel services      <ul>       <li>make sure C2WTS works (if your Excel service works with Kerberos then C2WTS is configured correctly) </li>        <li>make sure SSRS service account KCD is configured correctly </li>        <li>make sure SSRS service account has access to SharePoint web application content database(s)&#160; </li>     </ul>   </li>    <li>make sure the execution account has “allow logon locally” in local security policy</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/85/91/metablogapi/2402.image_6168E130.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-85-91-metablogapi/2402.image_5F00_6168E130.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/85/91/metablogapi/1768.image_thumb_16CE2B31.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-85-91-metablogapi/1768.image_5F00_thumb_5F00_16CE2B31.png" width="697" height="397" /></a></p>  <ul>   <li>Test SSRS 2012      <ul>       <li>Add 3 Content types to a document library </li>        <li>Create a reporting data source </li>        <li>Create a report using report builder </li>     </ul>   </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/85/91/metablogapi/1055.image_04F9B872.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-85-91-metablogapi/1055.image_5F00_04F9B872.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/85/91/metablogapi/6266.image_thumb_76BB3F81.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-85-91-metablogapi/6266.image_5F00_thumb_5F00_76BB3F81.png" width="388" height="287" /></a></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/85/91/metablogapi/0882.image_764F0C8C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-85-91-metablogapi/0882.image_5F00_764F0C8C.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/85/91/metablogapi/0572.image_thumb_03B51F93.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-85-91-metablogapi/0572.image_5F00_thumb_5F00_03B51F93.png" width="732" height="386" /></a></p>  <p>You might encounter the same issue if you test it on a claim based authentication web application as I went through the process and here is the scenario:</p>  <ul>   <li>Logon as LITWARE\Administrator      <ul>       <li>Created the claim based authentication web application </li>        <li>Create a team site collection, make LITWARE\administrator as site collection administrator </li>        <li>Added 3 SSRS content types to Shared Document library </li>        <li>Created a report data source and tested successful </li>        <li>Saved this report data source to document library </li>        <li>Open the just saved data source – I got the following error </li>     </ul>   </li> </ul>  <p>&#160;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/85/91/metablogapi/6254.clip_image002_710025DB.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-85-91-metablogapi/6254.clip_5F00_image002_5F00_710025DB.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_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/85/91/metablogapi/4617.clip_image002_thumb_5078E629.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-85-91-metablogapi/4617.clip_5F00_image002_5F00_thumb_5F00_5078E629.jpg" width="516" height="278" /></a></p>  <p>Since Litware\administrator is a domain admin, farm admin, site collection admin, how could it possible it cannot open a file just created and saved?</p>  <p>When my peer Jim (support engineer) asked me: <strong>If you create a data source with a regular user instead of the Administrator do you see the same error?</strong></p>  <p>At first I did not want to do it because my brain was occupied by who else has more power than my litware\administrator?! But as a courtesy and be able to reply his email, I went ahead to try the following steps:</p>  <p>1. Added litware\lit10 as site collection admin</p>  <p>2. Logon as lit10</p>  <p>3. Clicked on the data source created by administrator – I cannot believe myself, it opened without any problem !!!</p>  <p>4. Then I created a report builder report, and it worked beautifully</p>  <p>5. Then since I have Contoso and Litware forest trusted so I went ahead to give Contoso\administrator the site collection administrator access</p>  <p>6. Logon as Contoso\administrator, everything works fine</p>  <p>7. BUT logon as litware\administrator, it does not work!!!</p>  <p>OK, why then? What could trigger the code permission validation think Litware\administrator does not have permission?</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/85/91/metablogapi/0804.clip_image0026_1B002404.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-85-91-metablogapi/0804.clip_5F00_image0026_5F00_1B002404.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image002[6]" border="0" alt="clip_image002[6]" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/85/91/metablogapi/3124.clip_image0026_thumb_4162074F.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-85-91-metablogapi/3124.clip_5F00_image0026_5F00_thumb_5F00_4162074F.jpg" width="537" height="173" /></a></p>  <p>By looking into the UserInfo database, you can see that we have two entry for litware\administrator, one is normal claim based and another is classic based, but for Contoso\administrator and lit10, we have only one entry which is claim based. To test my theory, I’d like to remove the non claim based litware\administrator from the database to try it again, but I do not want to do it in a unsupported way – remove it from db directly J</p>  <p>Here is how I clean that out:</p>  <p>1. Logon as lit10</p>  <p>2. Remove litware\administrator from home owners group</p>  <p>3. Remove litware\administraror from site collection admin</p>  <p>4. Remove it from All People list but SharePoint 2010 removed the link to allow us to see all people, so we just need to get the url pattern from 2007 and pasted to 2010</p>  <p><strong><a href="https://team9.litware.local/_layouts/people.aspx?MembershipGroupId=0&amp;FilterField1=ContentType&amp;FilterValue1=Person">https://team9.litware.local/_layouts/people.aspx?MembershipGroupId=0&amp;FilterField1=ContentType&amp;FilterValue1=Person</a></strong><b></b></p>  <p>we see 3 administrators … the 2<sup>nd</sup> one is classic one and I removed it. Go to the database UserInfo table to verify it is marked as deleted.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/85/91/metablogapi/4505.clip_image0028_6EE32712.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-85-91-metablogapi/4505.clip_5F00_image0028_5F00_6EE32712.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image002[8]" border="0" alt="clip_image002[8]" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/85/91/metablogapi/6747.clip_image0028_thumb_550EF0E3.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-85-91-metablogapi/6747.clip_5F00_image0028_5F00_thumb_5F00_550EF0E3.jpg" width="498" height="393" /></a></p>  <p>Re-add litware\administrator to site collection admin group, logon as litware\administrator, woohoooo, worked!!!!!</p>]]></content:encoded>
    </item>
    <item>
      <title>SSRS Integrated Mode with SharePoint 2010</title>
      <link>https://docs.microsoft.com/archive/blogs/johnlee/ssrs-integrated-mode-with-sharepoint-2010</link>
      <pubDate>Thu, 19 Apr 2012 16:16:47 GMT</pubDate>
      <dc:creator><![CDATA[pursca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/johnlee/2012/04/19/ssrs-integrated-mode-with-sharepoint-2010/</guid>
      <description><![CDATA[Configuration Steps     Prepare the servers as SharePoint application servers and joined into the...]]></description>
      <content:encoded><![CDATA[<p>Configuration Steps</p>  <ul>   <li>Prepare the servers as SharePoint application servers and joined into the farm </li>    <li>Install SSRS 2008 R2 bits on the servers </li>    <li>Configure SSRS using configuration wizard      <ul>       <li>Create a database in integrated mode </li>        <li>Web Service URL – if Advanced button is not enabled, you need to apply the settings first and then you can change or add another DNS url later </li>        <li>Configure execution account </li>     </ul>   </li>    <li>If you use more than one server to run SSRS, you need to make the machine key be the same for all SSRS servers in web.config </li>    <li>If you use DNS name instead of machine name for reportserver url then you need to change &lt;UrlRoot /&gt; to the DNS name </li>    <li>If you use kerberos, then configure the following:      <ul>       <li>SETSPN for SSRS url such as <a href="https://ssrs.contoso.local">https://ssrs.contoso.local</a> on the SSRS service account, trust the service account for basic delegation </li>        <li>Change &lt;RSWindowsNTLM /&gt; to &lt;RSWindowsNegotiate /&gt; in rsReportServer.config </li>     </ul>   </li>    <li>Configure SSRS in SharePoint CA      <ul>       <li>Report Server Web Service URL </li>        <li>Add Report Server Instance – SSRS web and windows service accounts will be granted permission to SharePoint databases in this process          <ul><!--EndFragment--></ul>       </li>     </ul>   </li> </ul>  <p>Create Reports using Report Builder</p>  <ul>   <li>Create a document library </li>    <li>Add following content types to this document library      <ul>       <li>Report Data Source </li>        <li>Report Builder Model </li>        <li>Report Builder Report </li>     </ul>   </li>    <li>Use report builder to create reports      <ul>       <li>Create a Data Source </li>        <li>Create Builder Model </li>        <li>Create the Report </li>     </ul>   </li> </ul>  <p>Create Reports using Visual Studio</p>  <ul>   <li>Create a report using Visual Studio </li>    <li>Publish urls are different from native mode – check the reference below </li> </ul>  <p>References:</p>  <ul>   <li><a href="https://msdn.microsoft.com/en-us/library/bb326213.aspx">https://msdn.microsoft.com/en-us/library/bb326213.aspx</a> </li>    <li><a href="https://msdn.microsoft.com/en-us/library/bb326356.aspx">https://msdn.microsoft.com/en-us/library/bb326356.aspx</a> </li>    <li><a href="https://fendy-huang.blogspot.com/2011/02/create-ssrs-report-with-sharepoint-2010.html">https://fendy-huang.blogspot.com/2011/02/create-ssrs-report-with-sharepoint-2010.html</a></li>    <li><a title="https://blogs.msdn.com/b/psssql/archive/2011/02/24/sharepoint-adventures-why-isn-t-claims-working-with-ssrs.aspx" href="https://blogs.msdn.com/b/psssql/archive/2011/02/24/sharepoint-adventures-why-isn-t-claims-working-with-ssrs.aspx">https://blogs.msdn.com/b/psssql/archive/2011/02/24/sharepoint-adventures-why-isn-t-claims-working-with-ssrs.aspx</a></li>    <li>&#160;</li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>SharePoint 2010 Federated with SiteMinder STS</title>
      <link>https://docs.microsoft.com/archive/blogs/johnlee/sharepoint-2010-federated-with-siteminder-sts</link>
      <pubDate>Thu, 16 Dec 2010 16:14:10 GMT</pubDate>
      <dc:creator><![CDATA[pursca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/johnlee/2010/12/16/sharepoint-2010-federated-with-siteminder-sts/</guid>
      <description><![CDATA[There are lots of blogs that talks about how to setup SharePoint 2010 with ADFS v2. I had an...]]></description>
      <content:encoded><![CDATA[<p align="left">There are lots of blogs that talks about how to setup SharePoint 2010 with ADFS v2. I had an opportunity to be tasked to configure SharePoint 2010 to trust CA Site Minder STS. Here are some of my notes:</p>  <p align="left">1. At SiteMinder side, CA people configured a RP to send out two claims: email address and CommonName, it seems that the namespace from SiteMinder is defaulted to <a title="https://schemas.xmlsoap.org/claims" href="https://schemas.xmlsoap.org/claims">https://schemas.xmlsoap.org/claims</a> so our two claim are: <a title="https://schemas.xmlsoap.org/claims" href="https://schemas.xmlsoap.org/claims/CommonName">https://schemas.xmlsoap.org/claims/CommonName</a> and <a title="https://schemas.xmlsoap.org/claims" href="https://schemas.xmlsoap.org/claims/EmailAddress">https://schemas.xmlsoap.org/claims/EmailAddress</a></p>  <p align="left">2. At SharePoint side, we imported the Site Minder token signing certificates and added the chain of certificates to TrustedRootAuthority then run series of other scripts to setup the Trusted Identity Provider named “SiteMinder STS”. Here is a good link on how to <a href="https://blogs.technet.com/b/speschka/archive/2010/07/30/configuring-sharepoint-2010-and-adfs-v2-end-to-end.aspx">setup SharePoint 2010 with ADFS v2</a> and the steps are exactly the same on SharePoint side.</p>  <p align="left">We encountered a strange behavior after initial configuration:</p>  <ul>   <li>     <div align="left">user access the SharePoint site</div>   </li>    <li>     <div align="left">user is redirected to SiteMinder login page</div>   </li>    <li>     <div align="left">user is redirected back to SharePoint after authenticated by SiteMinder with FedAuth cookie</div>   </li>    <li>     <div align="left">user is redirected right back to SiteMinder again</div>   </li> </ul>  <p align="left">Spent some fair amount of time on it and my co-worker Tyler Durham <a href="https://blogs.technet.com/b/speschka/archive/2010/08/09/setting-the-login-token-expiration-correctly-for-sharepoint-2010-saml-claims-users.aspx">pointed me the right direction</a> and we found out the the Token lifetime of SiteMinder is 2 minutes so we adjusted the SiteMinder’s token lifetime to 1 hour and the problem went away.</p>  <p align="left">3. After this setup, user does not like that in peoplepicker, anything you typed in will be resolved so we went ahead to build a Custom Claim Provider for resolving the names by override the FillSearch and FillResolve. Here is the link how to <a href="https://blogs.technet.com/b/speschka/archive/2010/03/13/writing-a-custom-claims-provider-for-sharepoint-2010-part-1.aspx">build and register Custom Claim Provider</a>.</p>  <p align="left">4. Then user request to only allow normal user to search users that are already in the current site collection so we run the following command on the web application: stsadm –o setproperty –url <a href="https://mywebapplication">https://mywebapplication</a> –pn “peoplepicker-onlysearchwithinsitecollection” –pv yes</p>  <p align="left">after this, I found out that my FillSearch code is no longer works since SharePoint restrict the search only within the site collection.</p>  <p align="left">5. Then user want to have site collection admins to be able to resolve names against LDAP store and normal user only allow to resolve names from within the current site collection so I modified the FillResolve code to check if current user is Site admin or not then search the user from different store.</p>  <p align="left">6. Then user want to hide the SiteMinder STS hierarchy at left panel of peoplepicker search window so I run the following powershell command to make my custom claim provider the default claim provider of SiteMinder STS according to <a href="https://blogs.technet.com/b/speschka/archive/2010/04/28/how-to-override-the-default-name-resolution-and-claims-provider-in-sharepoint-2010.aspx">Steve’s blog</a>:</p>  <p><font color="#c0504d">$trusted = Get-SPTrustedIdentityTokenIssuer -Identity &quot;SiteMinder STS&quot;      <br />$trusted.ClaimProviderName = “internal name of your custom claim provider”       <br />$trusted.Update()</font></p>  <p align="left">7.&#160; Right after we made our custom claim provider the defaullt provider&#160; of the SiteMinder STS we found out that the resolved claim is not the claim what SiteMinder STS sends in so we followed another <a href="https://blogs.technet.com/b/speschka/archive/2010/05/25/replacing-the-out-of-box-name-resolution-in-sharepoint-2010-part-2.aspx">Steve’s blog</a> to made the following changes of the custom claim provider to get it work correctly:</p>  <ul>   <li>     <div align="left">Created a internal static string TrustedIdentityTokenIssuerName = “SiteMinder STS” – this must be the same name as the Trusted Identity Provider</div>   </li>    <li>     <div align="left">Instead of using the CreateClaim helper method and use the New SPClaim constructor</div>   </li> </ul>  <p align="left"><strong>Side Notes:</strong></p>  <p align="left"><font color="#ccb400">At this moment, user cannot participate workflow or subscribe the alert because the SPUser’s email address is empty. How do we populate the email for the user?</font></p>  <p align="left"><font color="#ccb400">One way of doing this is to develop a custom control to first check if current user’s email address (SPContext.Current.Web.CurrentUser.Email) is empty, if it is then get the email claim and then update the SPUser object and register it as delegate control available in the master page.</font></p>]]></content:encoded>
    </item>
    <item>
      <title>Do NOT Dispose SPContext.Current.Site.RootWeb</title>
      <link>https://docs.microsoft.com/archive/blogs/johnlee/do-not-dispose-spcontext-current-site-rootweb</link>
      <pubDate>Thu, 07 Oct 2010 17:16:40 GMT</pubDate>
      <dc:creator><![CDATA[pursca]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/johnlee/2010/10/07/do-not-dispose-spcontext-current-site-rootweb/</guid>
      <description><![CDATA[I encountered the following error in one of the visual webpart: Trying to use an SPWeb object that...]]></description>
      <content:encoded><![CDATA[<p>I encountered the following error in one of the visual webpart: Trying to use an SPWeb object that has been closed or disposed and is no longer valid. If user is given “Manage Web” at the root site then there is no error.</p>  <p>Did some research and found out the there is piece of code used by this web part has the following construct:</p>  <p>using (SPWeb web = SPContext.Current.Site.RootWeb)   <br />{    <br />&#160;&#160; ...    <br />}</p>  <p>The rule of thumbs is that do not dispose object you did not create. In the above construct, did we create the new instance of SPWeb? Let’s take a look at the RootWeb property in the SPSite class using Reflector:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/85/91/metablogapi/6683.image_5642DFE2.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-85-91-metablogapi/6683.image_5F00_5642DFE2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 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/85/91/metablogapi/3857.image_thumb_0A770929.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-85-91-metablogapi/3857.image_5F00_thumb_5F00_0A770929.png" width="361" height="209" /></a> </p>  <p>so if the m_rootWeb is already there no instance is created. </p>  <p>I fixed the code by changing it to using (SPWeb web = SPContext.Current.Site.OpenWeb()) { … } and the error goes away. BUT what is the explanation of site Admin user would not have the same problem?</p>  <p>… I will update here if I found the answer.</p>]]></content:encoded>
    </item>
  </channel>
</rss>