Pi Day 2016 is now officially Sharepoint 2016 RTM day, at least for us SharePoint nerds… And those of us on KiZAN Technologies; who are now officially a Microsoft Project and Portfolio Management Partner, this means that Project Server 2016 is now available on-premises, and is now an integrated installation as a part of SharePoint 2016.
As far as I'm aware, pending Project Server license keys being provided on the Volume Licensing Center in May 2016, Project Server licenses are still separate and additive to SharePoint Enterprise features; and I have heard no plans to the contrary. So even though Project Server 2016 functionality is included in the SharePoint 2016 installation media; its license is still separate.
If you install SharePoint 2016 and try to create a Project Server based site collection, you’ll probably wind up with an error message stating:
The farm does not have a product key for Project Server. You can add your key by using Enable-ProjectServerLicense
Below is the step by step process to activate Project Server 2016 in a SharePoint 2016 environment. Note that you will need a Project Server key in order to perform this process. This is not the same as the SharePoint 2016 RTM trial key. You will need to grab a Project Server 2016 key from your MSDN, TechNet, or a trial key for this. At the time of writing this blog, there are some keys available at https://social.technet.microsoft.com/Forums/en-US/3bbdb4b0-7240-4d92-90bd-cb78fccd437f/project-server-2016-preview-requires-the-farm-to-have-a-valid-sharepoint-server-enterprise-product?forum=SP2016, but I cannot vouch as towards their source, or if they are trial or otherwise restricted. This process, unlike most SharePoint processes when it comes to licenses, are a one-way-trip, so I would not recommend performing this without ensuring your organization is properly licensed for SharePoint 2016 Enterprise, Project Server 2016, and all of the various other components necessary. If you ever need to disable this license, you can execute a “Disable-ProjectServerLicense” cmdlet to back out this functionality on your farm.
Enabling the Project Web App License
You will need to grab a Project Server 2016 key from your MSDN, TechNet, or a trial key for this. At the time of writing this blog, there are some keys available at https://social.technet.microsoft.com/Forums/en-US/3bbdb4b0-7240-4d92-90bd-cb78fccd437f/project-server-2016-preview-requires-the-farm-to-have-a-valid-sharepoint-server-enterprise-product?forum=SP2016, but I cannot vouch as towards their source, or if they are trial or otherwise restricted. This process, unlike most SharePoint processes when it comes to licenses, are a one-way-trip, so I would not recommend performing this without ensuring your organization is properly licensed for SharePoint 2016 Enterprise, Project Server 2016, and all of the various other components necessary. If you ever need to disable this license, you can execute a “Disable-ProjectServerLicense” cmdlet to back out this functionality on your farm.
From UAC’ed, SharePoint Administration PowerShell context, execute the following PowerShell:
Enable-ProjectServerLicense –Key “insert the key here”
Creating the Project Server Service Application and Starting the Service
If you want to do things the easy way, you can provision this Service Application through Central Administration.
- Click on “Application Management” and then “Manage Service Applications”
- Click “New” and select “Project Server Service Application”
- Wait a few minutes, and your service application will display on your service application page.
- Click on “System Settings” and “Manage Services on Server”
- Click “Start” next to the “Project Server Service” on the servers you wish to run this service. In a production instance, you will normally want this running on “batch” or “application” servers, in a redundant fashion.
If you prefer to utilize a PowerShell, you can create the Service Application through a scripted process as well:
$appPool = Get-SPServiceApplicationPool "SharePoint Web Services" #insert your standard Service Application app pool host name here
$pssa = New-SPProjectServiceApplication -Name "Project Server Service Application" -ApplicationPool $appPool –Proxy
Get-SPServiceInstance -Server "servernamehere" | ? {$_.TypeName -eq "Project Server Application Service"} | Start-SPServiceInstance
You’ll notice that when you click inside of this service application, there isn’t much to worry about here. You’ll essentially just see a view of Project Web Apps’' configured in the farm.
Creating the Project Web App Site Collection
Once you have the service application configured, you will now need to create a location for the Project Web App to be hosted. Just like in prior versions of Project Server, you can create as many Project Web App site collections as necessary in your farm (although I’m sure there’s some application boundary out there somewhere…). I would generally recommend creating PWA on a PWA-specific site collection; this is not something you want to clutter up a standard team site or intranet site collection with.
Project Server 2016 appears to not display the normal “Project Web App” site collection template through the UI even after activating the license, so you must provision the site collection via PowerShell with the New-SPSite cmdlet. The PWA site collection template is “pwa#0”:
New-SPSite -ContentDatabase “WSS_Content_PWA” –Template “pwa#0” -Name “Project Web App” -OwnerAlias “domain\username”
Once created, you’ll want to enable the below site collection features either through the UI or through PowerShell as you may prefer:
Site Collection Features
- SharePoint Server Enterprise Site Collection features (8581a8a7-cf16-4770-ac54-260265ddb0b2)
- Project Web App Settings (697c64b9-3dff-4981-9394-0a62632120ec)
- Project Web App Ribbon (1d253548-c70d-40fd-9930-9d313bedc359) – this should be automatically triggered in the prior feature, but will sometimes fail
- Project Web App Approval Content Type (ad739f9e-1525-4dec-a25e-10821ca70c95) - this should be automatically triggered in the prior feature, but will sometimes fail.
More often than not, you’re going to want to enable Project Server Permissions mode, which allows for Project Server 2016 to better match a PMO-language security model rather than requiring SharePoint based permissions. If that’s the case, you will want to run this PowerShell:
Set-SPProjectPermissionMode -Url “insert pwa site collection URL here” -Mode ProjectServer
And there you have it, Project Server is now up and running in your environment! Isn’t it beautiful? Now come the fun part, of actually getting it working. I’d recommend starting off with finalizing a permission model and configuring the Resource import process; but that’s a post for another day…
Common Errors and Troubleshooting
Issue 1:
When Activating a site collection level feature, a ULS error will be logged with the following:
[bucketHash:DC81E9B8] Exception while running Exec Service. Service Name: 'ProjectQueueService16', Exec Path: 'C:\Program Files\Microsoft Office Servers\16.0\Bin\Microsoft.Office.Project.Server.Queuing.exe', Exception: 'There is already a listener on IP endpoint 0.0.0.0:16002. This could happen if there is another application already listening on this endpoint or if you have multiple service endpoints in your service host with the same IP endpoint but with incompatible binding configurations.' Exception details follow. Type: 'System.ServiceModel.AddressAlreadyInUseException', message: 'There is already a listener on IP endpoint 0.0.0.0:16002. This could happen if there is another application already listening on this endpoint or if you have multiple service endpoints in your service host w...
Monitorable ...ith the same IP endpoint but with incompatible binding configurations.' and stack trace: at System.ServiceModel.Channels.SocketConnectionListener.Listen() at System.ServiceModel.Channels.ExclusiveTcpTransportManager.OnOpen() at System.ServiceModel.Channels.TransportManager.Open(TransportChannelListener channelListener) at System.ServiceModel.Channels.TransportManagerContainer.Open(SelectTransportManagersCallback selectTransportManagerCallback) at System.ServiceModel.Channels.TransportChannelListener.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.ConnectionOrientedTransportChannelListener.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.TcpChannelListener`2.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(Tim...
Monitorable ...eSpan timeout) at System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at Microsoft.Office.Project.Server.Services.QueueExecService..ctor(String serviceName, Guid sspGuid, String namedEvent, Int32 parentProcessId) at Microsoft.Office.Project.Server.Services.QueueServiceInfo.GetExecServiceToRun(String serviceName, Guid sspGuid, String namedEvent, Int32 parentProcessId) at Microsoft.Office.Project.Server.Services.ServiceProgram.Run(String[] args) Exception while running Exec Service. Service Name: 'ProjectQueueService16', Exec Path:'C:\Program Files\Microsoft Office Servers\16.0\Bin\Microsoft.Office.Project.Server.Queuing.exe', Exception: 'There is already a listener on IP endpoint 0.0.0.0:16002. This could happen if there is another application already listening on this endpoint or if you have multiple service endpoints in your service host with the same IP endpoint but with incompatible binding configurations.'
Exception while running Exec Service. Service Name: 'ProjectQueueService16', Exec Path: 'C:\Program Files\Microsoft Office Servers\16.0\Bin\Microsoft.Office.Project.Server.Queuing.exe', Exception: 'There is already a listener on IP endpoint 0.0.0.0:16002. This could happen if there is another application already listening on this endpoint or if you have multiple service endpoints in your service host with the same IP endpoint but with incompatible binding configurations.'
[bucketHash:0064CAE8] [SERVICE] 'ProjectQueueService16': Exception during AppDomainCompleteCallback for App Domain 'ProjectQueueService16 Project Server Service Application 2 882cf640-b2cc-4b7d-a922-c0a16f66b10e', exception 'There is already a listener on IP endpoint 0.0.0.0:16002. This could happen if there is another application already listening on this endpoint or if you have multiple service endpoints in your service host with the same IP endpoint but with incompatible binding configurations.' Exception details follow. Type: 'System.ServiceModel.AddressAlreadyInUseException', message: 'There is already a listener on IP endpoint 0.0.0.0:16002. This could happen if there is another application already listening on this endpoint or if you have multiple service endpoints in your service h...
Monitorable ...ost with the same IP endpoint but with incompatible binding configurations.' and stack trace: Server stack trace: at System.ServiceModel.Channels.SocketConnectionListener.Listen() at System.ServiceModel.Channels.ExclusiveTcpTransportManager.OnOpen() at System.ServiceModel.Channels.TransportManager.Open(TransportChannelListener channelListener) at System.ServiceModel.Channels.TransportManagerContainer.Open(SelectTransportManagersCallback selectTransportManagerCallback) at System.ServiceModel.Channels.TransportChannelListener.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.ConnectionOrientedTransportChannelListener.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.TcpChannelListener`2.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at Microsoft.Office.Project.Server.Services.QueueExecService..ctor(String serviceName, Guid sspGuid, String namedEvent, Int32 parentProcessId) at Microsoft.Office.Project.Server.Services.QueueServiceInfo.GetExecServiceToRun(String serviceName, Guid sspGuid, String namedEvent, Int32 parentProcessId) at Microsoft.Office.Project.Server.Services.ServiceProgram.Run(String[] args) at Microsoft.Office.Project.Server.Services.QueueService.Main(String[] args) at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, String[] args) at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs) at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at Microsoft.Office.Project.Server.Services.ExecProcess.AsyncExecuteAssembly.EndInvoke(IAsyncResult result) at Microsoft.Office.Project.Server.Services.ExecProcess.AppDomainCompleteCallback(IAsyncResult asyncResult) [SERVICE] 'ProjectQueueService16': Exception during AppDomainCompleteCallback for App Domain 'ProjectQueueService16 Project Server Service Application 2 882cf640-b2cc-4b7d-a922-c0a16f66b10e', exception 'There is already a listener on IP endpoint 0.0.0.0:16002. This could happen if there is another application already listening on this endpoint or if you have multiple service endpoints in your service host with the same IP endpoint but with incompatible binding configurations.'
Error during Service Application Domain Callback. Service Name: 'ProjectQueueService16', AppDomain: 'ProjectQueueService16 Project Server Service Application 2 882cf640-b2cc-4b7d-a922-c0a16f66b10e', Exception: 'There is already a listener on IP endpoint 0.0.0.0:16002. This could happen if there is another application already listening on this endpoint or if you have multiple service endpoints in your service host with the same IP endpoint but with incompatible binding configurations.'
[SERVICE] ProjectQueueService16: ProcessWatcher signaled deb50447-52ea-e511-a380-000d3a713930
[SERVICE] ProjectQueueService16: ProcessWatcher restarting service for service app Project Server Service Application 2, id 882cf640-b2cc-4b7d-a922-c0a16f66b10e, service name ProjectQueueService16 deb50447-52ea-e511-a380-000d3a713930
The application domain ProjectQueueService16 Project Server Service Application 2 882cf640-b2cc-4b7d-a922-c0a16f66b10e is unloading and going to be recycled.
Resolution 1:
Confirm you only have one Project Server Service Application bound to the proxy group you have on your web application. You can have more than one Project Server Service Application, but there can only be one per web app proxy binding.
Issue 2:
Failed to get [Admin] access level connection string because current user is not an administrator on the farm (database name=[SP13RTM_WSS_Content], Id=f0061954-b15c-4870-b292-c0d6bb47ffd2, server name=spsql) eda6689d-8b18-40bd-ac3a-fa8dd58dd367
Feature receiver assembly 'Microsoft.Office.Project.Server.Administration, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c', class 'Microsoft.Office.Project.Server.Administration.ProvisionFeatureEventHandler', method 'FeatureActivated' for feature '697c64b9-3dff-4981-9394-0a62632120ec' threw an exception: System.InvalidOperationException: Only Administrator users can obtain the connection string for [Admin] access level at Microsoft.Office.Project.Server.Administration.ProjectContentDatabase.GetConnectionString(DatabaseAccessLevel accessLevel) at Microsoft.Office.Project.Server.DataAccessLayer.SqlSessionManager.GetSession(IProjectDataStorage projectDataStorage, Guid siteAffinity, DatabaseAccessLevel databaseAccessLevel, Int32 sqlCommandTimeoutSeconds) at Micr... eda6689d-8b18-40bd-ac3a-fa8dd58dd367
03/15/2016 03:11:43.10* w3wp.exe (0x1A98) 0x0D5C SharePoint Foundation Feature Infrastructure 88jm High ...osoft.Office.Project.Server.Administration.ProjectDatabaseConfiguration.Populate(IProjectDataStorage projectDataStorage, Int32 lcid, Guid siteId) at Microsoft.Office.Project.Server.Administration.ProvisionFeatureEventHandler.FeatureActivated(SPFeatureReceiverProperties properties) at Microsoft.SharePoint.SPFeature.DoActivationCallout(Boolean fActivate, Boolean fForce) eda6689d-8b18-40bd-ac3a-fa8dd58dd367
Feature Activation: Threw an exception, attempting to roll back. Feature 'PWASite' (ID: '697c64b9-3dff-4981-9394-0a62632120ec'). Exception: System.InvalidOperationException: Only Administrator users can obtain the connection string for [Admin] access level at Microsoft.Office.Project.Server.Administration.ProjectContentDatabase.GetConnectionString(DatabaseAccessLevel accessLevel) at Microsoft.Office.Project.Server.DataAccessLayer.SqlSessionManager.GetSession(IProjectDataStorage projectDataStorage, Guid siteAffinity, DatabaseAccessLevel databaseAccessLevel, Int32 sqlCommandTimeoutSeconds) at Microsoft.Office.Project.Server.Administration.ProjectDatabaseConfiguration.Populate(IProjectDataStorage projectDataStorage, Int32 lcid, Guid siteId) at Microsoft.Office.Project.Server...
Resolution 2:
The account enabling this feature must be a “named” farm administrator. Being a Local Administrator on the SharePoint Server(s), and having Local Administrators in the Farm Administrator group will fail if you are running these commands from a remote desktop or in a non-UAC’ed IE session while on the server. Adding your user account directly to the Farm Administrators group will resolve this issue, or logging in as a Farm Account and executing the Feature Activation command from a UAC’ed PowerShell should resolve this issue: