<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Agile Sharepoint development by 21apps and Andrew Woodward MVP &#187; SharePoint 2010</title>
	<atom:link href="http://www.21apps.com/category/sharepoint-2010/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.21apps.com</link>
	<description></description>
	<lastBuildDate>Wed, 28 Jul 2010 10:19:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SharePoint 2010 Edition Comparisons</title>
		<link>http://www.21apps.com/sharepoint-2010/sharepoint-2010-edition-comparisons/</link>
		<comments>http://www.21apps.com/sharepoint-2010/sharepoint-2010-edition-comparisons/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 10:19:47 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[SharePoint 2010]]></category>

		<guid isPermaLink="false">http://www.21apps.com/sharepoint-2010/sharepoint-2010-edition-comparisons/</guid>
		<description><![CDATA[One thing I always get asked is what features exist in what version,&#160; or more specifically are we licensed to do this? Microsoft have produced a neat feature comparison chart.
http://sharepoint.microsoft.com/en-us/buy/pages/editions-comparison.aspx
This small blog post is really for my own reference as I always struggle to find it&#8230;&#160; sure I could do book marks but.. I think [...]]]></description>
			<content:encoded><![CDATA[<p>One thing I always get asked is what features exist in what version,&#160; or more specifically are we licensed to do this? Microsoft have produced a neat feature comparison chart.</p>
<p><a title="http://sharepoint.microsoft.com/en-us/buy/pages/editions-comparison.aspx" href="http://sharepoint.microsoft.com/en-us/buy/pages/editions-comparison.aspx">http://sharepoint.microsoft.com/en-us/buy/pages/editions-comparison.aspx</a></p>
<p>This small blog post is really for my own reference as I always struggle to find it&#8230;&#160; sure I could do book marks but.. I think this is better <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.21apps.com/wp-content/uploads/2010/07/wlEmoticonsmile1.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/sharepoint-2010/sharepoint-2010-edition-comparisons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint Retreat&#8211; Competition winner</title>
		<link>http://www.21apps.com/sharepoint-2010/sspretreat-london-compwinner/</link>
		<comments>http://www.21apps.com/sharepoint-2010/sspretreat-london-compwinner/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 15:30:17 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint Retreat]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1336</guid>
		<description><![CDATA[To help promote the community aspect of SharePoint Retreat and share the knowledge and lessons learned beyond those that were lucky enough to attend we offer a prize for the best sharing of knowledge. This sharing could be in the form of a web cast, blog post, white paper or even presentation at a user [...]]]></description>
			<content:encoded><![CDATA[<p>To help promote the community aspect of <a href="http://www.21apps.com/?p=1313" target="_blank">SharePoint Retreat</a> and share the knowledge and lessons learned beyond those that were lucky enough to attend we offer a prize for the best sharing of knowledge. This sharing could be in the form of a web cast, blog post, white paper or even presentation at a user group.</p>
<p>As this was the first SharePoint Retreat the prize is really pretty fantastic.</p>
<p> </p>
<p><a href="http://msdn.microsoft.com/en-us/subscriptions/buy.aspx" target="_blank"><img class="wlDisabledImage" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="VS2010Ultimage_web" src="http://www.21apps.com/wp-content/uploads/2010/07/VS2010Ultimage_web.jpg" border="0" alt="VS2010Ultimage_web" width="192" height="320" align="left" /></a></p>
<p><a href="http://msdn.microsoft.com/en-us/subscriptions/buy.aspx">Visual Studio 2010 Ultimate with MSDN subscriptions valued at $11,899 each</a>!*</p>
<p>The prize was donated, indirectly, by Microsoft, I was sent a number of copies to give away for being an MVP and taking part in testing Microsoft Visual Studio 2010.</p>
<p>There were some great posts:</p>
<p>@WorTony : <a href="http://worsworld.spaces.live.com/blog/cns!400938DCD454D501!1076.entry?sa=222516566" target="_blank">SharePoint Retreat</a></p>
<p>@Weshackett: <a href="http://bit.ly/cpdL5D" target="_blank">Review of the day</a></p>
<p>@nigel_price: <a href="http://blog.njpenterprises.com/archive/2010/07/13/spretreat-10072010-london.aspx" target="_blank">SPRetreat London</a></p>
<p> </p>
<p> </p>
<p> But there was one that really stood out and provided some great code samples and “how to”s from the day </p>
<p>&#8230; and the winner of the prize is</p>
<p> </p>
<p><a href="http://www.21apps.com/wp-content/uploads/2010/07/MartinHatch.jpg"><img class="wlDisabledImage" style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="Martin Hatch" src="http://www.21apps.com/wp-content/uploads/2010/07/MartinHatch_thumb.jpg" border="0" alt="Martin Hatch" width="224" height="266" align="left" /></a></p>
<p><strong>Martin Hatch</strong></p>
<p>Martin did a great <a href="http://www.martinhatch.com/2010/07/rcwp-part-1-spretreat-and-related.html" target="_blank">3 part series</a> on the challenges and lessons learnt from the day.  With full source code available in part 3.</p>
<p> </p>
<p>Congratulations Martin <img class="wlEmoticon wlEmoticon-smile" style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" src="http://www.21apps.com/wp-content/uploads/2010/07/wlEmoticonsmile.png" alt="Smile" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/sharepoint-2010/sspretreat-london-compwinner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Error in PortalCrawl Web Service when crawling people in SharePoint 2010</title>
		<link>http://www.21apps.com/sharepoint-2010/error-in-portalcrawl/</link>
		<comments>http://www.21apps.com/sharepoint-2010/error-in-portalcrawl/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 15:13:01 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1310</guid>
		<description><![CDATA[Today I found a little problem when working with preconfigured server farm.  The farm had all the user profile services working and there were profiles with data – but no users were returned from search.
A quick look at the logs showed the error:
sps3://machinename  &#8211; Error in PortalCrawl Web Service
 
The problem was caused because the farm [...]]]></description>
			<content:encoded><![CDATA[<p>Today I found a little problem when working with preconfigured server farm.  The farm had all the user profile services working and there were profiles with data – but no users were returned from search.</p>
<p>A quick look at the logs showed the error:</p>
<p>sps3://machinename  &#8211; Error in PortalCrawl Web Service</p>
<p> </p>
<p>The problem was caused because the farm had been installed using the Farm Config Wizard  which had set things up to use the machine name for its default web application.  This web application was not being used and so had no site collections created.  The fix was to point the sps3:// url to a web application that did have a root site collection.</p>
<p>In my search for this solution I found some great posts that provide a lot of details about the issue and a combination of these will improve your knowledge of people search and also help you resolve the issue should you happen to have it.</p>
<p> </p>
<p>Provides the solution that ultimately fixed my problem</p>
<p><a title="http://trycatch.be/blogs/tom/archive/2007/05/15/people-crawl-error-in-portalcrawl-web-service.aspx" href="http://trycatch.be/blogs/tom/archive/2007/05/15/people-crawl-error-in-portalcrawl-web-service.aspx">http://trycatch.be/blogs/tom/archive/2007/05/15/people-crawl-error-in-portalcrawl-web-service.aspx</a></p>
<p>Provides information about a permission setting that was new to me</p>
<p><a title="http://blogs.msdn.com/b/maximeb/archive/2009/10/27/error-in-portalcrawl-web-service-when-crawling-people-with-sharepoint-2010.aspx" href="http://blogs.msdn.com/b/maximeb/archive/2009/10/27/error-in-portalcrawl-web-service-when-crawling-people-with-sharepoint-2010.aspx">http://blogs.msdn.com/b/maximeb/archive/2009/10/27/error-in-portalcrawl-web-service-when-crawling-people-with-sharepoint-2010.aspx</a></p>
<p>Provides great info (albeit taken from the late great Patrick Tisseghem’s book (<a href="http://www.microsoft.com/MSPress/books/12195.aspx"><strong>Inside the Index and Search Enginges:  Microsoft Office SharePoint Server 2007  </strong></a>)<strong><br />
</strong></p>
<p><a title="http://blogs.msdn.com/b/maximeb/archive/2009/10/27/error-in-portalcrawl-web-service-when-crawling-people-with-sharepoint-2010.aspx" href="http://blogs.msdn.com/b/maximeb/archive/2009/10/27/error-in-portalcrawl-web-service-when-crawling-people-with-sharepoint-2010.aspx">http://blogs.msdn.com/b/maximeb/archive/2009/10/27/error-in-portalcrawl-web-service-when-crawling-people-with-sharepoint-2010.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/sharepoint-2010/error-in-portalcrawl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint 2010 ECMAScript &#8211; &#8216;b&#8217; is null or not an object</title>
		<link>http://www.21apps.com/development/sp2010-b-is-null/</link>
		<comments>http://www.21apps.com/development/sp2010-b-is-null/#comments</comments>
		<pubDate>Mon, 24 May 2010 13:30:15 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[ECMAScript]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1278</guid>
		<description><![CDATA[I had to post this quick article as its one of those can&#8217;t see the wood for the trees.
I had been trying to do a simple call back to the server to display some information about a list item.
   getStory: function (id) {
    var backLogList = this.lists.getByTitle('BackLog');
     [...]]]></description>
			<content:encoded><![CDATA[<p>I had to post this quick article as its one of those can&#8217;t see the wood for the trees.</p>
<p>I had been trying to do a simple call back to the server to display some information about a list item.</p>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   getStory: <span style="color: #0000ff">function</span> (id) {</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    <span style="color: #0000ff">var</span> backLogList = <span style="color: #0000ff">this</span>.lists.getByTitle('BackLog');</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">        <span style="color: #0000ff">this</span>.itemToGet = backLogList.getItemById(id);</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">        context.executeQueryAsync(</pre>
<pre style="background-color: #ffff00; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">        Function.createDelegate(<span style="color: #0000ff">this</span>, com.apps.aberdovey.SprintPlanning.getStorySucceeed),</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">        Function.createDelegate(<span style="color: #0000ff">this</span>, com.apps.aberdovey.SprintPlanning.onFail));</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    },</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    getStorySucceed: <span style="color: #0000ff">function</span> (sender, args) {</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    alert('got it');</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    },</pre>
<p>The problem was I never got anything to happen.  My onFail() had an alert and I also showed an alert when the call succeeded.   But nothing.</p>
<p>I reverted to IE Dev toolbar where I kept getting the error</p>
<blockquote><p>&#8216;b&#8217; is null or not an object</p></blockquote>
<p>after spending time validating my calling code and cursing the lack of good examples on the web for SharePoint 2010 ECMAScript I eventually found it. </p>
<p>The delegate name for the getStorySucceed was spelt incorrectly!</p>
<p>It is amazing how much time you spend looking for stupid errors when doing JavaScript development.  This one I thought worth posting so that when other search for &#8216;b&#8217; is null or not an object they will at least have a better idea what&#8217;s wrong.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/development/sp2010-b-is-null/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting up SharePoint 2010 CI process with Team City</title>
		<link>http://www.21apps.com/continuous-integraton/setting-up-sharepoint-2010-ci-process-with-team-city/</link>
		<comments>http://www.21apps.com/continuous-integraton/setting-up-sharepoint-2010-ci-process-with-team-city/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 21:27:58 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[Continuous Integraton]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[Aberdovey]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1198</guid>
		<description><![CDATA[In this article and screen cast we will discuss the idea behind the CI process and focus on the technical tricks that we need to make in order to get this working for a SharePoint 2010 project using Team City and Subversion.
One of the first things that you will want to do for any development project [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>In this article and screen cast we will discuss the idea behind the CI process and focus on the technical tricks that we need to make in order to get this working for a SharePoint 2010 project using Team City and Subversion.</p></blockquote>
<p>One of the first things that you will want to do for any development project is setup your <a href="http://en.wikipedia.org/wiki/Continuous_Integration" target="_blank">Continuous Integration</a>process. The value of having a server automatically monitor your source code repository for changes and validating they work is immense</p>
<p>Its worth mentioning that doing Continuous Integration is not something you will want to leave until later in the project.  Waiting means the solution gets bigger and more complex which in turn make the setup more comples.   My recommendation:  Get this configured early, during Sprint 0  (i.e. before you write any real production code) if at all possible.</p>
<h3>The basic CI Process</h3>
<p>The diagram below shows the normal process that occurs.  </p>
<p>(1) a developer checks in some code changes to the source code repository.</p>
<p>(2) The CI server monitors the source code repository for any changes</p>
<p>When changes are detected the code is retrieved and the automated build is started.  This build will normally include running Unit, Integration and Build Verification tests.</p>
<p>(3) The success or failure of the automated build is reported back to the Team (including the developer).</p>
<p><em>In some teams breaking the build means the developer has a forfeit of some sort.  The idea is to encourage team work but also to discourage broken builds.</em></p>
<p><a href="http://www.21apps.com/wp-content/uploads/2010/02/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Continuous Integration" src="http://www.21apps.com/wp-content/uploads/2010/02/image_thumb.png" border="0" alt="Continuous Integration" width="548" height="665" /></a> </p>
<h3>When the build breaks!</h3>
<p>A term I read recently, &#8216;Stop-the-Line&#8217;,  is used in Toyota manufacturing process where any problem results in the production line being stopped until the cause of the problem is found, resolved and ideally prevented from re-occurring.    </p>
<p>This should be the same when a build breaks; the whole Team should stop and help get the build working again.  It is not just a problem for the developer who last checked in &#8211; the whole team need the process and need the builds to be working.</p>
<h3>Setting Up in Sprint 0</h3>
<p>The actual process described above is a little into the development cycle, when the build is in place and when the team are working on production code.   Before this can happen there needs to be a process put in place.  I refer to this initial as getting the <strong>strawman</strong> solution done.</p>
<blockquote><p><em><strong>definition: Strawman</strong></em></p>
<p>In general, a strawman is an object, document, person, or argument that temporarily stands in for and is intended to be &#8220;knocked down&#8221; by something more substantial.    </p>
<p align="right">source: <a title="http://whatis.techtarget.com/wsearchResultsB/0,,sid9,00.html?query=strawman" href="http://whatis.techtarget.com/wsearchResultsB/0,,sid9,00.html?query=strawman" target="_blank">Whatis.com</a></p>
</blockquote>
<p align="left">The aim is to take some code, which will be replaced hence the Strawman term through the CI process and get the team build notifications working.   You should aim to prove the successful builds but also what happens when the build fails.  Did the team get notified?  and did they react?</p>
<h3>The Strawman Exercise</h3>
<p align="left">21apps is a small and geographically dispersed team,  we make extensive use of cloud based services for things like source control as they prove to be cost effective and flexible and our strawman  process tends to follow these steps:</p>
<p align="left">1) Create a repository for the project  (Hosted Subversion)</p>
<p align="left">2) Create the strawman project  (Simple &#8216;hello world&#8217; web part)</p>
<p align="left">3) Create a simple build script  &#8211; small steps mean a successful compile is our objective</p>
<p align="left">4) Create a automated build configuration on our CI server &#8211; we use <a href="http://www.jetbrains.com/teamcity/" target="_blank">Team City</a></p>
<p align="left">5) Prove the successful and failed builds</p>
<p align="left">In this post we are focusing on step (4) setting up Team City as our CI server. </p>
<p align="left">To make this easier I have provided a quick video walkthrough on what we have done for the early builds of <a href="http://www.21apps.com/sharepoint/introducing-project-aberdovey/" target="_blank">Project Aberdovey</a>- the process will be very similar for your SharePoint 2010 solutions.</p>
<p align="left"> </p>
<p align="left"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="450" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=9655768&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="600" height="450" src="http://vimeo.com/moogaloop.swf?clip_id=9655768&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowfullscreen="true" allowscriptaccess="always"></embed></object><a href="http://vimeo.com/9655768">SharePoint 2010 &#8211; CI with TeamCity</a> from <a href="http://vimeo.com/user2441558">Andrew Woodward</a> on <a href="http://vimeo.com">Vimeo</a>.
</p>
<p align="left"> </p>
<h3>Video Spotlights</h3>
<p>Key areas that are highlighted in the video that you will enable you to build SharePoint 2010 projects in Team City.</p>
<p>If you are using MSBuild ensure you set the MSBuild version to Microsoft.Net Framework 3.5 and x64 run platform.</p>
<p align="left"><a href="http://www.21apps.com/wp-content/uploads/2010/02/image1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.21apps.com/wp-content/uploads/2010/02/image_thumb1.png" border="0" alt="image" width="479" height="347" /></a></p>
<p align="left"> </p>
<p align="left">Force Team City to use MSBuild 4.0 as this is needed by adding the Environment Variable</p>
<p align="left"><span style="font-family: Courier New; font-size: small;">Name: MSBuild</span></p>
<p align="left"><span style="font-family: Courier New; font-size: small;">Reference Syntax: %env.MSBuild%</span></p>
<p align="left"><span style="font-family: Courier New; font-size: small;">Value: %system.DotNetFramework4.0_x86_Path%</span></p>
<p><a href="http://www.21apps.com/wp-content/uploads/2010/02/image2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.21apps.com/wp-content/uploads/2010/02/image_thumb2.png" border="0" alt="image" width="580" height="233" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/continuous-integraton/setting-up-sharepoint-2010-ci-process-with-team-city/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Namespace not updated in SharePoint SPIs</title>
		<link>http://www.21apps.com/development/namespace-not-token-spis/</link>
		<comments>http://www.21apps.com/development/namespace-not-token-spis/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 09:54:48 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1180</guid>
		<description><![CDATA[Firstly what is a SharePoint SPI?
No it&#8217;s not another new version, it&#8217;s a generic term that is used to describe a SharePoint Project Item within the context of a Visual Studio project.
Visual Studio 2010 has introduced a lot of great SharePoint specific features making it significantly easier to get started with SharePoint development. This post [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Firstly what is a SharePoint SPI?</p>
<p>No it&#8217;s not another new version, it&#8217;s a generic term that is used to describe a SharePoint Project Item within the context of a Visual Studio project.</p></blockquote>
<p>Visual Studio 2010 has introduced a lot of great SharePoint specific features making it significantly easier to get started with SharePoint development. This post however is not about the tools, it is intended to point out one little bit of the hidden functionality that unfortunately didn&#8217;t get completed in time.</p>
<p>The Visual Studio tools hide away so of the configuration options in .spdata files. This is normally great as you can change these via the UI tools and everything works. However I discovered a small issue during a recent refactoring of a project.</p>
<p>When you create a new SharePoint SPI (for example a web part) that needs to add a reference to the assembly it updates the .spdata file with information (as below)</p>
<pre class="csharpcode"><span class="kwrd">
<pre><span>&lt;?</span><span>xml</span> <span>version</span><span>="1.0"</span> <span>encoding</span><span>="utf-8"</span>?<span>&gt;</span>
<span>&lt;</span><span>ProjectItem</span> <span>Type</span><span>="Microsoft.VisualStudio.SharePoint.WebPart"</span>
   <span>DefaultFile</span><span>="MyWebpart.cs"</span>
   <span>SupportedTrustLevels</span><span>="All"</span>
   <span>SupportedDeploymentScopes</span><span>="Site"
   </span><span>xmlns</span><span>="http://schemas.microsoft.com/VisualStudio/2010/SharePointTools/SharePointProjectItemModel"</span><span>&gt;</span>
  <span>&lt;</span><span>Files</span><span>&gt;</span>
    <span>&lt;</span><span>ProjectItemFile</span> <span>Source</span><span>="Elements.xml"</span> <span>Target</span><span>="MyWebpart\"</span> <span>Type</span><span>="ElementManifest"</span> <span>/&gt;</span>
    <span>&lt;</span><span>ProjectItemFile</span> <span>Source</span><span>="MyWebpart.webpart"</span> <span>Target</span><span>="MyWebpart\"</span> <span>Type</span><span>="ElementFile"</span> <span>/&gt;</span>
  <span>&lt;/</span><span>Files</span><span>&gt;</span>
  <span>&lt;</span><span>SafeControls</span><span>&gt;</span>
    <span>&lt;</span><span>SafeControl</span> <span>Name</span><span>="MyWebpart"</span>
       <span>Assembly</span><span>="$SharePoint.Project.AssemblyFullName$"</span>
       <span>Namespace</span><span>="_21apps.Sample.SPSolution"</span> <span>TypeName</span><span>="*"</span> <span>IsSafe</span><span>="true"</span> <span>/&gt;</span>
  <span>&lt;/</span><span>SafeControls</span><span>&gt;</span>
<span>&lt;/</span><span>ProjectItem</span><span>&gt;</span></pre>
<p><!-- .csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } --></p>
<p> </p>
<p></span></pre>
<p><!-- .csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } --></p>
<p>In here you will see references to the ProjectItemFiles (.weppart and element manifest) and also an entry for the SafeControls.</p>
<p>If you look closely at the SafeControl entry you will see the Assembly is using a Token</p>
<p><span style="font-family: courier new; font-size: small">Assembly=&#8221;$SharePoint.Project.AssemblyFullName$&#8221;</span></p>
<p>This is great as it allows the SafeControl to pickup the actual assembly name at compile time. The problem comes with the next part of the entry</p>
<p><span style="font-family: courier new; font-size: small">Namespace=&#8221;_21apps.Sample.SPSolution&#8221;</span></p>
<p>As you can see this is not token based, which means that if you later decide to rename you namespace, and this is case sensitive, the SharePoint safe control entry will no longer be valid and you will get an error like the one below when you deploy the solution.</p>
<blockquote><p><span style="color: #ff0000">A Web Part or Web Form Control on this Web Part Page cannot be displayed or imported because it is not registered on this site as safe.</span></p></blockquote>
<p>For more info on what this actually means have a look at Maurice Prather&#8217;s <a href="http://www.bluedoglimited.com/SharePointThoughts/ViewPost.aspx?ID=189" target="_blank">post</a> from back in 2005, the information is still applicable today.</p>
<p>Unfortunately this namespace is unlikely to be made into a Token any time soon. Perhaps one for the community to pickup in the meantime. For now it is case of being aware that you need to correct this manually if you do change your namespace.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/development/namespace-not-token-spis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SharePoint 2010 &#8211; Health Analyzer is awesome</title>
		<link>http://www.21apps.com/sharepoint-2010/health-analyzer-is-awesome/</link>
		<comments>http://www.21apps.com/sharepoint-2010/health-analyzer-is-awesome/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 22:04:52 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1160</guid>
		<description><![CDATA[Being mainly focused on development aspects of SharePoint 2010 I haven&#8217;t spent as much time as I perhaps should have looking at the new features that have been added to make Administrators lives easier.  Having just upgraded one on my development machines from SharePoint 2010 Foundation to SharePoint 2010 Server for Internet Sites,  which on [...]]]></description>
			<content:encoded><![CDATA[<p>Being mainly focused on development aspects of SharePoint 2010 I haven&#8217;t spent as much time as I perhaps should have looking at the new features that have been added to make Administrators lives easier.  Having just upgraded one on my development machines from SharePoint 2010 Foundation to SharePoint 2010 Server for Internet Sites,  which on a single box installation with AD and SQL local went without a hitch, I thought it worth looking at what the Health Analyzer was telling me.</p>
<p>As you can see I have a few issues:</p>
<p><a href="http://www.21apps.com/wp-content/uploads/2010/01/AnalyserSummary.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Analyser Summary" src="http://www.21apps.com/wp-content/uploads/2010/01/AnalyserSummary_thumb.png" border="0" alt="Analyser Summary" width="644" height="402" /></a></p>
<h3>Security</h3>
<p>The security Issue I can live with and I suspect everyone running the Beta has the same as using full admin accounts is the only way to get SharePoint working fully at this stage.</p>
<h3>Performance</h3>
<p>This is a dev box, so I am ok with SQL running on the same machine,  interesting that this is the only performance issue reported as the machine is a Hyper-V VM with 4 processors allocated and only 4GB RAM &#8211; but it seems to be running fine.</p>
<h3>Configuration</h3>
<p>3 items here &#8211; the second is about Email not configured &#8211; which is correct.  And again I have used built in accounts for the service identities as this was a single box install &#8211; I may fix these up at some point.</p>
<p>The 3rd item <strong>Missing server side dependencies</strong> caught my eye,  and I have to say the dialog that was displayed brought a smile to my face.</p>
<p><a href="http://www.21apps.com/wp-content/uploads/2010/01/Analyser.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Analyser" src="http://www.21apps.com/wp-content/uploads/2010/01/Analyser_thumb.png" border="0" alt="Analyser" width="623" height="713" /></a></p>
<p>The server was reporting that I had referenced a web part TestJQuery.WebPart1.WebPart1 in two places and that the files to support these web parts were not on the system meaning the user will get an error.</p>
<p><strong><span style="font-size: medium;"><em>This is awesome!</em></span></strong></p>
<p>I know why these are here,  it was a spike test that I had done previously and had obviously forgot to clear it down.  What it does show is that the administrators (and developers on your own environments) can now proactively check for missing DLLs.</p>
<p>This was not one of the features I asked for in SharePoint 2010 &#8211; but is one that I am very glad exists. </p>
<h3>Availability</h3>
<p>How many times have you been called in to find the logs have maxed out the drive space and SharePoint has crashed?   Here the health analyzer is telling me I may have an issue with space.    I&#8217;m ok with this,  I have a 40GB drive with 11GB free &#8211; I like to keep the drives around 40GB as I move then to my laptop and boot to VHD and this needs the full drive size as free space in order to boot &#8211; so I can let this one go as well.</p>
<p>The only thing left to say this is:</p>
<p><span style="font-family: Script MT Bold; font-size: large;">Thank you SharePoint Product Team.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/sharepoint-2010/health-analyzer-is-awesome/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SharePoint 2010 &#8211; Have to Extend to have Multiple URLs</title>
		<link>http://www.21apps.com/sharepoint-2010/sharepoint-2010-and-multiple-urls/</link>
		<comments>http://www.21apps.com/sharepoint-2010/sharepoint-2010-and-multiple-urls/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 17:50:58 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1141</guid>
		<description><![CDATA[I think this was a best practice in SharePoint 2007, but was one that you could get away with.  You have internal and external URLs that will be used to access the same web application.   Internally for historical or vanity reasons this is set as something like http://companyname, externally you provide access, often via a [...]]]></description>
			<content:encoded><![CDATA[<p>I think this was a best practice in SharePoint 2007, but was one that you could get away with.  You have internal and external URLs that will be used to access the same web application.   Internally for historical or vanity reasons this is set as something like <a href="http://companyname">http://companyname</a>, externally you provide access, often via a proxy like ISA Server, via <a href="https://extranet.companyname.com">https://extranet.companyname.com</a> &#8211; and you do SSL termination at the ISA server as well.</p>
<p>You create the web application using the internal name,  get everything setup and then do the following to provide external access</p>
<ul>
<li>- Add an Alternative Access Mapping for <a href="https://extranet.companyname.com">https://extranet.companyname.com</a> in the Internet Zone</li>
<li>- Add another internal URL to the Internet Zone <a href="http://extranet.companyname.com">http://extranet.companyname.com</a></li>
<li>- In IIS add a new binding to the web application so it picks up <a href="http://extranet.companyname.com">http://extranet.companyname.com</a></li>
<li>- Publish the SharePoint site via ISA, with SSL access externally and no SSL internally</li>
</ul>
<p>This scenario would work well,  you would cut down on the web.configs to be maintained &#8211; assuming you didn&#8217;t use features to do this for you, and you would have a slightly lower overhead on the server &#8211; which was often needed in the 32bit setups.</p>
<h3>Problems in 2010  (and for some in 2007)</h3>
<p>With the introduction of the client API, and a few other services, Microsoft is now making use of the WCF for its web services.   These offer lots and lots of advantages,  but have one limitation (at least in 3.5) that makes the above scenario fail. </p>
<blockquote><p>You cannot have multiple bindings on any IIS website</p></blockquote>
<p>If you do set your environment up this way and you are using the client API you will hit problems.  Assuming you have coded you client requests with a fail delegate (like this code snippet)</p>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">  1: <span style="color: #0000ff">var</span> lists;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">  2: <span style="color: #0000ff">var</span> context;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">  3:</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">  4: <span style="color: #0000ff">function</span> sample() {</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">  5:     context = <span style="color: #0000ff">new</span> SP.ClientContext.get_current();</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">  6:</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">  7:     <span style="color: #0000ff">this</span>.site = context.get_web();</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">  8:</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">  9:     context.load(<span style="color: #0000ff">this</span>.site);</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;"> 10:</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;"> 11:     lists = site.get_lists();</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;"> 12:     context.load(lists);</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;"> 13:</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;"> 14:     context.executeQueryAsync(onPass, onFail);</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;"> 15: }</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;"> 16:</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;"> 17: <span style="color: #0000ff">function</span> onFail(sender, args) {</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;"> 18:     <span style="color: #0000ff">alert</span>("<span style="color: #8b0000">Fail:</span>" + args.get_message() + '\n' + args.get_stackTrace());</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;"> 19: }</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;"> 20:</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;"> 21: <span style="color: #0000ff">function</span> onPass(sender, args) {</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;"> 22:     onPass(lists.getByTitle('List'));</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;"> 23: }</pre>
<p>when the async mehtod is called it will fail and the onFail method will show a 500 error.  One of the best things is the logging in 2010 has been improved so a quick look on the server and you should see something like the following in the event log:</p>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">Log Name:      Application</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">Source:        System.ServiceModel 3.0.0.0</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">Date:          31/12/2009 16:22:06</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">Event ID:      3</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">Task Category: WebHost</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">Level:         Error</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">Keywords:      Classic</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">User:          domain\sp-admin</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">Computer:      computername</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">Description:</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">WebHost failed to process a request.
 Sender Information: System.ServiceModel.ServiceHostingEnvironment+HostingManager/2389992
 Exception: System.ServiceModel.ServiceActivationException: The service '/_vti_bin/client.svc'
cannot be activated due to an exception during compilation.
The exception message is: This collection already contains an address with scheme http.
There can be at most one address per scheme in this collection.</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">Parameter name: item. ---&gt; System.ArgumentException:
This collection already contains an address with scheme http.
There can be at most one address per scheme in this collection.</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">Parameter name: item</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.UriSchemeKeyedCollection.InsertItem(Int32 index, Uri item)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.Collections.Generic.SynchronizedCollection`1.Add(T item)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.UriSchemeKeyedCollection..ctor(Uri[] addresses)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.ServiceHost..ctor(Type serviceType, Uri[] baseAddresses)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(Type
serviceType, Uri[] baseAddresses)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(
String constructorString, Uri[] baseAddresses)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService(
String normalizedVirtualPath)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(
String normalizedVirtualPath)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(
String normalizedVirtualPath)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   --- End of inner exception stack trace ---</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(
String normalizedVirtualPath)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast(String relativeVirtualPath)
 Process Name: w3wp
 Process ID: 3924</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">Event Xml:</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">&lt;Event xmlns="<span style="color: #8b0000">http://schemas.microsoft.com/win/2004/08/events/event</span>"&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">  &lt;System&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    &lt;Provider Name="<span style="color: #8b0000">System.ServiceModel 3.0.0.0</span>" /&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    &lt;EventID Qualifiers="<span style="color: #8b0000">49154</span>"&gt;3&lt;/EventID&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    &lt;Level&gt;2&lt;/Level&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    &lt;Task&gt;5&lt;/Task&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    &lt;Keywords&gt;0x80000000000000&lt;/Keywords&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    &lt;TimeCreated SystemTime="<span style="color: #8b0000">2009-12-31T16:22:06.000000000Z</span>" /&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    &lt;EventRecordID&gt;99264&lt;/EventRecordID&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    &lt;Channel&gt;Application&lt;/Channel&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    &lt;Computer&gt;computername&lt;/Computer&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    &lt;Security UserID="<span style="color: #8b0000">S-1-5-21-2646386180-1731120971-3670236442-1114</span>" /&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">  &lt;/System&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">  &lt;EventData&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    &lt;Data&gt;System.ServiceModel.ServiceHostingEnvironment+HostingManager/2389992&lt;/Data&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    &lt;Data&gt;System.ServiceModel.ServiceActivationException: The service '/_vti_bin/client.svc'
cannot be activated due to an exception during compilation.
The exception message is: This collection already contains an address with scheme http.
There can be at most one address per scheme in this collection.</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">Parameter name: item. ---&amp;gt; System.ArgumentException:
This collection already contains an address with scheme http.
There can be at most one address per scheme in this collection.</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">Parameter name: item</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.UriSchemeKeyedCollection.InsertItem(Int32 index, Uri item)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.Collections.Generic.SynchronizedCollection`1.Add(T item)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.UriSchemeKeyedCollection..ctor(Uri[] addresses)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.ServiceHost..ctor(Type serviceType, Uri[] baseAddresses)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 97.91%; font-family: consolas,'Courier New',courier,monospace; height: 31px; font-size: 11px;">   at System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(Type serviceType,
Uri[] baseAddresses)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString,
Uri[] baseAddresses)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService(String normalizedVirtualPath)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(String normalizedVirtualPath)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(
String normalizedVirtualPath)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   --- End of inner exception stack trace ---</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(
String normalizedVirtualPath)</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">   at System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast(
String relativeVirtualPath)&lt;/Data&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    &lt;Data&gt;w3wp&lt;/Data&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">    &lt;Data&gt;3924&lt;/Data&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">  &lt;/EventData&gt;</pre>
<pre style="background-color: #d8d8d8; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 11px;">&lt;/Event&gt;</pre>
<p> </p>
<p>The problem, although not obvious from the error message is related to the WCF framework not being able to work with multiple names on the same schema (where schema means HTTP).</p>
<h3>Solution</h3>
<p>The solution to this is to Extend the web application to another IIS web site.  It will make use of the same application pool but is likely to add a small overhear to the server.  The biggest challenge is to ensure that you get your deployments automated so that SharePoint can keep the web.config&#8217;s inline.   And with the introduction of the Sandboxed solution the other issues with artifacts deployed to the 80 (inetpub) folder will likely go away over time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/sharepoint-2010/sharepoint-2010-and-multiple-urls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint CEWP &#8211; source includes dynamic content</title>
		<link>http://www.21apps.com/sharepoint-2010/cewp-includes-dynamic-conten/</link>
		<comments>http://www.21apps.com/sharepoint-2010/cewp-includes-dynamic-conten/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 15:39:33 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1137</guid>
		<description><![CDATA[Many people have used the the Content Editor WebPart to provide an easy way to inject some JavaScript into a web page to do things like hide the left navigation or show snowflakes. 
In SharePoint 2010 the good old Content Editor WebPart is still around and even has some nice new features like format as XHTML,  [...]]]></description>
			<content:encoded><![CDATA[<p>Many people have used the the Content Editor WebPart to provide an easy way to inject some JavaScript into a web page to do things like hide the left navigation or show snowflakes. </p>
<p>In SharePoint 2010 the good old Content Editor WebPart is still around and even has some nice new features like format as XHTML,  however I discovered one feature that I suspect is more of a bug &#8211; or perhaps an undocumented feature <img src='http://www.21apps.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Scenario</h3>
<p>You have used the content editor web part to put some placeholders on the page,  a couple of DIV tags and the like.   You have another web part (it could be the same one) that does some funky Client API calls to get some information to render in those place holders &lt;  all looking good for a simple no code solution so far.</p>
<p>Now you decide that you want to copy you handy work to another site,  this is just a quick &#8216;Information Worker&#8217; hack so no need for any Visual Studio or WSPs here.</p>
<p>Edit the page and select the content editor web part,  the one that has has some content dynamically added.   Click on the HTML &gt; Edit HTML Source option and da-dah the dynamic content is included in the source.</p>
<h3>Upshot</h3>
<p>This could be a great thing if you wanted to get at all of the code,  but I suspect this is not what you expected.  The problem is that if you now make a minor change &#8211; say you wanted to add something and click save,  you will hard code whatever values had been added.</p>
<p>I would prefer the Content Editor Web Part source Editor to ONLY show me what I has actually added to it in the web part properties.   I suspect the reason for the bug is likely someone trying to reduce the calls to the server.</p>
<p><strong>Serious Problem</strong></p>
<p>The problem is actually quite serious as you only need to visit the page,  click Edit Page and then Stop Editing for it to update the content.   This really does mean that you will have to stop using the CEWP in this way at least for the Beta.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/sharepoint-2010/cewp-includes-dynamic-conten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SharePoint 2010 Developer Training &#8211; Great week</title>
		<link>http://www.21apps.com/sharepoint/2010-dev-beta-course/</link>
		<comments>http://www.21apps.com/sharepoint/2010-dev-beta-course/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 20:00:33 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[Training]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1100</guid>
		<description><![CDATA[Disclaimer:  I don&#8217;t work for Mindsharp or Combined Knowledge, but I do guest teach the developer course.
Had a great week attending Combined Knowledge&#8217;s first public beta of the SharePoint 2010 developer course,  in fact it was the first running of this course anywhere in the world!
The course was held in what I think is a [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Disclaimer:  I don&#8217;t work for Mindsharp or Combined Knowledge, but I do guest teach the developer course.</p></blockquote>
<p>Had a great week attending <a href="http://www.combined-knowledge.com/Flyers/SP2010.html" target="_blank">Combined Knowledge&#8217;s first public beta</a> of the SharePoint 2010 developer course,  in fact it was the first running of this course anywhere in the world!</p>
<p>The course was held in what I think is a great venue,  the board room in <a href="http://www.bw-ullesthorpecourt.co.uk/" target="_blank">Ullesthorpe</a> &#8211; I really like teaching here as this is a permanent setup so you know you have everything you need including lots of white boards &lt;&lt; these are essential.  This week was slightly different on the food front as they were into the December Xmas menu,  no longer did we get the famous <em>&#8216;Rice and Chips&#8217; </em>that Todd Bleeker is so keen on &#8211; instead we got a full choice from the bar menu,  I recommend the chicken and warm bacon salad starter.</p>
<p>Back to the course; you might be asking  <em>&#8216;Why this course and not the Ignite Training?&#8217;</em> </p>
<p>I have to say I am very impressed with Microsoft in the amount of information and training being provided this early in the delivery cycle,  if you compare this to what we had for 2007 and even worse what we didn&#8217;t have in 2003 you will know that they have really put the effort in.</p>
<p>So why did I not do the Ignite Training?  &#8211; Simple answer could be I missed the boat; and this is not untrue (double negative to make it sound better :S), but the real answer is that I am planning to guest teach this course for Combined Knowledge and it is a great way for me to feedback on what does/doesn&#8217;t work from an attendee&#8217;s perspective and help shape the course that people will get over the coming years  (the 2003 course is still being taught, so anything fixed now has a long time to live).</p>
<p>The course was being taught by Gary Yeoman,  long time trainer with Combined Knowledge and real world consultant when not training.  Attending the course were myself,  <a href="http://www.21apps.com/?p=1095" target="_blank">James Fisk</a>, Adrian, David, Ian, Stephan (from Switzerland), Rehan and Ruth &#8211; plus we had the honour of having <a href="http://sharepoint.mindsharpblogs.com/Todd/default.aspx" target="_blank">Todd Bleeker</a> (the course author) taking a very active role throughout the week.</p>
<h3>Big Topic or Lots of Topics</h3>
<p>SharePoint in 2007 was a big product,  sure Windows SharePoint Services (WSS V3) wasn&#8217;t quite as big as MOSS but from a developers perspective there was a lot to cover.  Things in 2010 just get bigger.   To quote Todd  (and it may not have been word for word)</p>
<blockquote><p>Custom Field types were probably the hardest thing you had to do in SharePoint 2007.  In 2010 there are lots of things that are more complicated.  however the great tools in Visual Studio 2010 help here a lot!</p></blockquote>
<p>What I&#8217;m trying to say is we had a lot to cover and Gary was adopting a JIT based approach to some of the slides <img src='http://www.21apps.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>If you skip the sleeping!</h3>
<p>There are 24hours in a day (8 for work, 8 for sleep and 8 for yourself).  Based on this schedule there really is no way that there would be a beta SharePoint 2010 developer course with the depth of information and labs that people expect of a Combined Knowledge course for people to attend.   So how was this solved?</p>
<p>Well if your Todd Bleeker you make the call that you can adopt the following pattern 6 x 1/2 hour sleep and 21 hours work (per day, everyday)!   Yes Todd has been doing the <a href="http://en.wikipedia.org/wiki/Polyphasic_sleep" target="_blank">Uberman sleep pattern</a> (a form of polyphasic sleep) for the past 17 weeks &#8211; and he is amazingly still sane and took a very active role during the week.  Although on one occasion we returned after a break to see a pair of feet sticking out from under a desk which were attached to Todd fitting in one of his 1/2 hour sleeps! </p>
<p>It was suggested at the start of the course that every student should also adopt this if they were to be able to get through the content we wanted to cover,  thankfully other attendees like to have some &#8216;down&#8217; time to recuperate. </p>
<blockquote><p>&#8216;Down&#8217; time == &#8216;SharePint&#8217;  <img src='http://www.21apps.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p></blockquote>
<h3>The Course</h3>
<p>Being a beta course, and the first real proper teach ever, and based on the Beta 2 release that only dropped a few weeks ago it was expected that the labs would be a little rough and ready.   This couldn&#8217;t have been more wrong! The new format adopted with microlabs,improved consistency and the result of many hour of hard work has paid off in droves.  </p>
<p>We were all experienced SharePoint 2007 developers so we could skip any of the usual &#8216;What&#8217;s an SPWeb&#8217; type discussion and head straight into some deep dives.</p>
<p>The course covered a lot of detail including</p>
<ul>
<li>- Powershell and how to extend it</li>
<li>- A tour of VS2010 and the new SharePoint tools</li>
<li>- Extending VS2010</li>
<li>- Event Models &#8211; with focus on what&#8217;s new and improved</li>
<li>- Deployment scenarios</li>
<li>- Sandboxed and Farm Solutions</li>
<li>- Workflow</li>
<li>- SharePoint Designer &lt;&lt;   YES SharePoint Designer is really a useful dev tool in 2010</li>
<li>- Developer Dashboard</li>
<li>- and many many more</li>
</ul>
<h3>What stood out?</h3>
<p>In truth SharePoint 2010 was the real star, including the great new tools in VS2010 (although the very poor story around Unit Testing is tainting my views here).</p>
<p>What I did get at the end of the course was a feeling that I just want to get out and start teaching it,  to start sharing the great new things that caused me so many long days in the past.  </p>
<p>I am looking forward to when I can run my first class and spend time working through your ideas, problems and solutions.</p>
<p>I&#8217;m excited about developing for SharePoint 2010. </p>
<p>If I can offer one tip for now,   &#8216;always start with a Sandboxed solution first&#8217;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/sharepoint/2010-dev-beta-course/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
