Configurando serviço WCF para o TCP

08/03/2018

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:

Web01

Abra o IIS (execute inetmgr), e habilite o protocolo net.tcp na Web Application. Ficando assim:

Web03-1

Faça o mesmo para cada Web Site. Defina os Protocolos Habilitados como http,net.tcp.

Web03

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:

Web05

<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>