Deploy SharePoint Central Administration to more than one server in the SharePoint farm

There is a lot of conflicting information on the net whether it's possible to have more than one SharePoint server hosting SharePoint Central Administration site in the farm. I know for the fact that it's possible to have more than one server hosting SharePoint Central Administration site to provide high availability for that part of the SharePoint environment. Here is it can be done:

  • Let's say you have two SharePoint servers: Server A and Server B. Server A hosts SharePoint Central Administration site, Server B doesn't
  • To add SharePoint Central Administration site functionality to the Server B, run SharePoint Configuration Wizard on the Server B and at the "Completing the SharePoint Products and Technologies Configuration Wizard" step, click on Advanced Settings
  • Select "Use this machine to host the website" to add SharePoint Central Administration site functionality and hit OK. Click Next to start the configuration wizard
  • After the configuration wizard completes successfully, you will have additional server providing Central Administration functionality. To verify that it's in fact true, open SharePoint Central Administration site and under Farm Topology you should have Central Administration functionality listed under both servers.

How to Fix “The file exists. (Exception from HRESULT: 0x80070050)…” error on SharePoint

If you're getting the error "The file exists. (Exception from HRESULT: 0x80070050)", when you attempt to access your SharePoint site, or even SharePoint Central Administration site, the chances are that some (or all) SIDs on your server were changed. This has probably happened because you have removed and recreated some user accounts that you use to run SharePoint services, or you have run sysprep on your server, or you have recently turned your SharePoint server into Active Directory domain controller. It's not a good idea to do any of those things with your SharePoint server, but I'm not here to judge – I'm here to help J

Please note, that the steps described below is a "low-tech" solution to the problem, which requires you to actually understand what you're about to do. USE AT YOUR OWN RISK!!! And, of course, do not forget about backups, backups, backups. Also, I would like to point out the credit for this solution goes to the blog and his/her author that is no longer online.

Anyway, to solve "The file exists. (Exception from HRESULT: 0x80070050)…" error:

  1. Login to your SharePoint and open SQL Server Management Studio. Create New Query
  2. To get the list of Site IDs you need to use SharePoint_AdminContent_* database for Central Administration Site and run the following query:
    SELECT s.Id, w.FullUrl FROM Sites s inner join Webs w on s.RootWebId = w.Id
  3. As a result of the query above, you will see all Site IDs for the selected database. Now, using that data, run a new query:
    SELECT * FROM UserInfo WHERE tp_Login='Hostname/Username' and tp_SiteID='XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
    where tp_Login is the hostname and username using which you're trying to login to SharePoint; and tp_SiteID is the site ID from the previous query
  4. As a result of the query above, you will see the SID for the selected user. Now, here comes the tricky part, you need to get SID number for the user account that you're logging in with (in my case, it was Administrator account) and convert it to hexadecimal format:
    1. To get SID for a user account, you can use PSTOOLS utility. Run PSGETSID \\HOSTNAME USERNAME to get SID info
    2. To convert the SID to hexadecimal format, use the following VB script and run it against the SID obtained in the previous step: sid2gex.vbs mySID, where my mySID is the SID for the user account you're working with. As a result, you will receive SID in the hexadecimal format.
  5. Now we will update our database table with newly obtained SID using:
    UPDATE UserInfo SET tp_SystemID = 0x010500000000000000000986BD9EA976E44036C3F5D3F04040000
    FROM UserInfo
    WHERE tp_ID = '1' and tp_guid='XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' and
    tp_Login='hostname\username' and tp_SiteID = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
    where tp_ID, tp_guid, tp_Login and tp_SiteID are the attributes of the user account for which we want to update tp_SystemID. Note: you might have to repeat those steps for the services accounts which are running your search, shared services provider, etc.

After implementing the steps above, you might have to update service accounts in the SharePoint configuration. Microsoft has an excellent guide on how to make those changes.

Join SharePoint server to the Active Directory domain

