Reputation: 3951
How can I make IIS handle net.tcp connections?
Upvotes: 66
Views: 100700
Reputation: 32094
You need to add net.tcp
to the enabled protocols of your site. Go to IIS Manager, right-click on your website, go to 'Manage Web Site' or 'Manage Application', then to 'Advanced Settings...'. There you see 'Enabled Protocols'. It probably says http
. Change it to http,net.tcp
.
If you want to configure bindings, right-click on your website and go to 'Edit Bindings...'. The default net.tcp binding is 808:*
.
If you want to use WCF services hosted by IIS behind net.tcp, you may also want to check whether you have activated the required Windows Features. Go to your Windows Features and check you have activated 'Windows Communication Foundation Non-HTTP Activation' (found under 'Microsoft .NET Framework 3.5.1').
When you activate this feature, you will get some extra Windows Services. If it still doesn't work, check that the Windows Service named 'Net.Tcp Listener Adapter' is running (it should start automatically but sometimes it doesn't and this is the first place I check when one of my net.tcp
services stops working).
Upvotes: 129
Reputation: 3097
In my case, I had to add the net.tcp protocol not only to the website, but to the application below it (right-click the application, advanced settings, enabled protocols).
Upvotes: 0
Reputation: 1207
The last step worked for me.
Upvotes: 7
Reputation: 177
This might help someone in the future. I created a powershell
script that will come in useful if you need to automate the creation of the bindings.
It will automatically check if the binding exists already and only add it when required.
Actual Script
Import-Module WebAdministration
$websites = Get-ChildItem 'IIS:\Sites'
$site = $websites | Where-object { $_.Name -eq 'Default Web Site' }
$netTcpExists = [bool]($site.bindings.Collection | ? { $_.bindingInformation -eq '808:*' -and $_.protocol -eq 'net.tcp' })
if (!$netTcpExists)
{
Write-Output "Net TCP binding does not exist. Creating binding now..."
# Create the binding
New-ItemProperty 'IIS:\Sites\Default Web Site' -name bindings -Value @{protocol="net.tcp";bindingInformation="808:*"}
Write-Output "Binding created"
}
else
{
Write-Output "TCP Binding already exists"
}
Write-Output "Updating enabled protocols..."
Set-ItemProperty 'IIS:\sites\Default Web Site' -name EnabledProtocols -Value "http,net.tcp"
Write-Output "Enabled protocols updated"
Upvotes: 8