Hospedando um serviço WCF no WAS - Windows Process Activation Services

Dando continuidade à nossa série de posts sobre serviços WCF, chegamos ao último post sobre o tópico de hospedagem. Hoje vamos falar sobre como hospedar serviços WCF no WAS - Windows Process Activation Services.

O WAS é um modelo de hospedagem de serviços WCF e está disponível à partir do Windows Vista e Windows Server 2008. Ele generaliza o modelo de funcionamento do IIS removendo a dependência do HTTP e permitindo o uso de outros protocolos, como TCP e MSMQ. Como utiliza o mesmo modelo de funcionamento do IIS, herda suas características, como, escalabilidade e gerenciamento de memória, permitindo a hospedagem de vários serviços e suportando alta carga de requisições.

O primeiro passo é instalar o WAS. Isso é feito habilitando a opção Windows Process Activation Service em Turn Windows Features on or off  do painel de controle, o que pode ser verificado abaixo.

image

Depois de instalar o WAS é necessário hospedar o serviço no IIS, para isto basta seguir os passos do post Hospedando um serviço WCF no IIS.

O próximo passo é habilitar os protocolos de funcionamento, o que é feito com o utilitário de linha de comando AppCmd.exe, que por padrão fica no diretório c:\windows\system32\inetsrv.

Primeiro deve ser habilitado o protocolo no Web site. No exemplo abaixo estou habilitando o funcionamento do protocolo Tcp no Default Web Site.

appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='9090:*']

Em seguida deve-se habilitar o protocolo no Application que o serviço está instalado:

appcmd.exe set app "Default Web Site/WebApplication" /enabledProtocols:http,net.tcp

Agora que temos o serviço hospedado e o protocolo tcp habilitado, precisamos agora configurar os seus endpoints. Eles são do tipo netTcpBinding e mexTcpBinding, onde o primeiro é utilizado para comunicação com protocolo tcp e o outro para consulta do metadados. O seu arquivo web.config deve ficar assim:

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="ServicoWCF.Service1Behavior"
        name="ServicoWCF.CalcService">
        <endpoint address="net.tcp://localhost:9090/WebApplication/CalcService.svc"
          binding="netTcpBinding" contract="ServicoWCF.ICalcService" />
        <endpoint address="net.tcp://localhost:9090/WebApplication/CalcService.svc/mex"
          binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServicoWCF.Service1Behavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Com tudo configurado podemos testar o serviço, para isso devemos executar o WCF Test Client e apontar para o endereço net.tcp://localhost:9090/WebApplication/CalcService.svc, conforme pode ser observado abaixo:

image

Nos próximos posts colocarei o screencast com a demo. Lembrem-se de deixar comentário e até a próxima pessoal!