If you need join existing SharePoint server to your Active Directory domain, then you're in for a treat. Joining the SharePoint server to the domain will mess up the authentication in SharePoint and cause errors. To join SharePoint server to the Active Directory domain without breaking SharePoint authentication:

  • Back up all SharePoint content databases and all customizations that you have made to the SharePoint (stylesheets, javascript files, image files, web parts, config files, and so on)
  • Uninstall SharePoint completely from the server
  • Join the server to the Active Directory domain
  • Reinstall SharePoint Server (make sure to use different names for content databases)
  • Restore your SharePoint content databases
  • Add restored content databases to the SharePoint web application(s) using "stsadm -o addcontentdb" command
  • In SharePoint Central Administration >> Application Management >> Content Databases, change status of existing content databases to Offline, and set the status of the recently restored database to Ready
  • Copy over the customizations that you have backed up in the beginning (stylesheets, javascript files, image files, config files, and so on) and install missing web parts, features, solutions, etc.

That should be it. Simple, right? J

No process is on the other end of pipe

If you receive "No process is on the other end of pipe…" error when you attempt to connect to the SQL Server 2005, then check if:

  • SQL Server services are running
  • remote connections enabled
  • port settings are correct
  • DNS gets resolved properly
  • firewall is not preventing you from connecting successfully
  • and so on and so forth…

And, if after all of these checks the error is still displayed, then the bad certificate could the one to blame. In order to be successfully loaded by SQL Server 2005, a certificate must meet all the following requirements:

  1. The certificate must be in either local machine or current user certificate store
  2. The certificate must have a good time stamp, i.e. the current system time must be in the valid time window of the certificate
  3. The certificate must be meant for Server Authentication
  4. The Certificate's key spec must include AT_KEYEXCHANGE property.
  5. The certificate's subject CN must match the FQDN of the server machine or the FQDN of the virtual server if the server runs on failover cluster.

If for some reason the server cannot find a valid certificate, then the server will issue a self-signed certificate to encrypt data communication between the server and client. The login packet will always be encrypted, while the data communication will be encrypted only if the server and the client are configured to do so. Anyway, to resolve the issue with the certificate, do the following:

  • Open SQL Server Configuration Manager; under SQL Server Network Configuration right-click on Properties for your SQL instance, and click on Certificate tab. Then make sure that the correct and valid certificate is selected, and then reboot your SQL Server.
  • If invalid certificate is explicitly specify, then remove that certificate
  • Otherwise, Open Personal Store in Certificates (Local Machine and User) management console, backup all certificates in that folder and then remove all certificates from personal store
  • Reboot your SQL Server
  • To make sure that self-signed certificate has been loaded, open ERRORLOG file for your SQL Server and search for "A self-signed certificate was successfully loaded for encryption" line in the log file.
  • Attempt to reconnect to the SQL Server

Creating custom list from hidden Event content type

For some reason, Microsoft has decided to hide Event content type in SharePoint (MOSS/WSS) and prevent users from creating a custom list based on that content type. To unhide Event content type:

  1. Open your existing calendar on the site and go to List Settings
  2. Click on Advanced Settings and change the settings to "Allow Management of Content Types", which will reveal the Event content type in that list settings
  3. Click on the Event in the list of content types
  4. Under List Content Type Information click on the Parent link, which is strangely enough also called Event
  5. Under Settings click on the "Name, Description & Group" link and assign Event content type to the new group, for example "List Content Types". That's it, from now on you will be able to create custom lists based on the Event content type

 

There is another way to unhide Event content type, and even though I find it less graceful, I think it's worth mentioning:

  1. Go to [Drive]:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\ctypes\ folder and backup the contents of that folder
  2. To unhide Event content type, run
    stsadm -o deactivatefeature -filename "ctypes\feature.xml" -url http://[SharePointWebApp]
    and
    stsadm -o activatefeature -filename "ctypes\feature.xml" -url http://[ SharePointWebApp]

Master page cannot be loaded…

