Configurando o Serviço de Ativação de Processos do Windows para uso com o Windows Communication Foundation
Este tópico descreve as etapas necessárias para configurar o Serviço de Ativação de Processos do Windows (também conhecido como WAS) no Windows Vista para hospedar serviços do Windows Communication Foundation (WCF) que não se comunicam por protocolos de rede HTTP. As seções a seguir descrevem as etapas para essa configuração:
Instale (ou confirme a instalação de) os componentes de ativação do WCF necessários.
Crie um site WAS com as ligações de protocolo de rede que deseja usar ou adicione uma nova ligação de protocolo a um site existente.
Crie um aplicativo para hospedar seus serviços e habilite esse aplicativo para usar os protocolos de rede necessários.
Crie um serviço WCF que exponha um ponto de extremidade não-HTTP.
Configurando um site com ligações não-HTTP
Para usar uma associação não-HTTP com o WAS, a associação de site deve ser adicionada à configuração do WAS. O repositório de configuração do WAS é o arquivo applicationHost.config, localizado no diretório %windir%\system32\inetsrv\config. Esse repositório de configuração é compartilhado pelo WAS e pelo IIS 7.0.
applicationHost.config é um arquivo de texto XML que pode ser aberto com qualquer editor de texto padrão (como o Bloco de Notas). No entanto, a ferramenta de configuração de linha de comando (appcmd.exe) do IIS 7.0 é a maneira preferida de adicionar associações de site não HTTP.
O comando a seguir adiciona uma ligação de site net.tcp ao site padrão usando appcmd.exe (este comando é inserido como uma única linha).
appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='808:*']
Este comando adiciona a nova ligação net.tcp ao site padrão adicionando a linha indicada abaixo ao arquivo applicationHost.config.
<sites>
<site name="Default Web Site" id="1">
<bindings>
<binding protocol="HTTP" bindingInformation="*:80:" />
//The following line is added by the command.
<binding protocol="net.tcp" bindingInformation="808:*" />
</bindings>
</site>
</sites>
Habilitando um aplicativo para usar protocolos não-HTTP
Você pode habilitar ou desabilitar protocolos de rede individuais no nível do aplicativo. O comando a seguir ilustra como habilitar os protocolos HTTP e net.tcp para um aplicativo executado no Default Web Site
.
appcmd.exe set app "Default Web Site/appOne" /enabledProtocols:net.tcp
A lista de protocolos habilitados também pode ser definida no <elemento applicationDefaults> da configuração XML do site armazenada em ApplicationHost.config.
O código XML a seguir de applicationHost.config ilustra um site vinculado a protocolos HTTP e não-HTTP. A configuração adicional necessária para suportar protocolos não-HTTP é destacada com comentários.
<sites>
<site name="Default Web Site" id="1">
<application path="/">
<virtualDirectory path="/" physicalPath="D:\inetpub\wwwroot" />
</application>
<bindings>
<!-- The following two lines are added by the command. -->
<binding protocol="HTTP" bindingInformation="*:80:" />
<binding protocol="net.tcp" bindingInformation="808:*" />
</bindings>
</site>
<siteDefaults>
<logFile
customLogPluginClsid="{FF160663-DE82-11CF-BC0A-00AA006111E0}"
directory="D:\inetpub\logs\LogFiles" />
<traceFailedRequestsLogging
directory="D:\inetpub\logs\FailedReqLogFiles" />
</siteDefaults>
<applicationDefaults
applicationPool="DefaultAppPool"
<!-- The following line is inserted by the command. -->
enabledProtocols="http, net.tcp" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
Se você tentar ativar um serviço usando o WAS para ativação não-HTTP e não tiver instalado e configurado o WAS, poderá ver o seguinte erro:
[InvalidOperationException: The protocol 'net.tcp' does not have an implementation of HostedTransportConfiguration type registered.] System.ServiceModel.AsyncResult.End(IAsyncResult result) +15778592 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +15698937 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) +265 System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +227 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171
Se vir este erro, certifique-se de que o WAS para Ativação Não HTTP está instalado e configurado corretamente. Para obter mais informações, consulte Como instalar e configurar componentes de ativação do WCF.
Criando um serviço WCF que usa o WAS para ativação não-HTTP
Depois de executar as etapas para instalar e configurar o WAS (consulte Como instalar e configurar componentes de ativação do WCF), configurar um serviço para usar o WAS para ativação é semelhante à configuração de um serviço hospedado no IIS.
Para obter instruções detalhadas sobre como criar um serviço WCF ativado pelo WAS, consulte Como hospedar um serviço WCF no WAS.