TS: Microsoft SharePoint 2010 Configuring – Exam 70-667

I am about to embark on my first SharePoint 2010 exam and 70-667 and in preparation I will be producing a set of study notes to cover the major points of the exam. I will publish these notes by section as I complete them in case anyone else finds them useful. Note these posts will only contain information aggregated from SDK’s and official MS documentation as well as my own experiences I will not be using or publishing any actual questions or brain dumps. The sections I am intending on covering are listed below:

Installing and Configuring a SharePoint Environment

Deploy new installations and upgrade

Configure SharePoint farms

Configure service applications

Configure indexing and search

Managing a SharePoint Environment

Manage operational settings

Manage accounts and user roles

Manage authentication providers

Deploying and Managing Applications

Manage Web Applications

Manage site collections

Deploy and manage SharePoint solutions

Maintaining a SharePoint Environment

Back up and restore a SharePoint environment

Monitor and analyze a SharePoint environment

Optimize the performance of a SharePoint environment

Stay tuned for the first installment!

Boot from VHD Bare Metal

Below are the steps involved in setting up a machine (in this case my laptop) to boot from VHD when installing a new HDD. At some point I may come back and update with screen grabs but for the minute the steps should be enough for most proficient users.

  1. Install new HDD
  2. Boot from DVD. This must be either Windows 7 or Windows Server 2008 R2
  3. When the Install GUI loads Shift+F10 to open command prompt
  4. Type: DISKPART
  5. At the DISKPART Prompt type: list disk
  6. If you only have the newly installed HDD there should only be one entry here, in the case of multiple drives note the number of the new drive
  7. Type: select disk 0 (or the number noted previous if multiple drives)
  8. Type: list partition (should return none available if you have the new disk selected)
  9. Type: clean
  10. Type: create partition primary
  11. Type: format quick fs=ntfs
  12. Type: assign letter=c (or another suitable if multiple drives)
  13. Type: list partition (should now show the newly created partition)
  14. Type: select partition 1
  15. Type: active
  16. Type: create vdisk file=”C:filename.vhd” type=expandable maximum=100000 (maximum 100000 = 100Gb set as appropriate)
  17. Type: select vdisk file=”C:filename.vhd”
  18. Type: attach vdisk
  19. Use ALT+Tab to return to the install screen GUI
  20. Run the Windows installer as usual but select the vdisk as the installation drive. The installer will show a warning that windows cannot be installed to this disk, ignore it 😉
  21. Happily use your newly installed vhd boot machine!

Side notes:

This process cannot be carried out on a USB drive it has to be a permanent drive, it may work on eSATA but I don’t have a drive or connector to try it out with.

Creating a backup of the VHD for later recovery, this was one of the main reasons for using boot from VHD as I install a lot of beta software which can have a negative impact on the machines day to day running. I would advise taking a backup before installing any trial/beta software and then revert back to the backed up image if any issues occur:

  1. Boot from DVD, Windows 7/Windows Server 2008 R2
  2. Shift+F10 to open command prompt
  3. Type: C: (or whatever drive the image is on)
  4. Type: copy filename.vhd clone.vhd (this will take forever on a large drive)
  5. Type: exit
  6. Cancel the installation
  7. Done
With any luck this will be of use to someone out there!

SharePoint 2010 Debug Timeout

I was recently getting frustrated with how quickly SharePoint sites timeout while debugging in Visual Studio. Fortunately there is a simple solution to this problem in IIS Manager find the Application Pool of the site you are debugging and open the advanced properties.

Locate the Process Model section and edit the Ping Enabled and Ping Maximum Response Time properties as shown below. I would only recommend making these changes in a development environment unless you are aware of and accept the impact this may have in other environments.

 

4Blogging – Social Networking – Facebook

While I am still investigating how integration between multiple social networks and Silverlight is best achieved I have found that MS have release a Silverlight 4 client for Facebook so at least I now know this can be done at a conceptual level. The client can be accesed from the link below:

Silverlight 4 Client for Facebook