There is an interesting bug in SharePoint Designer: sometimes when you browse SharePoint pages in the design view of the SharePoint Designer, you will see an error stating that the master page cannot be loaded. At that point you get presented with two options: either attach a different master page or work in the code view. Neither of those options actually solves the problem, they just allow you to work around it. I have never liked workarounds; I prefer solving the problems instead of working around them. J

With a little bit research I have found that the reason why my custom master page cannot be displayed in SharePoint Designer is that the default master page (default.master) has been checked out. Once I have checked in the master page, SharePoint Designer went back to displaying my master pages in the design view.

Please note that sometimes SharePoint Designer locks up the pages if you have checked out the page and then closed the application without checking in the page. So, you will have to check out the page and then check it back in. Sometimes, the only way to do is that is through the Site Content and Structure part of the SharePoint site.



Related resources:

Issue with migrating custom list templates

If you're trying to export custom list template (with or without content) from one SharePoint collection or farm to the other, you might notice that your recently imported list template does not appear on the "Create Page" page of that site, which means that you cannot use the new template to create new list. This issue appears to be caused by the fact that your list definition ID of the new custom template is different

The workaround is to:

  • After you have imported your template, go to List templates section (Site Actions >> Site Settings >> List Templates) and write down the Title and Feature ID fields.
  • Now create new empty custom list and call it EmptyList
  • Create new list template based on the EmptyList (Settings >> List Settings >> Save List as Template)
  • Now when you try to create new list, you will see EmptyList on the list gallery. If you hover your mouse over the EmptyList item in the list gallery, your browser's status bar should display the URL similar to:
    http://SHAREPOINT/_layouts/new.aspx?NewPageFilename=EmptyList%2Estp&FeatureId={00bfea22-ec85-4403-972d-ebe475780216 }&ListTemplate=100
  • Replace the NewPageFilename and FeatureId entries with the values noted at the step one. Your new URL will look something like that:
    http://SHAREPOINT/_layouts/new.aspx?NewPageFilename=ImportedListName%2Estp&FeatureId={00bfea71-de22-43b2-a848-c05709900100}&ListTemplate=100
  • Copy modified URL to the address bar and hit Enter
  • Configure the name and the description of the list and hit Create. Your newly created list will be based on the imported list template.

Be cautious of the automatic web part installers

If one beautiful morning your SharePoint designers complain that they now get "The server sent a response which SharePoint Designer could not parse…" error when they try to edit SharePoint page or page layout, and/or your SharePoint developers all of the sudden are unable to access any of the SharePoint services under _vti_bin folder (like _vti_bin/lists.asmx), then check your web.config file. The tags in <httpHandlers> section in web.config file are probably out of order.

<remove verb="*" path="*.asmx" /> tag needs to be posted before any of the <add > tags in <httpHandlers> section in web.config file, otherwise the SharePoint web services path configuration breaks.

In our case this issue was caused by the web part install that incorrectly modified web.config file to configure AJAX in SharePoint. I guess the lesson is always be cautious of the automatic web part installers J

How to change the URL for SharePoint Central Administration site

I have been working on configuring high availability for SharePoint servers (MOSS or WSS), and for a little while I wasn't able to figure out the way to modify the URL for SharePoint Central Administration site. So, basically you extend the Central Administration web application (using GUI or psconfig command) to run on multiple servers, and when you click on SharePoint Central Administration icon you're still redirected to a specific SharePoint server instead of been redirected to the Load Balancing URL. Anyway, as it turns out the URL has to be changed via registry on all SharePoint servers. Weird?!

To change the URL for SharePoint Central Administration URL:

  • Open Registry editor
  • Backup the registry before making any changes!!!
  • Go to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0\WSS and change the value of CentralAdministrationURL to whatever you want to be


Related resources:

How to change the port number for SharePoint Central Administration site

To change a port number that SharePoint Central Administration site is running on:

  • Open Command Prompt
  • Go to BIN folder in SharePoint install directory (by default, it would be "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN")
  • To get the port number that Central Administration site is currently running on, type

    stsadm.exe -o getadminport
  • To change a port number that SharePoint Central Administration site is using, type

    stsadm.exe -o setadminport -port <portnumber>