Configurando o Serviço de ativação de processos do Windows (WAS) para utilizar 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 WCF (Windows Communication Foundation) que não se comunicam por protocolos de rede HTTP. As seções a seguir descrevem as etapas para esta configuração:
Faça a instalação (ou confirme a instalação) dos componentes necessários de ativação do WCF.
Crie um site WAS com as associações de protocolo de rede que você deseja usar ou adicione uma nova associação de protocolo a um site existente.
Crie um aplicativo para hospedar seus serviços e permitir que esse aplicativo use os protocolos de rede necessários.
Crie um serviço WCF que exponha um ponto de extremidade não HTTP.
Configurando um site com associações não HTTP
Para usar uma associação não HTTP com WAS, a associação de site deve ser adicionada à configuração WAS. O repositório de configuração para 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.
O 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 do IIS 7.0 (appcmd.exe) é a maneira preferencial de adicionar associações de site não HTTP.
O comando a seguir adiciona uma associação de site net.tcp ao site padrão usando appcmd.exe (esse comando é inserido como uma única linha).
appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='808:*']
Esse comando adiciona a nova associaçã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>
Habilitar 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 que é 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 associado a protocolos HTTP e não HTTP. A configuração adicional necessária para dar suporte a protocolos que não sejam HTTP é chamada 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 WAS para ativação que não seja 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 você vir esse erro, verifique se o WAS para ativação que não seja 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 WAS para ativação que não seja HTTP
Depois de executar as etapas para instalar e configurar o WAS (consulte Como instalar e configurar componentes de ativação do WCF), a configuração um serviço para usar WAS para ativação é semelhante à de um serviço hospedado no IIS.
Para obter instruções detalhadas sobre como criar um serviço WCF ativado por WAS, consulte Como hospedar um serviço WCF no WAS.