More details can be found on the AllFacebook blog

All Facebook

and finally the key ingredient the facebook SDK includes assemblies from Silverlight, MVC, Web and Winforms!

Facebook SDK

Give it a try!

Windows Phone 7 RTM

While playing around with Silverlight for the 4Blogging engine it has also occured to me that have a mobile interface would have a number of advantages. This should be an achievable goal as the forthcoming phone from Microsoft‘s interface is based on Silverlight. Ah well throw another requirement on the pile!

It seems that the release of the new Windows 7 phones is creeping ever closer with the internal RTM milestone being reached, check out the details below:

Windows Phone 7 – Release to Manufacturing

4Blogging – Social Networking – Facebook – Twitter

A key feature in many blogging site is the ability to integrate into social networking sites such as Facebook and Twitter. This blog will detail adding functionality to auto announce new blog posts on these two media channels. If possible this will be later migrated into a plugin framework to allow adding of further social networks using a standard interface.

4Blogging – External Image Hosting – Picasa – Part 2

After an initial exploration into the options for connecting a Silverlight application to a Picasa image library a strategy was formed to retrieve metadata via a WCF RIA Domain service and load the images directly from Picasa. This get round the issue of Silverlight making cross domain calls to third party services without a cross domain policy.

I have prototyped a solution which can be downloaded from the sister codeplex site:

http://4blogging.codeplex.com/SourceControl/list/changesets

This is a very simple project that just demonstrates the possibility of interaction between the two technologies. It is not thorough in quality, validation or error handling. It does however demonstrate calling a Picasa album from Silverlight given a user name and album Id (These need to be replaced in the solution with your own library for it to work). 
As there are no data entities created the return is a list of a custom class which has the requirement to be serializable and have an entity key.

The Silverlight application creates a Domain Service context and Entity Query with the user name and album id and calls a Load Operation on the context and adds an event handler to the callback.

 

            PicasaGoogleContext context = new PicasaGoogleContext();
            EntityQuery<ImageItem> query = context.GetAlbumImagesQuery("user.name""albumid");

            LoadOperation<ImageItem> queryOperation = context.Load(query);
            queryOperation.Completed += new EventHandler(queryOperation_Completed);

 

If the operation has been successful new images are created from the result and added to the StackPanel.

 

            LoadOperation<ImageItem> queryOperation = sender as LoadOperation<ImageItem>;
            if (queryOperation.Error == null)
            {
                foreach (ImageItem img in queryOperation.Entities)
                {
                    Image img1 = new Image();
                    img1.Source = new BitmapImage(new Uri(img.ThumbSmall, UriKind.Absolute));
                    img1.Width = 100;
                    img1.Height = 100;
                    ImageList.Children.Add(img1);
                }
            }

 

The Domain Service makes the call to the Picasa service to retrieve the feed for photo items by user and album. This feed is then used to populate the ImageItem with the thumbnail and full image url as well as the filename. The list of these ImageItems are then returned.

 

            List<ImageItem> images = new List<ImageItem>();

            PicasaService service = new PicasaService("PicasaGoogleImageService");
            PhotoQuery query = new PhotoQuery(PicasaQuery.CreatePicasaUri(user, album));
            PicasaFeed feed = service.Query(query);

            foreach (PicasaEntry entry in feed.Entries)
            {
                ImageItem item = new ImageItem(entry.Title.Text, 
                                                entry.Media.Thumbnails[0].Url, 
                                                entry.Media.Thumbnails[1].Url, 
                                                entry.Media.Thumbnails[2].Url,
                                                entry.Media.Content.Url);

                images.Add(item);
            }

            return images;

 

From an application viewers perspective the Silverlight application loads and the images appear in the application shortly after, this successfully demonstrates the process. Additional features required for a full blown implementation would include security and navigation of albums before reaching an image selection with lightbox functionality when an image is clicked on.

4Blogging – External Image Hosting – Picasa – Part 1

This post will explore the option of hosting images using another provider such as Picasa to reduce hosting bandwidth/storage. The prerequisite is to have and account with a public gallery already set up.

