<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://bloggingabout.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tag 'SharePoint'</title><link>http://bloggingabout.net/search/SearchResults.aspx?a=1&amp;o=DateDescending&amp;tag=SharePoint&amp;orTags=0</link><description>Search results matching tag 'SharePoint'</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>SharePoint 2013 and Windows 8 apps - better together Part 1: Introduction, background and considerations</title><link>http://bloggingabout.net/blogs/bas/archive/2013/03/17/sharepoint-2013-and-windows-8-apps-better-together-part-1-introduction-background-and-considerations.aspx</link><pubDate>Sun, 17 Mar 2013 18:09:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:578381</guid><dc:creator>Bas</dc:creator><description>&lt;p&gt;&lt;span style="font-style:italic;"&gt;This is the first post as part of a blog series about
the integration of using SharePoint 2013 as a datasource for windows 8 apps.&lt;/span&gt;&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;Part 1:
     Introduction, Background and Considerations (this post)&lt;/span&gt;&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;Part 2:
     Platform choice, using the right API and data access&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;&lt;/span&gt;&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;Part 3:
     Search&lt;/span&gt;&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;Part 4:
     Authentication&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style="margin:0in;font-family:Calibri;font-size:11.0pt;" lang="nl"&gt;Introduction&lt;/h2&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11.0pt;" lang="nl"&gt;On 8 march
2013, my colleague Ad Reijngoudt (Windows 8 App developer, follow him on twitter: @Areijngoudt) and I
spoke on the dutch Techdays on the subject: &amp;quot;SharePoint 2013 and windows 8
app - better together&amp;quot;. After this session, we got a lot of questions on
several subjects, so I decided to write some blogposts on these subjects. &lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11.0pt;" lang="nl"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style="margin:0in;font-family:Calibri;font-size:11.0pt;" lang="nl"&gt;Background&lt;/h2&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11.0pt;" lang="nl"&gt;My colleague
Ad developed a fully functional windows 8 application
within 3 days during a workshop with Microsoft in The Netherlands. This
application is called &amp;quot;Vergoedingenzoeker&amp;quot; in Dutch (Is it called Compensation
finder in correct english?!) and offers functionality to find possible
compensations within your health insurance. The downside of this app, was
the fact that it contained a static datasource; whenever there is a change within
the consumed data, the app needs to be updated and that is, of course, not the most
ideal situation. That&amp;#39;s why we decided to find out if we could create a nice
backoffice for this application.&lt;/p&gt;
&lt;h2&gt;The &amp;quot;zorgvergoedingen&amp;quot; app&lt;/h2&gt;
&lt;p&gt;The
vergoedingenzoeker app basically exposes the following functionality:
On startup, a selection screen is displayed. Users can navigate to information in two ways&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select a
     compensation level. Based on the selected level (1-4 stars), an overview
     of all compensations within that level is displayed&lt;/li&gt;
&lt;li&gt;Select a character, and all
     compensations of which the title start with that same character are
     displayed&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/1616.app_5F00_overview_5F00_2.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/1616.app_5F00_overview_5F00_2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Whenever a choice has been made, all item titles that fall within the selection criteria, are displayed:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/2084.vergoedingen_5F00_overview.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/2084.vergoedingen_5F00_overview.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The last action is to select a subject. After a subject is selected, all details are displayed:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/4743.vergoedingen_5F00_detail.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/4743.vergoedingen_5F00_detail.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All this data is stored within SharePoint and within the upcoming blogposts, you&amp;#39;ll see how we did this.&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-weight:bold;"&gt;Considerations for using SharePoint 2013 as the backoffice&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;As we
discussed what kind of backoffice we should use, I suggested SharePoint 2013
immediately:&lt;span style="font-family:Calibri;font-size:11.0pt;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family:Calibri;font-size:11.0pt;"&gt;I love SharePoint! (I can&amp;#39;t
     say if that was the main reason or not? ;)&lt;/span&gt;&lt;span style="font-family:Calibri;font-size:11.0pt;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family:Calibri;font-size:11.0pt;"&gt;We already had existing data
     in our public site, so why not reuse that data? It prevents maintaining
     data on multiple platforms, which is always a good idea. (altough this was
     a MOSS 2007 site, we could make an extract of the data and host import
     that data into SharePoint 2013)&lt;/span&gt;&lt;span style="font-family:Calibri;font-size:11.0pt;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family:Calibri;font-size:11.0pt;"&gt;The new API&amp;#39;s of SharePoint
     2013 are very interesting (in my opionion), so this was a good situation
     to find out about possible limitations&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family:Calibri;font-size:11.0pt;"&gt;&lt;/span&gt;&lt;span style="font-family:Calibri;font-size:11.0pt;"&gt;SharePoint 2013 offers great
     out of the box functionality, which should easily be integrated with the
     windows 8 app. Think about Userprofiles, Search, mananged metadata. And
     all of these service apps are accessible via the new API&amp;#39;s&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because of the last three arguments, Ad agreed on using SharePoint 2013 (being an ASP.Net / windows 8 fanatic, he doesn&amp;#39;t admit that he loves SharePoint as well ;))&lt;/p&gt;
&lt;h2 style="margin:0in;font-family:Calibri;font-size:11.0pt;" lang="nl"&gt;Upcoming blogposts&lt;/h2&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11.0pt;" lang="nl"&gt;The upcoming
blogposts will cover the following subjects&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;&lt;/span&gt;&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style="margin-left:.375in;direction:ltr;unicode-bidi:embed;margin-top:0in;margin-bottom:0in;"&gt;
&lt;li&gt;&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;Using the
     right API and data access&lt;/span&gt; - How did we expose the data to the windows 8 app and what choices did we
