If you're coming from Windows Server 2012 R2, you'll notice significant changes in how application server components are handled in Windows Server 2016. The traditional "Application Server" role has been restructured into more modular components under the "Windows Process Activation Service" umbrella.
Here's the mapping of your required features from 2012 R2 to 2016:
2012 R2 Feature | 2016 Equivalent
----------------------|-----------------
AS-Incoming-Trans | MSMQ-DCOM
AS-Outgoing-Trans | MSMQ-HTTP
AS-HTTP-Activation | WAS-Process-Model + WAS-Configuration-API
AS-Web-Support | WAS-Process-Model
AS-WAS-Support | WAS-Process-Model + WAS-NET-Environment
The most efficient way to install these components is through PowerShell:
# Install core WAS components
Install-WindowsFeature -Name WAS-Process-Model, WAS-Configuration-API, WAS-NET-Environment
# For transaction support
Install-WindowsFeature -Name MSMQ-DCOM, MSMQ-HTTP
# Verify installation
Get-WindowsFeature | Where-Object {$_.Installed -eq $true} | Select-Object Name,InstallState
For GUI-based installation:
- Open Server Manager
- Navigate to "Add Roles and Features"
- Select "Windows Process Activation Service"
- Check these sub-features:
- Process Model
- Configuration API
- .NET Environment
After installation, test HTTP activation with this sample configuration:
# Create a new application pool
New-WebAppPool -Name "TestAppPool"
# Verify WAS services are running
Get-Service -Name WAS,W3SVC | Format-Table -AutoSize
# Check HTTP activation listener
netsh http show servicestate
When upgrading from 2012 R2 to 2016:
- Back up all applicationHost.config files
- Note any custom WAS settings
- Test in staging environment first
- Consider using Server Core for reduced footprint
If features appear missing:
# Reset feature state
DISM /Online /Cleanup-Image /RestoreHealth
# Alternative installation source
Install-WindowsFeature -Name WAS-Process-Model -Source wim:d:\sources\install.wim:4
For HTTP activation failures, check the Event Viewer under "Windows Logs > System" for WAS-related errors.
Many administrators have noticed the apparent disappearance of the Application Server role GUI installation option in Windows Server 2016. This isn't actually a removal, but rather a reorganization. Microsoft has modularized these components into individual Windows Features that can be installed separately.
Here's how the components map between versions:
- AS-Incoming-Trans: Distributed Transaction Coordinator (DTC) inbound
- AS-Outgoing-Trans: Distributed Transaction Coordinator (DTC) outbound
- AS-HTTP-Activation: HTTP Activation under WCF Services
- AS-Web-Support: .NET Framework 4.6 Features
- AS-WAS-Support: WAS Process Model
The most efficient way to install these components in Server 2016 is through PowerShell:
# Install base WAS features
Install-WindowsFeature WAS -IncludeManagementTools
# For HTTP Activation
Install-WindowsFeature WAS-HTTP-Activation -IncludeManagementTools
# For TCP Activation
Install-WindowsFeature WAS-TCP-Activation -IncludeManagementTools
# For Named Pipe Activation
Install-WindowsFeature WAS-Named-Pipes-Activation -IncludeManagementTools
# For Message Queuing Activation
Install-WindowsFeature WAS-MSMQ-Activation -IncludeManagementTools
# For DTC (replaces AS-Incoming/Outgoing-Trans)
Install-WindowsFeature MSDTC -IncludeManagementTools
After installation, verify the components are properly installed:
Get-WindowsFeature | Where-Object {$_.Installed -eq $true} |
Select-Object Name,InstallState
For HTTP activation configuration (similar to AS-HTTP-Activation):
# Enable HTTP activation for non-admin accounts
netsh http add urlacl url=http://+:80/MyService user=DOMAIN\ServiceAccount
# Configure WAS to support your application
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/sites" -name "." -value @{name='MyService'; physicalPath='C:\MyService'; applicationPool='MyServicePool'}
If you encounter permission issues with WAS:
# Check WAS service account permissions
icacls "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files" /grant "IIS AppPool\DefaultAppPool:(OI)(CI)(RX)"
icacls "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files" /grant "NT AUTHORITY\NETWORK SERVICE:(OI)(CI)(RX)"
For DTC configuration (replacing AS-Incoming-Trans/AS-Outgoing-Trans):
# Configure DTC security
Set-DtcNetworkSetting -AuthenticationLevel Mutual -InboundTransactionsEnabled $true -OutboundTransactionsEnabled $true -RemoteClientAccessEnabled $true
For official Microsoft documentation on these features in Server 2016: