Host-Named Site Collections (Provisioning by Code and in Specific Content Database)
Host-named site collections are the preferred method to deploy sites in SharePoint 2013.
Because the Office 365 environment uses host-named site collections, new features are optimized for these site collections and they are expected to be more reliable.
Creating Host Named site collection in a on premise environment still needs to be done with the use of PowerShell.
New-SPSite 'http://dev.sharepoint.local' -HostHeaderWebApplication 'http://webapplication.sharepoint.local’ -Name 'Host-Named Site Collection' -Description 'My First Host-Name Site Collection' -OwnerAlias 'SharePoint\spadmin' -language 1033 -Template 'STS#0'
When you would like to create the specific site collection in a separate content database you could use the following command.
New-SPSite 'http://dev.sharepoint.local' -HostHeaderWebApplication 'http://webapplication.sharepoint.local’ -Name 'Host-Named Site Collection' -Description 'My First Host-Name Site Collection' -OwnerAlias 'SharePoint\spadmin' -language 1033 -Template 'STS#0' -ContentDatabase 'SP2013_Content_HostNamed'
For more information on the out of the box functionalities:
If you work in a environment were site need to be provisioned you will have to create a solution to create host-named site collections.
But how do you create host-named site collection by using code (C#).
At first you will have to get a reference to the web application were in you would like to create the host-named site collection. After that you can just use the ‘Add’ method on the ‘Sites’ collection.
SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://webapplication.sharepoint.local")); SPSite Site = webApp.Sites.Add("http://dev.sharepoint.local", "Host-Named Site Collection","My First Host-Name Site Collection", 1033, "STS#0", "SharePoint\spadmin", "SharePoint Administrator", "spadmin@sharepoint.local", "SharePoint\poweruser”,"Power User", "poweruser@sharepoint.local", true);
But what should you do if you would like to create a host-named site collection in a specific content database in C#.
bool retVal = false; SPWebApplication webApp = SPWebApplication.Lookup(new Uri(hostheaderApplication)); SPContentDatabase newDatabase = null; if (webApp != null) { bool continueValue = false; if (!string.IsNullOrEmpty(contentDatabase)) { //check if database exists var query = from SPContentDatabase database in webApp.ContentDatabases where database.Name == contentDatabase select database; newDatabase = query.FirstOrDefault(); continueValue = newDatabase == null ? false : true; } else { continueValue = true; } if (continueValue) { SPSite createdSite = webApp.Sites.Add(url, name, description, languageId, template, ownerAlias, string.Empty, string.Empty, ownerAlias, string.Empty, string.Empty, true); SPContentDatabase database = createdSite.ContentDatabase; if (database.Name != contentDatabase) { Dictionary<SPSite, string> failed = new Dictionary<SPSite, string>(); database.Move(newDatabase, new List<SPSite>() { createdSite }, out failed); if (failed.Count > 0) { createdSite.Delete(); } else { retVal = true; } } else {