Here we will attempt to link to thumbnails and when clicked on open a lightbox style full image to the user. If successful a standard interface will be created that all third party image hosting modules can be built against as part of the overall plug-in environment that 4Blogging is to support, this will enable developers to build their own plug-ins for providers that are not catered for out of the box.

To start with we will need the Google Data API SDK for .NET this can be downloaded here:

http://code.google.com/apis/picasaweb/code.html

After working through the Google Data/Photo API, Silverlight, JQuery and WCF RIA Services I have come to the following conclusions.

  • Silverlight connecting directly to the Picasa service is not possible as the Google Picasa web would have to have a valid clientaccesspolicy.xml file granting cross domain access.
  • JQuery can be used to call the Picasa service but the communication between Silverlight and JQuery with JQuery making async calls has too much of an overhead.
  • WCF can communicate directly to the Picasa service and stream to Silverlight but this would defeat the object of saving bandwidth.
  • While Silverlight cannot call the service it can display an image from Picasa given the URI.

With these points in mind, in Part 2 of this post, I will prototype a solution that has a WCF RIA service that can be called from Silverlight and returns a list of images within a library that are loaded directly from Picasa. This should minimise the required bandwidth as the images are pulled directly from Picasa and only data is transferred via the service.

The code for this will be posted to the CodePlex site when complete.

4Blogging Research – Silverlight Navigation

For Silverlight to be effective as a blog engine the navigation needs to be tightly integrated into the browser. Each blog post will be using the same xaml control but needs to be able to have a unique url in the browser to enable users to bookmark pages. For general use the browser back and forward buttons need to be supported to meet non technical users expectations. Below are documented the steps to create and test this functionality.

Prerequisites:

Steps:

  • Open Visual Studio 2010
  • File > New > Project
  • Installed Templates > Visual C# > Silverlight > Silverlight Navigation Application
  • Enter a name for the application and select a location and click OK
  • Accept the defaults for creating the Silverlight.Web project by clicking Ok
  • Press F5 to run and debug the initial project
  • A browser should open with the image below (or something very similar)

 

The site displayed already has two navigation pages (home and about) available and we can see by the url there is a reference to the current page (home) see below:

http://localhost:[port]/NavigationApplicationTestPage.aspx#/Home

Clicking the about button changes the end of this URL from Home to About

This already means we are part way to meeting at least one of the required criteria to bookmark pages and clicking the back button returns to the home page which checks another item off the list. The next step is to determine if the same xaml control can receive and process multiple URL’s for example:

http://localhost:[port]/NavigationApplicationTestPage.aspx#/BlogPost/?id=MyPostTitle1

http://localhost:[port]/NavigationApplicationTestPage.aspx#/BlogPost/?id=MyPostTitle2

Both links need to be processed by BlogPost.xaml

Steps:

 

  • On the Navigation Application project right click the Views folder > Add Item
  • Select Silverlight Page give it a name such as BlogPost.xaml and click OK
  • Add a textblock to the new page and add the x:Name attribute and call it Title
  • Go to the code behind and in the OnNavigatedTo event set the Text property of Title to the NavigationEventArgs.Uri property e.Uri.ToString()
  • This will display the path passed to the page and if it supports additional parameters to make it unique such as an id
  • Open MainPage.xaml and locate the Home and About HyperlinkButton controls
  • Copy one of the controls modify the Content to a unique name and the NavigateUri as shown below:
  • /[YourPageName]?id=1
  • Repeat and give and id of 2

 

Now press F5 to run and debug

If all has gone well the application will open again with two new buttons, clicking one of the buttons should update the Url to the new page and the path should be displayed in the application. This demonstrates that the page can be aware of additional identifiers and bookmarked with a parameter identifying a blog post.

This may not be the way the navigation is finally implemented but it proves that the concept is sound and can be executed. The code for this example can be downloaded from the 4Blogging CodePlex website.

http://4blogging.codeplex.com/SourceControl/list/changesets