Para instalar os principais componentes do IIS e os recursos para suporte ao TCP no WCF, abra o prompt de comando (como administrador) e execute:
Dism.exe /online /Enable-Feature /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-ApplicationDevelopment /FeatureName:IIS-Security /FeatureName:IIS-RequestFiltering /FeatureName:IIS-NetFxExtensibility /FeatureName:WAS-WindowsActivationService /FeatureName:WAS-ProcessModel /FeatureName:WAS-NetFxEnvironment /FeatureName:WAS-ConfigurationAPI /FeatureName:NetFx3 /FeatureName:WCF-HTTP-Activation /FeatureName:WCF-NonHTTP-Activation
Ou se você já possui o IIS instalado e você somente quer habilitar as features de suporte ao TCP execute:
Dism.exe /online /Enable-Feature /FeatureName:WCF-HTTP-Activation /FeatureName:WCF-NonHTTP-Activation
Execute o comando abaixo para registrar o ASP.NET:
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -iru
E ao final faça um reset do IIS via:
iireset
Neste momento, o IIS foi instalado o suporte ao TCP e ainda precisamos configurar as aplicações para usarem este protocolo. Vamos a um exemplo.
Em uma aplicação Web do Visual Studio, nas configurações de servidor mude para o IIS e crie um diretório virtual:
Abra o IIS (execute inetmgr), e habilite o protocolo net.tcp na Web Application. Ficando assim:
Faça o mesmo para cada Web Site. Defina os Protocolos Habilitados como http,net.tcp.
Estas configurações fazem com que o IIS escute o protocolo TCP na porta 808 (é possível alterar a porta nos bindings do IIS e nos arquivos de configuração depois).
Voltando ao Visual Studio altere o Web.config para as configurações abaixo:
<system.serviceModel> <behaviors> <serviceBehaviors> <behavior name=""> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="false" /> </behavior> </serviceBehaviors> </behaviors> <services> <service name="WcfCaller.Services.HelloWorld"> <endpoint address="" binding="netTcpBinding" contract="WcfCaller.Services.IHelloWorld" /> <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/> <host> <baseAddresses> <add baseAddress="net.tcp://localhost:808/WcfCaller.Services"/> </baseAddresses> </host> </service> </services> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /></system.serviceModel>
Vamos agora adicionar a referência a este serviço no aplicativo cliente. Faça assim:
<system.serviceModel> <bindings> <netTcpBinding> <binding name="NetTcpBinding_IHelloWorld" /> </netTcpBinding> </bindings> <client> <endpoint address="net.tcp://localhost/WcfCaller.Services/HelloWorld.svc" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IHelloWorld" contract="HelloWorld.IHelloWorld" name="NetTcpBinding_IHelloWorld"> <identity> <servicePrincipalName value="DOMAIN/UserName" /> </identity> </endpoint> </client></system.serviceModel>