have to make? What tooling did we use?&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="margin-top:0;margin-bottom:0;vertical-align:middle;" lang="nl"&gt;&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;Search&lt;/span&gt; - How did we implement search functionality in the app. We made some
really cool choices :D&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="margin-top:0;margin-bottom:0;vertical-align:middle;" lang="nl"&gt;&lt;span style="font-style:italic;font-family:Calibri;font-size:11.0pt;"&gt;Authentication&lt;/span&gt; - How to authenticatie to Office 365. There are already some blogposts on
the subject, but we improved it a bit and decided to share this with the
community.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Content by query webpart not performing due to misconfiguration</title><link>http://bloggingabout.net/blogs/bas/archive/2013/01/03/content-by-query-webpart-not-performing-due-to-misconfiguration.aspx</link><pubDate>Thu, 03 Jan 2013 20:27:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:578245</guid><dc:creator>Bas</dc:creator><description>&lt;p&gt;Today we were experiencing some major performance issues on some pages on a new website. The pages that were experiencing these performance issues, all made use of the content by query webpart (we didn&amp;#39;t have any performance issues before on these pages). The content by query webpart that we were using on the site, used a &lt;a href="http://blogs.msdn.com/b/ecm/archive/2010/05/14/what-s-new-with-the-content-query-web-part.aspx"&gt;pagefield value&lt;/a&gt;, which was used to lookup some related pages from another list.&lt;/p&gt;
&lt;h2&gt;The problem&lt;br /&gt;&lt;/h2&gt;
&lt;p&gt;A quick look at the developer dashboard learned me that something &amp;quot;bad&amp;quot; was happening over there:&lt;/p&gt;
&lt;p&gt;At first, critical database errors:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;fa42 A large block of literal text was sent to sql.&amp;nbsp; This can result in blocking in sql and excessive memory use on the front end.&amp;nbsp; Verify that no binary parameters are being passed as literals, and consider breaking up batches into smaller components.&amp;nbsp; If this request is for a SharePoint list or list item, you may be able to resolve this by reducing the number of fields.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;In addition to that, some very bad performing sql queries took place (which could be related to the critical database errors).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/7268.developerDashboard_5F00_CBQWP2.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/7268.developerDashboard_5F00_CBQWP2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;the queries that are marked in the screenshot above, included a query that created a table variable, and inserted data with &amp;quot;some&amp;quot; insert into select statements. #define some 489.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/4810.query.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/4810.query.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Basically, this meant that from 489 different sources, data was inserted into the table variable. This table was queried on its turn, to get the data out if it, that we needed. As described in the small introduction, we just needed to lookup data from one single list! Altogether, it turned into loading times of 10-20 seconds.Due to all the inserts, I suspected that not the specific pages list was queried, but whole the site collection. With 500 Mb of data this can be quite time consuming ;).&lt;/p&gt;
&lt;p&gt;A quick glance at the webpart properties learned me that I was right: the whole site was queried, where a much smaller scope was needed (the scope of a single list). Selecting the pages list as the datasource resulted in a much better, acceptable performance: a steady loading time of about 1s.In addition to the performance gain: the database errors got away, too ;).&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Altough the content by query webpart is a very good and &lt;a href="http://blog.mastykarz.nl/content-query-web-part-vs-custom-aggregation-web-part/"&gt;fast mechanism&lt;/a&gt; to gather data, it can be misconfigured in many ways, which causes performance issues. In my case, it even caused database locks, which prevented the whole site from performing at all. When configuring the content by query webpart, always make sure to use a datasource that has the smallest scope possible.&lt;/p&gt;</description></item><item><title>SharePoint 2010 signout different behaviours based on the number of selected Authentication Types</title><link>http://bloggingabout.net/blogs/bas/archive/2012/12/29/sharepoint-2010-signout-different-behaviours-based-on-the-number-of-selected-authentication-types.aspx</link><pubDate>Sat, 29 Dec 2012 11:56:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:578237</guid><dc:creator>Bas</dc:creator><description>&lt;p&gt;While working on our &lt;a title="Custom ADFS login for SharePoint 2010" href="http://bloggingabout.net/blogs/bas/archive/2012/12/28/customizing-adfs-login-for-sharepoint-2010-how-we-did-it.aspx"&gt;custom ADFS login&lt;/a&gt; component and deployed this version to our DTAP street, we saw different behaviours when signing out of a site, under different circumstances. Wen users tried to logout via the page &amp;quot;/_layouts/signout.aspx&amp;quot; users sometimes where redirected back to the root of the site and in some cases users got the message &amp;quot;please close the browser to signout&amp;quot;. As I was curious why this happened, I decided to check a few things out.&lt;/p&gt;
&lt;h2&gt;In wat cases does what behaviour occur?&lt;br /&gt;&lt;/h2&gt;
&lt;p&gt;After comparing our webapplication settings, we found out that the only difference that we had, was that on our Acceptance environment we had just a single Trusted Identity Provider selected, while on our Test environment we had both windows authentication and a Trusted Identity Provider selected. As this was a nice start, we decided to disable/enable a few identity providers and enable/disable windows authentication. As we couldn&amp;#39;t find a real pattern, I decided to fire up reflector and started to do some real digging ;).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/4403.signout-code.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/4403.signout-code.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As seen in the red section, a few decisions are made. First: ClaimsBasedAuthentication needs to be set. This is always in our case, so that one was easy. The code that is executed afterwards, is more interesting: A decision is made, based on the number of authentication providers &lt;b&gt;&lt;i&gt;OR &lt;/i&gt;&lt;/b&gt;WindowsIntegratedAuthentication is not turned on. It&amp;#39;s easier to see what happens when a table is used. At the bottom of the table the actual action is included: &lt;b&gt;S&lt;/b&gt;tay or &lt;b&gt;R&lt;/b&gt;edirect&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;windows authentication&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integrated&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trusted Identity Provider 1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trusted Identity Provider 2&lt;br /&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;num&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;use windows integrated&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;num!=1 or !windows integrated&lt;br /&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;expected action&lt;br /&gt;&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td style="color:Red;"&gt;S&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;actual action: S(tay)/R(edirect)&lt;br /&gt;&lt;/td&gt;
&lt;td style="color:Red;"&gt;S&lt;/td&gt;
&lt;td style="color:Red;"&gt;S&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td style="color:Red;"&gt;S&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
This table learns us the following: based on the selected options, we are expecting different behaviour then the actual behaviour: In cases where windows authentication is disabled (and thus, no windows integrated authentication) AND there is just 1 identity provider selected, a redirect to the rootweb of our sitecollection is expected, but this is not the case: users stay on the same page and get forced to close the browser to logout, altough this isn&amp;#39;t needed. Manual navigation to the website learns us that the user has been logged out. &lt;/p&gt;
&lt;h2&gt;Why no redirection?&lt;br /&gt;&lt;/h2&gt;
&lt;p&gt;to find out why this didn&amp;#39;t happen, I wrote a small bit of code to checkout the value of iisSettings.UseWindowsIntegratedAuthentication when windows authentication is &lt;i&gt;disabled: &lt;/i&gt;This value seems always to be true when windows authentication has been disabled! When filling out these values in the table, the behaviour can be explained:&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;windows authentication&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integrated&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trusted Identity Provider 1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trusted Identity Provider 2&lt;br /&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;num&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;use windows integrated&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;num!=1 or !windows integrated&lt;br /&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;expected action&lt;br /&gt;&lt;/td&gt;
&lt;td&gt;S&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;actual action: S(tay)/R(edirect)&lt;br /&gt;&lt;/td&gt;
&lt;td style="color:red;"&gt;S&lt;/td&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Signing out within SharePoint 2010 or SharePoint 2013 leads to unexpected/unexplainable behaviour, because it&amp;#39;s unclear when users are redirected to the rootWeb of the sitecollection, of are forced to close their windows. This behaviour has to do with the fact that, the value of &amp;quot;IisSettings.UseWindowsIntegratedAuthentication&amp;quot; is set to true when Authentication type &amp;quot;windows authentication&amp;quot; is set to false.I have a gut feeling that this value must explicitly set to false, whenever there is no windows authentication. The combination of multiple identity providers vs a single authentication provider leads to the difference in redirecting the user to the rootweb vs forcing the user to close the browser. I do believe that this is a bug and this will be submitted to Microsoft in the upcoming year (2013).&lt;/p&gt;</description></item><item><title>Customizing ADFS login for SharePoint 2010: how we did it</title><link>http://bloggingabout.net/blogs/bas/archive/2012/12/28/customizing-adfs-login-for-sharepoint-2010-how-we-did-it.aspx</link><pubDate>Fri, 28 Dec 2012 17:33:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:578236</guid><dc:creator>Bas</dc:creator><description>&lt;p&gt;In SharePoint 2010 the possibility of claims based authentication was introduced. The out of the box experience of this functionality is often OK, for example in cases of corporate intranets and extranets, but it doesn&amp;rsquo;t always fulfill the requirements of internet facing websites which require authentication.&amp;nbsp; This blogposts describes why we wanted to implement the active login scenario and learns us what kind of problems we encountered (and nailed ;))&lt;/p&gt;
&lt;h2&gt;Login requirements&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;At our company we own a lot of different (insurance) labels and a big part of those labels want users to be able to login via a username&amp;nbsp; (for example their email-address) and password. When a user logs in with his username (e.g. user@outlook.com) on site of label A, he must be able to login with that same email address to site of label B. These accounts attached to the sites may not be the same physical account.&lt;/li&gt;
&lt;li&gt;When a user logs in, he may never get redirected to another domain.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Login in when filling out a form, to retrieve his contact details that are already attached to his account, without losing context&lt;/li&gt;
&lt;li&gt;Custom styling for the login control to be in line with the labels&amp;rsquo; look and feel.&lt;/li&gt;
&lt;li&gt;Being able to only supply ADFS login to endusers, but supply ntlm based authentication too, for the search service application. This is needed because our sites are hosted within Host named site collections (HNSC), multiple zones aren&amp;rsquo;t possible in here.&lt;/li&gt;
&lt;li&gt;Because we are using HNSC, and don&amp;rsquo;t use any form of content deployment, we need to be able to offer authentication for our employees too, to be able to edit content. They may only be able to login from within the corporate network, otherwise, only a customer login must be offered.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Non functional&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;We want to make use of one single infra-structure for cost-reduction purposes. With tons of sites (and thus url&amp;rsquo;s), it isn&amp;rsquo;t very costs-effective to build a separate environment for every site.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Passive login&lt;/h2&gt;
&lt;p&gt;The out of the box experience that comes with SharePoint 2010 is the so called &amp;ldquo;passive requestor profile&amp;rdquo; or &amp;ldquo;passive login&amp;rdquo; and works as displayed in the flow below. &lt;i&gt;Please note that users are being redirected to a Resource STS. SharePoint thinks it&amp;rsquo;s an Identity Provider, but in our infrastructure, this is not the case. Why, is explained further on.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/1184.passive-login-flow.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/1184.passive-login-flow.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As seen in the diagram, whenever a user needs to login to a SharePoint site, the user is redirected up to 7(!!) times before he gets his page served. As this may be acceptable behavior when accessing a page to check out his customer information, this is not acceptable whenever a customer is in the 3rd step of a&amp;nbsp; flow when he wants to purchase an insurance. In addition to this: the OOTB functionality isn&amp;rsquo;t able to hide login options based on your source (in- or outside the corporate network)&lt;/p&gt;
&lt;h2&gt;Claims based authentication infra-architecture for internet sites&lt;/h2&gt;
&lt;p&gt;To be cost effective, we have a single Resource STS for claims augmentation and a single IP-STS for the identity claims. . At the SharePoint STS we don&amp;rsquo;t make use of any claims augmentation of transformation, because this can lead to problems in a multi farm (publishing/consuming) setup.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/6443.cba_2D00_setup.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/6443.cba_2D00_setup.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As seen in the diagram, the trusted Identity Provider for the SharePoint STS, is in fact, a resource STS. The real identity providers are federated with this resource-STS. This opens up the possibility to use different identity providers and handle resource claims augmentation on a single place. &lt;br /&gt;The problem with this setup, is that the federated STS-ses are accessible via only url. This is contrary to the requirement REQ2: a user may never leave the domain when logging in.&lt;/p&gt;
&lt;h2&gt;Our solution&lt;/h2&gt;
&lt;p&gt;Our solution for this problem, is to create a custom ADFS login control that can be re-used on pages and/or webparts. This is called &amp;ldquo;Active requestor profile&amp;rdquo; or &amp;ldquo;Active Login&amp;rdquo;.&amp;nbsp; In fact, the solution exists out of two parts&lt;br /&gt;1)&amp;nbsp;&amp;nbsp;&amp;nbsp; Determine user login source and type&lt;br /&gt;2)&amp;nbsp;&amp;nbsp;&amp;nbsp; The login itself&lt;/p&gt;
&lt;h3&gt;Determine user login source and type&lt;/h3&gt;
&lt;p&gt;Below is a small flow diagram to determine whether a user is a customer or an employee:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/2110.determineusertype.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/2110.determineusertype.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Determine origin&amp;rdquo; is executed without any user interaction. Whenever a user tries to login, we need to determine their origin. This can be done in various manners, but we decided to make use of the&lt;a title="X Forwarded For" href="http://en.wikipedia.org/wiki/X-Forwarded-For"&gt; X-Forwarded-For header&lt;/a&gt;. It&amp;rsquo;s a HTTP-request header, that is inserted from our load balancer. External users get the address of the reverse proxy injected, internal users their own IP address. According to Wikipedia (and everything that&amp;rsquo;s on Wikipedia, is true ;)), it is the de facto standard for identifying the originating IP-address. Whenever the IP in the XFF HTTP header is not equal to the IP of the reverse proxy, a user selection type screen is show. Otherwise, only the customer login screen will be shown.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/0815.usertype-selection.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/0815.usertype-selection.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Active Login&lt;/h3&gt;
&lt;p&gt;As seen in the diagram below, this authentication method is much more user friendly, as there are just two redirections: the one to the login page that hosts the user login control and one redirection, back to the source URL, when the user has been authenticated. Please note that no difference between customers and employees has been made here, as the login logic is almost the same. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/0172.active-login.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/0172.active-login.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The downside of this approach is that it requires custom code and needs to handle all the logic that ADFS was handling in the passive scenario:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get identity claims
&lt;ul&gt;
&lt;li&gt;Multiple identity providers &amp;ndash; choose which IP to use (for example, based on selected userType)
&lt;ul&gt;
&lt;li&gt;Customers&lt;/li&gt;
&lt;li&gt;Employees&lt;/li&gt;
&lt;li&gt;Government&lt;/li&gt;
&lt;li&gt;Etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Augment resource claims&lt;/li&gt;
&lt;li&gt;Pass Token to SharePoint&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Liam Cleary has done excellent research on this subject and wrote some code for it. I suggest that you read his &lt;a title="custom ADFS login" href="http://blog.helloitsliam.com/Lists/Posts/Post.aspx?ID=76"&gt;blogpost&lt;/a&gt;. The code is not production ready, but provides a great base to start out on your own active login user control.&lt;/p&gt;
&lt;h4&gt;Login control&lt;/h4&gt;
&lt;p&gt;Where liam&amp;rsquo;s code sample provided an application page with an asp.net login control we decided to create a custom login control, which subclassed System.Web.UI.WebControls.Login. We had a few reasons to subclass this control. One of those reasons is the fact that this Login control is used for forms based authentication. See the highlighted sections in the following, reflected, codesnippet:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/0841.attemptlogin.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/0841.attemptlogin.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Formsbased authentication&lt;/h4&gt;
&lt;p&gt;As seen in the first highlighted section, this login control places a Forms Authentication cookie, which caused problems when trying to logout. After logging out, the cookie wasn&amp;rsquo;t deleted, which caused an error. Users had to close the browser and open it again to be able to login again.&lt;/p&gt;
&lt;h4&gt;Templating &lt;/h4&gt;
&lt;p&gt;Another reason was more practical. In the existing asp.net login control, templating is already implemented. By subclassing this control, a custom look and feel can easily be implemented, as the templated controls are inherited. The control can even be reused on any sitepage/masterpage/pagelayout: no application page is needed anymore. This makes it possible to give each label its own markup and messages:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/2068.login.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/2068.login.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Subclassed ADFSLogin control&lt;/h4&gt;
&lt;p&gt;The subclassed ADFSLogin control is not too complex: the default OnBubbleEvent logic has been overridden, just to be able to implement custom AttemptLogin logic (this can&amp;rsquo;t be overridden as it is a private function. I didn&amp;rsquo;t want to use any form of reflection ;)). The AttemptLogin logic doesn&amp;rsquo;t contain much custom logic: it only got rid of the two highlighted sections.&lt;/p&gt;
&lt;h4&gt;Issues&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Redirecting after SPFederationAuthenticationModule.SetPrincipalAndWriteSessionToken will throw a ThreadAbortedException. When caught, the redirect will still occur and the login behavior is as intended.&lt;/li&gt;
&lt;li&gt;applying changes to the web.config isn&amp;#39;t as trivial as expected. overwriting sections with SPWebConfigModifications won&amp;#39;t work; another approach is needed for this. (MOre on this in a later blogpost)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This article described what exactly passive and active login is and learned us why we chose for the active login scenario and what challenges we have met. As the standard login methodology doesnt satisfy the business requirements, another solution has been created. this solution has the following advantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a custom adfs login control minimizes redirect traffic to a minimum&lt;/li&gt;
&lt;li&gt;own authentication logic can be implemented&lt;/li&gt;
&lt;li&gt;a custom adfs control provided ultimate flexibility to the business. If build properly, new IP- or Resource-STS&amp;#39;ses can be added on the fly.&lt;/li&gt;
&lt;li&gt;the control is ultimately stylable using, for example SharePoint designer.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>WSP Deployment scopes and the development lifecycle in large environments</title><link>http://bloggingabout.net/blogs/bas/archive/2012/07/21/wsp-deployment-scopes-and-the-development-lifecycle-in-large-environments.aspx</link><pubDate>Sat, 21 Jul 2012 16:13:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:577936</guid><dc:creator>Bas</dc:creator><description>&lt;p&gt;At our company, we use sharepoint to host all of our websites. As SharePoint is quite scalable, this is of course no problem and the production farm can handle it easily. These websites need to be developed and be tested, before&lt;span style="font-style:italic;"&gt; &lt;/span&gt;they can be deployed to the production farm. This process is nothing special and doesn&amp;#39;t diverge from most popular software development methodologies. &lt;/p&gt;
&lt;h2 style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;Development Lifecycle&lt;/h2&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;As stated before: Our development process is not something special: we develop, test it, the customer accepts the product and finally we take the product into production.&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/8168.Deployment1.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/8168.Deployment1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;Most of the developers that I know, develop their products on their own systems and they test it locally before the product is pushed to the development farm. At those companies, there is just one project (2 at most) which makes use of the development farm. The developers are free to deploy whatever and whenever they want, because they don&amp;#39;t have to take other projects into account.&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;But our situation is quite different.We host a large amount of portals and websites (that number is still growing) and part of those existing portals are&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;continously upgraded. As opposed to the situation above (with a single project working at a farm), we do have 10+ projects working simulteaniously at a single farm.&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;Deployment cycle&lt;/h2&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;When just developing websites in ASP.Net, this isn&amp;#39;t much of a problem, as all sites can easily be copied to it&amp;#39;s location. As we all know, the deployment scenario in SharePoint, is different. Developers create WSP&amp;#39;s, and those WSPs are deployed to the farm. In our case, code is checked into TFS, TFS builds the WSP&amp;#39;s and some tooling, ROSS, gets triggered and deploys the generated WSP&amp;#39;s to the development farm. That same tool deploys the solutions to Test, Acceptance and Production environments. This tool has been configured in such a way, that a solution only can be deployed&amp;nbsp;to the production farm&lt;em&gt;, &lt;/em&gt;when it has passed the Development, Test and Acceptance stages.&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/1070.Deployment2.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/1070.Deployment2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;This automated deployment is very useful, but causes some problems for us. Due to the fact that we have multiple projects at the same central development farm, which makes it easy for developers&amp;nbsp;to deploy solution pacakges, this causes &lt;span style="font-style:italic;"&gt;a lot&lt;/span&gt; of retractions and deployments of WSP&amp;#39;s. Every single WSP retraction and addition, causes the IIS application pools to recycle. This can (sometimes) take quite some time, can be frustating, and is, sadly enough, inherent to SharePoint Development. These deployments can cause &lt;span style="font-style:italic;"&gt;other &lt;/span&gt;projects to recycle too. This is mainly due to the scope of the WSP&amp;#39;s being deployed: when a WSP is deployed with a global scope, or is retracted, this affects ALL webapplications on the farm. Every single application gets a &amp;quot;free&amp;quot; application pool recycle. With two projects, this doesn&amp;#39;t have to cause much problems: even when no deployment planning is made, those projects don&amp;#39;t have to suffer much from each other. &lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/5127.deploymenttimeframe1.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/5127.deploymenttimeframe1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;But when more projects come in, things get worse, as seen in the diagram below. The availability of all web applications gets lower, which results into less testing time per app, and each deployment of a WSP blocks &lt;span style="font-style:italic;"&gt;all other projects&lt;/span&gt; from deploying/testing. It&amp;#39;s not only annoying, it also cost&amp;#39;s a lot of serious money. The next diagram is just an indication with 2 deployments per project a day and assumes that a deployment on a farm with 1 webapplication takes as long as a deployment to a farm with 10+ webapplications. In my experience this is not the case at all: the more applications that co-exist on a farm, the more time a (global) solution deployment takes. &lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/1205.deploymenttimeframe2.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/1205.deploymenttimeframe2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;A solution for this problem is easy: split de big central Develoment farm into several small ones, as shown in the picture below:&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/8561.Deployment3.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/8561.Deployment3.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;This is a situation that, in my opinion,&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;has a lot advantages (aside from the availability options), and fits into the cloud strategy of microsft (hosted development images), but doesn&amp;#39;t solve all problems.&amp;nbsp;Where the problems will disappear for developers, the problems will stay the same for the Test, Acceptance and Production environments. Not as much as at the development stage, but the deployments are still blocking other projects. The Test environment is heavily used by our testers and needs a lot of uptime, too. &lt;span style="font-family:Calibri;"&gt;When&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;looking&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;from&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;a&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;business&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;perspective&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt;: &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;it&amp;#39;s&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;not&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;acceptable&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;that&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;a&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;commercial&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;site&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt;, &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;which&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;sells&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;products&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt;, &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;has&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;downtime&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;because&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;an&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-style:italic;font-family:Calibri;"&gt;other&lt;/span&gt;&lt;span style="font-style:italic;font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;site&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;is&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; being &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;deployed&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;to&lt;/span&gt;&lt;span style="font-family:&amp;#39;Cambria Math&amp;#39;;"&gt; &lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;production.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;The Solution&lt;/h2&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;The solution to get rid of the blocking deployments, but keep the flexibility of deploying &amp;quot;any time&amp;quot;, needs a small hack. The deployment scope of the solution needs to be changed from &amp;quot;Global&amp;quot; to &amp;quot;WebApplication&amp;quot;. This is not a setting in the package property window, but is determined &amp;quot;deploy time&amp;quot;. In short: whenever there is an artefact or configuration option that needs to be deployed at the webapplication scope, the solution scope is &amp;quot;webapplication&amp;quot;. In all other situations, the WSP will be globally deployed. The easiest way to do this, is to manually add a dummy safecontrol to the manifest.xml.&amp;nbsp; &lt;em&gt;Note: this doesn&amp;#39;t work in all cases. There are a few situations where a solution only can globally be deployed to a farm. Try to bundle these functionalities into a single package, to keep downtime as low as possible.&lt;/em&gt;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/2604.deploymenttimeframe3.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/2604.deploymenttimeframe3.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;As seen in the picture above, in the most ideal situation, projects don&amp;#39;t block each other from testing. The only influence that projects have on each other, is the fact that wsp&amp;#39;s can&amp;#39;t be deployed simultaneously.&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;Conclusion&lt;/h2&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;SharePoint solution deployments can be quite time consuming, and when not properly planned and configured, it can even block other projects when working simultaneously on a farm. The more projects that are using the farm, the more projects that can suffer from each other. A simple solution for this, is to force the solutions to be deployed at webapplication scope. This can be achieved by manually adding a safecontrol to the project.&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0in;font-family:Calibri;font-size:11pt;"&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>GeoSearch with Fast Search for SharePoint 2010 - Part 3: how to use the latitude and longitude in your queries</title><link>http://bloggingabout.net/blogs/bas/archive/2012/04/10/geosearch-with-fast-search-for-sharepoint-2010-part-3-how-to-use-the-latitude-and-longitude-in-your-queries.aspx</link><pubDate>Tue, 10 Apr 2012 19:21:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:577470</guid><dc:creator>Bas</dc:creator><description>&lt;p&gt;This is the&amp;nbsp;third and last&amp;nbsp;part of a series of blogposts about GeoSearch with Fast Search for SharePoint. I recently held some presentations about extending the power of Fast (on &lt;a href="http://www.diwug.nl/" title="Dutch Information Worker User Group"&gt;&lt;span style="color:#3399ff;"&gt;DIWUG&lt;/span&gt;&lt;/a&gt;&amp;nbsp;and the Dutch &lt;a href="http://www.techdays.nl/" title="Dutch Techdays 2012"&gt;&lt;span style="color:#3399ff;"&gt;TechDays 2012&lt;/span&gt;&lt;/a&gt;) and one of the subjects that I talked about was on how to search for locations, sort on distances etcetera. The recording of my sessions are available on &lt;a href="http://channel9.msdn.com/Events/Speakers/bas+lijten" title="Bas Lijten on Channel 9"&gt;&lt;span style="color:#3399ff;"&gt;Channel 9&lt;/span&gt;&lt;/a&gt;&amp;nbsp;in dutch.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/blogs/bas/archive/2012/02/24/geosearch-with-fast-search-for-sharepoint-2010-part-1.aspx" title="GeoSearch with Fast Search for SharePoint"&gt;&lt;span style="color:#3399ff;"&gt;Part 1: why and how&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/blogs/bas/archive/2012/02/24/geosearch-with-fast-search-for-sharepoint-2010-custom-pipeline-extensions.aspx"&gt;Part 2: the custom pipeline extension to enrich the Fast index with spatial data&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Part 3: how to use this metadata in your search queries (this post)&lt;/p&gt;
&lt;p&gt;Please make sure that&amp;nbsp;this code (and the code that is included) is not &amp;quot;production ready&amp;quot; at all, doesn&amp;#39;t implement the &lt;a href="http://en.wikipedia.org/wiki/Geographic_coordinate_system"&gt;geographic coordinate system&lt;/a&gt; correctly, as it has a range of [-180,180][-90,90] and that&amp;nbsp;the computations don&amp;#39;t take care of the fact that we live on a globe either. &lt;/p&gt;
&lt;h2&gt;Creating the queries&lt;/h2&gt;
&lt;p&gt;After implementing&amp;nbsp;the custom pipeline extension and all the data has been re-indexed, the index&amp;nbsp;isenriched with the latitude and longitude information. This information can be used&amp;nbsp;for some interesting queries and some interesting sorting algorithms. When working with spatial data, there are some different approaches that can be used to retrieve the nearest locations and sort them. There is however one caveat to take care of, when a custom sorting formula is used. For this blogpost, I query directly against the Fast query service application using the code below. I also return a set of 3 managed properties: title, latitude and longitude.&lt;/p&gt;
&lt;p&gt;The code gets the proxy that will be used, and instantiates a new keywordQuery object. On this object, I explicitly enable FQL, select my resultsprovider and I set the rowlimit to 20, as this set contains enough results to be displayed&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/6378.searchservice_5F00_code_5F00_snippet.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/6378.searchservice_5F00_code_5F00_snippet.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Retrieve all results and sort them by distance to a certain point&lt;/h3&gt;
&lt;p&gt;This query is easy to execute, as the query &amp;quot;#&amp;quot; will retrieve all items. but when the managed properties are used in a sorting formula, things change. As the managed properties are of type decimal, these properties are handled differently, as described in &lt;a href="http://bloggingabout.net/blogs/bas/archive/2011/11/05/fast-search-for-sharepoint-caveat-apply-a-sortformula-with-managed-properties-of-type-decimals.aspx"&gt;this blogpost&lt;/a&gt;. For the sort formula, different algorithms can be used. Two populair sorting algorithms are the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Euclidean_distance"&gt;Euclidean distance&lt;/a&gt;: the shortest, unique distance between two points.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Taxicab_geometry"&gt;Taxicab distance&lt;/a&gt;: the distance between two points is the absolute difference of their coordinates. The path between the two points doesn&amp;#39;t have to be unique.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;the next image shows the difference between the two different algorithms. The green line represents the euclidean algorithm and is&amp;nbsp;the&amp;nbsp;unique, shortest path between two points. The red, blue and yellow paths represent variations on the taxicab geometry and are indeed, not unique. The image comes from wikipedia, btw.&lt;/p&gt;
&lt;p&gt;&lt;img height="283" width="283" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/08/Manhattan_distance.svg/283px-Manhattan_distance.svg.png" alt="File:Manhattan distance.svg" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;For this blogpost, I use the taxicab algorithm, as it is, by far, the most easy to implement ;). Basically, this algorithm is as follows:&lt;/p&gt;
&lt;p&gt;distance = abs(queriedLocation.latitude - result.latitude) + abs(queriedLocation.longitude-result.longitude). In code, I implemented this with the following snippet:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/7536.sortformula.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/7536.sortformula.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;this snippet creates the string that is used as sortformula. {0} and {1} are replaced by the latitude and longitude of the location that I need to find the nearest results for. The latitude and longitude in the formula, are the names of the managed properties that are retrieved from the index. For every result that is returned from the query, this formula is executed, and the resultset will be ordered based on the outcome of this formula. This sortformula needs to be added to the Sortlist, and the last step that is needed, is to execute the query. This is shown in the following snippet.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/7573.sortformula_5F00_finished.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/7573.sortformula_5F00_finished.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When using this technique of getting a resultset and sort using a sortformula, the rank that is returned is zero. Relevance models can&amp;#39;t be used to sort within this resultset,&amp;nbsp;and,&amp;nbsp;for example, operators like xrank can&amp;#39;t be used either.&lt;/p&gt;
&lt;h3&gt;Get all results within a certain area&lt;/h3&gt;
&lt;p&gt;Another method of getting results, which gives a bit more flexibility, is to retrieve all results within a certain area:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/7288.Area-search.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/7288.Area-search.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;the cool thing about using this technique, is that a sorfformula to get all the nearest results, isn&amp;#39;t needed, because that is already managed that in the query itself. Within the returned resultset, relevance models can be applied to rank results based on other properties!&lt;/p&gt;
&lt;p&gt;a formula like this looks like the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;set the latitude and longitude offsets&lt;/li&gt;
&lt;li&gt;compute the borders of the bounding box&lt;/li&gt;
&lt;li&gt;create the query: return all results with the latitude and the longitude in the respective ranges&lt;/li&gt;
&lt;li&gt;execute the query&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/6813.boundingbox_5F00_normal.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/6813.boundingbox_5F00_normal.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;the fun starts when&amp;nbsp;a xrank operator is thrown in:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/8867.boundingbox_5F00_xrank.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/8867.boundingbox_5F00_xrank.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;the possibilities are almost limitless, when this technique is used! Queries like &amp;quot;return all restaurants in the neighbourhoud, but push all restaurants that pay for advertisements to the top&amp;quot;. other possibilities are executing queries to retrieve items within an area, and rank them based on the keywords in the query. Think about using the Entity extractor &amp;quot;Location&amp;quot; that extracts all locations from a document, get all spatial data for that document, and execute a query like &amp;quot;give me all documents on burglaries near my current location&amp;quot;.&lt;/p&gt;
&lt;p&gt;the query has to be passed to the keywordquery object and thereafter be executed, just like in the other example.&lt;/p&gt;
&lt;h4&gt;Even more coolness!!&lt;/h4&gt;
&lt;p&gt;When all the results are returned, we can show the results in a boring list. But there is another option. Because we do have all latitude and longitude information, it&amp;#39;s easy to plot them on a map. On a BING-map :D. Documentation on the API can be found here: &lt;a href="http://www.microsoft.com/maps/developers/web.aspx"&gt;http://www.microsoft.com/maps/developers/web.aspx&lt;/a&gt;. An example can be found as well in the code that is attached to this post.&lt;/p&gt;
&lt;p&gt;Basically, all you have to do is the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set the Bing-credentials and the applicationID (a free key that is available via the &lt;a href="http://www.microsoft.com/maps/developers/web.aspx"&gt;bing maps developer center&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;set the center of the map&lt;/li&gt;
&lt;li&gt;for each result to plot, add a pushpin&lt;/li&gt;
&lt;li&gt;set the image size&lt;/li&gt;
&lt;li&gt;get the map uri from the imageryservice&lt;/li&gt;
&lt;li&gt;include the image in your webpart&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I dont explain much of the code, because it isn&amp;#39;t to hard and self-explanatory&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/0160.CreateMap.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/0160.CreateMap.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;this results in ultimately in the following webpart. Imagine what can be done. Add some nice javascripts to the pins to plot a route to the target or&amp;nbsp;give extra information.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/3750.bingmaps.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/3750.bingmaps.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;summary&lt;/h2&gt;
&lt;p&gt;we saw in this blogpost that there are several techniques to query for and sort on geo-locations. using these techniques in combination with some existing services, for example BING-Maps, can result in some really cool webparts. Code will be posted soon!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Upgrading Masterpage and UIVersion from SharePoint 2007 to SharePoint 2010 without v4.master</title><link>http://bloggingabout.net/blogs/bas/archive/2012/03/20/upgrading-masterpage-and-uiversion-from-sharepoint-2007-to-sharepoint-2010-without-v4-master.aspx</link><pubDate>Tue, 20 Mar 2012 20:21:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:577384</guid><dc:creator>Bas</dc:creator><description>&lt;p&gt;When upgrading from SharePoint 2007 to SharePoint 2010, several scenarios are possible. When using&lt;a href="http://technet.microsoft.com/en-us/library/cc263299.aspx" title="database attach method"&gt; the database attach method&lt;/a&gt;, it&amp;#39;s possible to stay in &amp;quot;V3&amp;quot; mode, or execute a visual upgrade too and make use of all SharePoint 2010 love. Whenever custom masterpages have been created for SharePoint 2007, the visual upgrade itself isn&amp;#39;t too much of an option: it upgrades the UIVersion of the current web to V4, but the custom masterpage is replaced by the default v4.master, which (of course) doesn&amp;#39;t provide any customizations. the next step is to create a new customized masterpage for SharePoint 2010, add it to your site and make sure to set this masterpage as the new default/custom masterpage.&lt;/p&gt;
&lt;p&gt;The scenario I wanted to achieve, was the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Deploy my custom solutions with all masterpages already upgraded to SP2010, so only the UIVersion should be upgraded&lt;/li&gt;
&lt;li&gt;Attach the content database&lt;/li&gt;
&lt;li&gt;Upgrade the site to v4 mode, without the need of a v4.master deployment&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;The problems of (visual) upgrading to SharePoint 2010&lt;/h2&gt;
&lt;p&gt;The problems of visual upgrading consist of several issues: it doesn&amp;#39;t work right out of the box (but that is expected), and some steps are needed to deploy and undeploy a masterpage, before the real SP2010 masterpage can be set, because the v4.master seems to be &lt;em&gt;&lt;strong&gt;required&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;1 - Upgrade the site doesn&amp;#39;t work immediately&lt;/h3&gt;
&lt;p&gt;As stated above, a visual upgrade using the user interface or upgrade by code/powershell is needed to let the existing site run in v4 mode:&lt;/p&gt;
&lt;p&gt;
&lt;span id="lnum1" style="COLOR:#606060;"&gt;1:&lt;/span&gt; $web = Get-SPWeb &lt;a href="http://site"&gt;http://site&lt;/a&gt;
&lt;/p&gt;
&lt;pre&gt;&lt;/pre&gt;

&lt;p&gt;
&lt;span id="lnum2" style="COLOR:#606060;"&gt;2:&lt;/span&gt; $web.UIVersion = 4
&lt;/p&gt;
&lt;pre&gt;&lt;/pre&gt;

&lt;p&gt;
&lt;span id="lnum3" style="COLOR:#606060;"&gt;3:&lt;/span&gt; $web.Update()
&lt;/p&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;p&gt;sadly, this will bug out, because SharePoint &lt;em&gt;requires &lt;/em&gt;the v4.master to be able to upgrade to v4-mode. The v4.master has to be made available via a feature (or manually) in the masterpage gallery, before the upgrade can be executed.&lt;/p&gt;
&lt;h3&gt;2 - Upgrade to a masterpage that isn&amp;#39;t needed&lt;/h3&gt;
&lt;p&gt;Assuming that all customizations that did exist in SharePoint 2007 need to be retained, the above solution isn&amp;#39;t the final solution. Next steps are to create a SharePoint 2010 masterpage with the customizations, deploy that masterpage, and set that masterpage as the default/custom masterpage for that site. And because that v4.master wasn&amp;#39;t needed at all, that feature should be deactivated, or even better for hygienic reasons, be uninstalled and deleted. &lt;/p&gt;
&lt;h3&gt;why is this a problem?&lt;/h3&gt;
&lt;p&gt;As this isn&amp;#39;t to much of a hassle for a few sites, it does whenever some big portals/intranets are migrated, with a lot of different masterpages. When working with about 10.000 webs, this needs to be automated, but&amp;nbsp;activating anddeactivating 10000 times a feature can be quite time consuming. A lot of time can be saved, whenever the customized masterpages are already &amp;quot;SP2010-ready&amp;quot;, so all is left to do, is to set the UIVersion to 4.&lt;/p&gt;
&lt;h2&gt;The solution of quickly applying a visual upgrade without a v4.master&lt;/h2&gt;
&lt;p&gt;As described above. I wanted to achieve the following scenario: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Deploy my custom solutions with all masterpages already upgraded to SP2010, so only the UIVersion should be upgraded&lt;/li&gt;
&lt;li&gt;Attach the content database&lt;/li&gt;
&lt;li&gt;Upgrade the site.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;what happens behind the scenes?&lt;/h3&gt;
&lt;p&gt;When firing up reflector, we see that the following happens in code:&lt;/p&gt;
&lt;p&gt;When the UIVersion is set, an internal function called &amp;quot;SetUIVersion&amp;quot; is executed. This function takes the UIVersion as a parameter and a boolean which decides wether or not to set the masterpage. &lt;em&gt;Unfortunately, this function is an internal function, so it can&amp;#39;t be used without using reflection.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The SetUIVersion function contains some logic to determine whether to rollback to UIVersion 3, or to upgrade to UIVersion 4. After the decision, the internal function SwitchMasterPages is called, with 5 parameters:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/5773.functiondefinition.png"&gt;&lt;img height="19" width="570" src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/5773.functiondefinition.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That function is called with the following parameters&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/8037.SetUIVersion.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/8037.SetUIVersion.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And what happens&amp;nbsp;&lt;em&gt;in&lt;/em&gt; this function gets interesting. This function checks what default and custom masterpage are currently set (the V3 masterpages), and stores them in the propertybag of the current web, specified, by the parameters specified in the function. To determine what new masterpage needs to be set, that same propertybag is checked:&amp;nbsp;in this case the properties &amp;quot;v4master&amp;quot; and &amp;quot;v4customMaster&amp;quot;. if they are empty, the default v4.master is used:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/3362.CheckPropertybag.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/3362.CheckPropertybag.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;and in this part of the function, the error is thrown that the default masterpage couldn&amp;#39;t be found:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/2251.DefaultMasterpageNotFoudn.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/2251.DefaultMasterpageNotFoudn.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When the propertybag isn&amp;#39;t empty, the value of that propertybag is set as masterpage: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/6724.SetCustomMasterpage.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/6724.SetCustomMasterpage.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And that is our solution!&lt;/p&gt;
&lt;p&gt;Simply set add the v4master and v4customMaster to the SPWeb propertybag, with the values of the current masterpage. Update the UIVersion of the web and update it. That should do the trick:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/3782.UpgradeMasterpage.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/3782.UpgradeMasterpage.png" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Upgrading a SP2007 site to SP2010 is easy to do, but it can consume quite some time and operations. To streamline the upgrade process of a SP2007 site to SP2010, it&amp;#39;s easier to upgrade the Sp2007 masterpages beforehand and include them, with the same name, in the solution. Deploy the solutions, attach the databases and upgrade every SPWeb using the above powershell. That should do the trick!&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;color:#5f9ea0;font-size:large;"&gt;&lt;span style="font-family:Courier New;color:#5f9ea0;font-size:large;"&gt;&lt;span style="font-family:Courier New;color:#5f9ea0;font-size:large;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>GeoSearch with Fast Search for SharePoint 2010 - Part 1</title><link>http://bloggingabout.net/blogs/bas/archive/2012/02/24/geosearch-with-fast-search-for-sharepoint-2010-part-1.aspx</link><pubDate>Fri, 24 Feb 2012 18:51:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:577292</guid><dc:creator>Bas</dc:creator><description>&lt;p&gt;This is the first part of a series of blogposts about GeoSearch with Fast Search for SharePoint. I recently held some presentations about extending the power of Fast (on &lt;a href="http://www.diwug.nl" title="Dutch Information Worker User Group"&gt;DIWUG&lt;/a&gt;&amp;nbsp;and the Dutch &lt;a href="http://www.techdays.nl" title="Dutch Techdays 2012"&gt;TechDays 2012&lt;/a&gt;) and one of the subjects that I talked about was on how to search for locations, sort on distances etcetera. The recording of my sessions will be made available on &lt;a href="http://channel9.msdn.com/Events/Speakers/bas+lijten" title="Bas Lijten on Channel 9"&gt;Channel 9&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Part 1: why and how&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/blogs/bas/archive/2012/02/24/geosearch-with-fast-search-for-sharepoint-2010-custom-pipeline-extensions.aspx" title="Fast Search for SharePoint custom pipeline extension"&gt;Part 2: the custom pipeline extension to enrich the Fast index with spatial data&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/blogs/bas/archive/2012/04/10/geosearch-with-fast-search-for-sharepoint-2010-part-3-how-to-use-the-latitude-and-longitude-in-your-queries.aspx"&gt;Part 3: how to use this metadata in your search queries&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Why using Fast search for SharePoint 2010&amp;nbsp;for this purpose?&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;It&amp;#39;s possible to compute distances between locations in a lot different ways. For example, address can be queried against SQL Server (if the correct data is available), or those addresses can be used in conjunction with the Bing Geocode services. A custom webpart&amp;nbsp;with logic to query one of those services with the users/objects current location and all list items with location information takes little time, but performance issues can pop up in no time.&amp;nbsp;how&amp;nbsp;is the performance when there are 200 items in a list? and 2000? 20000? maybe 200000? Surely, I can imagine that there are some smart solutions to send 200000 locations to the geocode service and receive them back, but remember: how did you extract that information from a sharepoint list? That takes quite some time. It is even getting harder when data comes from several lists, not even thought about&amp;nbsp;data from several site collections, external data (BCS is an option here btw)&amp;nbsp;or, location information that resides &lt;em&gt;inside&lt;/em&gt; document.&lt;/p&gt;
&lt;p&gt;And this is where Fast comes into play. Fast is a very powerful search engine that can be custimized in various ways. First of all, Fast can index all of the information that lives inside SharePoint, or outside of SharePoint (using, for example,&amp;nbsp;the BCS or a custom connector). Not matter what (besides security ;)), but whenever a query is executed on a certain keyword, all indexed data can be checked against hat keyword. at second comes the ability to enrich the index with extra information.&amp;nbsp;The source for this information can be existing metadata from sitecolumns(address, city), data from inside the document, or data that is already extracted using the entity extractor. These sources can be used to query the geocode service of your choice to retrieve the spatial data for that source and can be added to the fast index.&lt;/p&gt;
&lt;p&gt;This metadata can be used to query the index, determine distances to items within the index, or do other, cool things!&lt;/p&gt;
&lt;h2&gt;Customizing the pipeline&lt;/h2&gt;
&lt;p&gt;As told before, Fast can be used to index various sources with information. Think about SharePoint, external websites, lotus notes,&amp;nbsp;oracle using jdbc, external systems like SAP using BCS and DUET Enterprise et cetera. When this data is indexed, a custom pipeline extension can be created that retrieves spatial data for that object and is added to the index. In short: all data from various sources can be indexed. If this data contains location information (address, city, country), this data can be used to retrieve the latitude and longitude of the item. This spatial data can be added to the index and thus, be queried.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/1447.IndexGeo.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/1447.IndexGeo.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Query the index&lt;/h2&gt;
&lt;p&gt;When the data has been indexed, this index can be queried using some easy queries. Some examples of queries that easily can be executed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Give me all results of items within 5 km of my living area&lt;/li&gt;
&lt;li&gt;Give&amp;nbsp;me all information on cars and sort that information on distance, relative to my current location.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I bet that the speed of results showing up, can&amp;#39;t be beaten by custom implementations that continiously need to query external services!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Fast Search for SharePoint problems - simplified architecture diagram</title><link>http://bloggingabout.net/blogs/bas/archive/2011/08/09/fast-search-for-sharepoint-installation-problems-simplified-architecture-diagram.aspx</link><pubDate>Tue, 09 Aug 2011 21:54:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:543102</guid><dc:creator>Bas</dc:creator><description>&lt;p&gt;Recently I had a few &lt;span class="short_text" lang="en" id="result_box"&gt;&lt;span class="hps"&gt;colleagues (and myself) who&amp;nbsp;tried to install&amp;nbsp;FAST search for SharePoint on their development workstation. Despite the&lt;a href="http://technet.microsoft.com/en-us/library/ff381243.aspx" title="Fast installation and configuration guide on MSDN"&gt; well written installation guidelines on MSDN&lt;/a&gt;, they had several problems, and sadly enough, they all faced different problems. These problems varied from not able to crawl the content to not being able to query the indexed content. As most of the colleagues weren&amp;#39;t too familiar with Fast (and SharePoint search in general), I decided to create a small architecture diagram of the SharePoint 2010 Search Service Applications, Fast Search for SharePoint and (some of)&amp;nbsp;their junction points. These junction points are displayed in the image below. To simplify the diagram, some items have been removed, the search query proxy is one example. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/1537.Fast_2D00_diagram.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/1537.Fast_2D00_diagram.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;/span&gt;&lt;/span&gt;The diagram helped me and my colleagues to&amp;nbsp;pinpoint the problems and I hope it will help you in the future with pinpointing problems (well, I hope you wont have any problems at all, but hey, it&amp;#39;s Fast ;)).&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;This post just covers a small subset of problems, but I think that the majority of most common problems are covered here. Whenever you think that a certain common problem is missing in here, please contact me, I will add it as soon as possible. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Use the following log/event locations to pinpoint problems:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;c:\fastsearch\var\log&lt;/span&gt;&lt;/span&gt; 
&lt;ul&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;contains a &lt;em&gt;lot &lt;/em&gt;of folders with logging. Whenever problems arise, I check the folder &amp;quot;syslog&amp;quot; first&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;the Eventlog - increase the loglevels in the sharepoint diagnostic logging to verbose for extensive logging&lt;/span&gt;&lt;/span&gt; 
&lt;ul&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Application log&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Fast Search&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Fast Search Farm&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;SharePoint diagnostic logging - increase the log level to verbose&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;The IIS authentication logging&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;use nctrl status to check the status of your Fast installation&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Some basic guidance:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Whenever no log errors appear on the Fast Search farm (event log as well as the \var\log), the problem lies within the SharePoint configuration&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Whenever no errors appear on the Fast Search application, but errors do appear on the Fast IIS log, it&amp;#39;s most likely&amp;nbsp;a permission problem. My guess: database and/or &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Whenever errors appear in Fast, you may not have SharePoint or permission problems, but a wrongly configured Fast environment. I didn&amp;#39;t write about these errors below, but hostname configurations appeared to&amp;nbsp;cause problems a lot.&lt;/span&gt;&lt;/span&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;As seen in the diagram, there are several&amp;nbsp;junction points that can cause problems when not configured correctly:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Crawling SharePoint content&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Push&amp;nbsp;content into Fast&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Communicatin with the Search Query and Settins Service&lt;/span&gt;&lt;/span&gt; &lt;/li&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Accessing the admin service the&amp;nbsp;search query and site settings service&lt;/span&gt;&lt;/span&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Configure Fast via PowerShell &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I have seen problems on all of these levels and I will try to (shortly) describe the possible problems, their symptoms and (a link to) their solution. A small disclaimer is in place: this is by no means a full overview of possible problems, but it should help in troubleshooting whenever problems arise.&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;1 -&amp;nbsp;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Crawling SharePoint content (1)&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;One of the most common problems are the problems with crawling content. Make sure that your default content access account has read permissions on the sharepoint sites that need to be crawled. Normally, this is handled by SharePoint. Possible error message:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Access is denied. Verify that either the Default Content Access Accouont has access to this repository, or add a crawl rule to crawl this repository. If the repository being crawled is a SharePoint repository, verify that the account you are using has &amp;quot;Full Read&amp;quot; permissions on the SharePoint Web Application being crawled.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;2 - &lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Push&amp;nbsp;content into Fast&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; (2)&lt;/h3&gt;
&lt;p&gt;After installing fast, pushing content into Fast can be a problem too. Several problems are possible here:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;-&amp;nbsp;SSL communication between the Fast Content Service and the Content Distributor is not configured correctly.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Visit &lt;a href="http://technet.microsoft.com/en-us/library/ff381261.aspx#BKMK_Configure_ssl_enabled_communication"&gt;technet &lt;/a&gt;on how to configure SSL communication. Please make sure that the account used in &amp;quot;&lt;strong&gt;.\SecureFASTSearchConnector.ps1 &amp;ndash;certPath &amp;quot;path of the certificate\certificatename.pfx&amp;quot; &amp;ndash;ssaName &amp;quot;name of your content SSA&amp;quot; &amp;ndash;username &amp;ldquo;domain\username&amp;rdquo; &lt;/strong&gt;is the account that runs the osearch14. In the Administration &lt;em&gt;Services&lt;/em&gt; window this service is called &amp;quot;&lt;em&gt;SharePoint Server Search 14&lt;/em&gt;&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;-&amp;nbsp;Permissions&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After checking the Fast Content Service installation with &amp;quot;docpush -csp c:\testfile.txt&amp;quot; several errors can appear:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;sp Reported error with &lt;/em&gt;&lt;a href="http://cohowinery.com/c:/temp/bob.txt"&gt;&lt;span style="color:#0066dd;"&gt;&lt;em&gt;http://cohowinery.com/c:\temp\bob.txt&lt;/em&gt;&lt;/span&gt;&lt;/a&gt;&lt;em&gt;: processing:N/A:ProcessorDeploymentException: For pipeline &amp;#39;Office14 (webcluster)&amp;#39;, creating processor CompanyExtractorInclusionAny failed: ConfigurationError: CompanyExtractorInclusionAny: Failed to access or parse configuration file &amp;#39;etc/resources/matching/configuration.companyextractor.inclusion.any.xml&amp;#39;. &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This error can have several causes. Most likely is that the user doesn&amp;#39;t have isn&amp;#39;t member of the FastSearchAdministrators group. Another case I have encountered was that the account was member of that group, but for some reason did not have read access to the directory. Changing permissions fixed this issue for me, &lt;em&gt;but this not recommended to do on a production server!! &lt;/em&gt;The message about &lt;a href="http://cohowinery.com/"&gt;http://cohowinery.com/&lt;/a&gt; is not misconfigured on your system! It&amp;#39;s a&amp;nbsp;fictional company, same like the more known virtual companies contoso and wingtip toys&lt;/p&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;- &lt;strong&gt;&lt;em&gt;I see dead crawlers&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Another issue that can arise when Fast is installed on the same server as your SharePoint installation (not recommended, only for dev purposes!!), is that the enterprise crawler died for some reason. This can be checked with nctrl status. I described the cause and the solution &lt;a href="http://bloggingabout.net/blogs/bas/archive/2011/05/19/fast-for-sharepoint-2010-enterprise-crawler-is-not-working.aspx"&gt;here&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;3 - Communication with the Search Query and Settings Service (3)&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Accessing Fast from your SiteCollection can cause several problems:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;strong&gt;&lt;em&gt;- No search results are returned&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;When a query is executed and no results are returned, the most likely issue is a permission issue: the account that you logged in with, doesn&amp;#39;t have any permissions to view the indexed content. As the returned results are security trimmed by the query service, it&amp;#39;s possible that the returned set contains 0 items. This happened to me when I created an anonymous Fast Search Center, whereas all my other indexed site collections weren&amp;#39;t anonymously accessible. Another issue can be that (and this happens a lot after a fresh dev-installation!) the test site that is indexed, has content that hasn&amp;#39;t been published yet. That content isn&amp;#39;t indexed and thus, not returned.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;strong&gt;&lt;em&gt;- Internal Server error exception (when querying)&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;The application pool of the Search Query and settings service is not running. Check your IIS Manager to make sure that your application pool is up and that your website is running. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;em&gt;&lt;strong&gt;- &lt;span id="ctl00_PlaceHolderMain_LabelMessage"&gt;Unexpected error occurred while communicating with Administration Service&lt;/span&gt;&lt;/strong&gt;&lt;/em&gt; &lt;strong&gt;&lt;em&gt;when&amp;nbsp;accessing one of the following site settings menu entries&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;visual best bets&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;context information&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;promotion/demotion (ranking)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;When this happens, please check the problems mentioned in paragraph&amp;nbsp;5 and 6 &amp;nbsp;too. As these functions communicate with the Fast Administration service, it&amp;#39;s likely that these problems occur, while the query component works fine. It&amp;#39;s most likely a permissions issue, where the Search Query and settings service (mentioned in paragraph 5), doesn&amp;#39;t have the right administration account configured.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;4&amp;nbsp;- &lt;/span&gt;&lt;/span&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;Accessing the admin service through the&amp;nbsp;search query and site settings service&lt;/span&gt;&lt;/span&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;(5)&lt;/h3&gt;
&lt;p&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;em&gt;-&amp;nbsp;&lt;span id="ctl00_PlaceHolderMain_LabelMessage"&gt;Unexpected error occurred while communicating with Administration Service&lt;/span&gt; &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This error mainly has&amp;nbsp;3 rootcauses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Fast Administration services is not configured correctly (e.g. the wrong location is configured in the Fast Query service application)&lt;/li&gt;
&lt;li&gt;The Fast Administration application pool is not running&lt;/li&gt;
&lt;li&gt;Permissions ;). Make sure that that the right Fast Admin account is configured in the Fast Query service application.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;5&amp;nbsp;- Fast via PowerShell (7)&lt;/h2&gt;
&lt;p&gt;Powershell can show some initial &amp;quot;weird&amp;quot; behaviour. Whenever the Fast WCF-services aren&amp;#39;t running, all of the powershell commands will bug out with an error message. Get-FastSearchContentCollection returns: &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Get-FastSearchContentCollection : Failed to communicate with the WCF service.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Whenever the services are back up, this message will disappear and the right output is returned. But sometimes some Powershell commands do work, and some won&amp;#39;t. This is definately a permissions issue, where the executing account isn&amp;#39;t member of the FastSearchAdministrators group. It&amp;#39;s comparable to the missing/wrong permissions for the fast query service application.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/6012.Fast_2D00_Powershell.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/6012.Fast_2D00_Powershell.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;span class="short_text" lang="en"&gt;&lt;span class="hps"&gt;&lt;/span&gt;&lt;/span&gt;Summary&lt;/h3&gt;
&lt;p&gt;The majority of problems arise whenever permissions are not set correctly. It&amp;#39;s&amp;nbsp;important that the Fast Admin account&amp;nbsp;that is configured in the Fast Query Service, is indeed the &lt;em&gt;right&lt;/em&gt;&amp;nbsp;account, is member of the FastSearchAdministrators group and&amp;nbsp;has access the the FastAdmin database. For dev-purposes you can choose the make use of just one main account to run fast, run the app pools and use as the admin account, but this is no recommended approach for production environments. That is why I advise to always use least privilege installations, even on your dev-environments!&lt;/p&gt;</description></item><item><title>SharePoint 2010 - Fast Search Center site template not available (bug?!)</title><link>http://bloggingabout.net/blogs/bas/archive/2011/07/27/sharepoint-2010-fast-search-center-site-template-not-available-bug.aspx</link><pubDate>Wed, 27 Jul 2011 10:08:00 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:530920</guid><dc:creator>Bas</dc:creator><description>&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;Recently I found out that, my Fast Search Center was not available from the &amp;ldquo;New Site&amp;rdquo; menu. Both the english as well the dutch fast search template was not available.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/8875.fastsitetemplate-not-available.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/8875.fastsitetemplate-not-available.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;As I saw this happen before, I checked out the site collection features overview, to enable the &amp;ldquo;SharePoint Server Enterprise Site Collection features&amp;rdquo;. I had to scratch my head twice when I saw that that feature was already activated: that feature should add fast search center templates to the available templates. Next thing I did was navigate to the &amp;ldquo;Page Layout and Site Template settings&amp;rdquo;, to make sure that the Fast Search Center template was available for creating sub-sites. To my surprise, the template was available! Still, I couldn&amp;rsquo;t select that template when creating a new site.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/5657.FastSearchTemplate.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/5657.FastSearchTemplate.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;I remembered that there is a hidden sitecollection feature (search extensions) that needs to be enabled to make use of the Fast specific features like visual best bets and that enables the administration links to visual best bets, user contexts and site promotion/demotion. After activating that feature, the Fast Search center template became&lt;i style="mso-bidi-font-style:normal;"&gt; &lt;/i&gt;available.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/6153.fast_2D00_template_2D00_available.png"&gt;&lt;img src="http://bloggingabout.net/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/bas/6153.fast_2D00_template_2D00_available.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;This is strange, because when checking that feature.xml, we learn the following:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre style="font-family:Consolas;background:white;color:black;font-size:13px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515;"&gt;xml&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;nbsp;?&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;nbsp;Copyright&amp;nbsp;(c)&amp;nbsp;Microsoft&amp;nbsp;Corporation.&amp;nbsp;All&amp;nbsp;rights&amp;nbsp;reserved.&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;--&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Feature&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;Id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;5EAC763D-FBF5-4d6f-A76B-EDED7DD7B0A5&lt;/span&gt;&amp;quot;
&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;Title&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;$Resources:SearchExtensionsFeatureTitle;&lt;/span&gt;&amp;quot;
&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;Description&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;$Resources:SearchExtensionsFeatureDescription;&lt;/span&gt;&amp;quot;
&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;DefaultResourceFile&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Microsoft.Office.Server.Search&lt;/span&gt;&amp;quot;
&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;SolutionId&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;7ED6CD55-B479-4EB7-A529-E99A24C10BD3&lt;/span&gt;&amp;quot;
&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;Version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;14.0.0.0&lt;/span&gt;&amp;quot;
&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;Scope&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Site&lt;/span&gt;&amp;quot;
&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;Hidden&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;TRUE&lt;/span&gt;&amp;quot;
&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://schemas.microsoft.com/sharepoint/&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ElementManifests&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ElementManifest&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;Location&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;webPartDWPFiles.xml&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ElementManifest&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;Location&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;ExtendedSearchAdminLinks.xml&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ElementManifests&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Feature&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;


&lt;pre&gt;&lt;/pre&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;There is no feature receiver&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;There is no feature dependency&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;The feature only&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;A&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;dds a webpart (webpartdwpfiles.xml)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Adds Search admin links (ExtendedSearchAdminLinks.xml)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;For some reason this only happened for &lt;em&gt;existing &lt;/em&gt;site collections. That made me think about some recent changes to the platform:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;SP1 was installed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;SP1 for language packs was installed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;CU June was installed.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;When deactivating the hidden feature (Search Extensions), the english template was gone again, whereas the dutch search template still existed. I definately this needs some further investigation. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;As it only happened for the sites that existed &lt;em&gt;before&lt;/em&gt; that change, my guess it has to do with a combination of those updates. For new sites, everything works as intended. My &lt;em&gt;guess&lt;/em&gt; is that it has to do with the combination of installed/registred language packs and the activation/deactivation of the search extension feature, which provides a default language resource named &amp;quot;Microsoft.Office.Server.Search&amp;quot;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description></item></channel></rss>