Implantando um serviço WCF hospedado pelos Serviços de Informações da Internet
O desenvolvimento e a implantação de um serviço WCF (Windows Communication Foundation) hospedado no IIS (Serviços de Informações da Internet) consiste nas seguintes tarefas:
Verifique se o IIS, o ASP.NET, o WCF e o componente de ativação do WCF estão instalados e registrados corretamente.
Crie um novo aplicativo do IIS ou reutilize um aplicativo ASP.NET existente.
Crie um arquivo .svc para o serviço WCF.
Implante a implementação do serviço no aplicativo IIS.
Configure o serviço WCF.
Para obter um passo a passo detalhado sobre como criar um serviço WCF hospedado no IIS, consulte Como hospedar um serviço WCF no IIS.
Verifique se o IIS, o ASP.NET e o WCF estão corretamente instalados e registrados
WCF, IIS e ASP.NET devem ser instalados para que os serviços WCF hospedados no IIS funcionem corretamente. Os procedimentos para instalar o WCF (como parte do .NET Framework), o ASP.NET e o IIS variam dependendo do seu sistema operacional. Para obter mais informações sobre como instalar o WCF e o .NET Framework, consulte Instalar o .NET Framework para desenvolvedores. Para instalar o IIS no Windows 10, abra Programas e Recursos no Painel de Controle e selecione Ativar ou desativar recursos do Windows. Em Recursos do Windows, selecione Serviços de Informações da Internet e escolha OK.
Instruções para instalar o IIS em outros sistemas operacionais podem ser encontradas em Instalar o IIS no Windows Vista e Windows 7 e Instalar o IIS 8.5 no Windows Server 2012 R2.
O processo de instalação do .NET Framework registra automaticamente o WCF com o IIS se o IIS já estiver presente no computador. Se o IIS for instalado após o .NET Framework, uma etapa adicional será necessária para registrar o WCF com o IIS e o ASP.NET. Você pode fazer isso da seguinte maneira, dependendo do seu sistema operacional:
Windows 7 e Windows Server 2003: Use a ferramenta ServiceModel Registration Tool (ServiceModelReg.exe) para registrar o WCF no IIS. Para usar essa ferramenta, digite
ServiceModelReg.exe /i /x
Visual Studio Developer Command Prompt ou Visual Studio Developer PowerShell.Windows 7: Finalmente, você deve verificar se ASP.NET está configurado para usar o .NET Framework versão 4 ou posterior. Para fazer isso, execute a ferramenta ASPNET_Regiis com a
–i
opção. Para obter mais informações, consulte ASP.NET Ferramenta de Registro do IIS.
Criar um novo aplicativo do IIS ou reutilizar um aplicativo ASP.NET existente
Os serviços WCF hospedados no IIS devem residir dentro de um aplicativo IIS. Você pode criar um novo aplicativo IIS para hospedar serviços WCF exclusivamente. Como alternativa, você pode implantar um serviço WCF em um aplicativo existente que já esteja hospedando conteúdo ASP.NET 2.0 (como páginas .aspx e serviços Web ASP.NET [ASMX]). Para obter mais informações sobre essas opções, consulte as seções "Hospedando WCF lado a lado com ASP.NET" e "Hospedando serviços WCF no modo de compatibilidade ASP.NET" em Serviços e ASP.NET WCF.
Observe que o IIS 6.0 e versões posteriores reiniciam periodicamente um aplicativo de programação orientado a objeto isolado. O valor padrão é 1740 minutos. O valor máximo suportado é de 71.582 minutos. Esta reinicialização pode ser desativada. Para obter mais informações sobre essa propriedade, consulte PeriodicRestartTime.
Criar um arquivo .svc para o serviço WCF
Os serviços WCF hospedados no IIS são representados como arquivos de conteúdo especiais (arquivos .svc) dentro do aplicativo IIS. Esse modelo é semelhante à maneira como as páginas ASMX são representadas dentro de um aplicativo do IIS como arquivos .asmx. Um arquivo .svc contém uma diretiva de processamento específica do WCF (@ServiceHost) que permite que a infraestrutura de hospedagem do WCF ative serviços hospedados em resposta a mensagens recebidas. A sintaxe mais comum para um arquivo .svc está na instrução a seguir.
<% @ServiceHost Service="MyNamespace.MyServiceImplementationTypeName" %>
Consiste na diretiva @ServiceHost e num único atributo, Service
. O valor do Service
atributo é o nome do tipo CLR (Common Language Runtime) da implementação do serviço. Usar esta diretiva é basicamente equivalente a criar um host de serviço usando o código a seguir.
new ServiceHost( typeof( MyNamespace.MyServiceImplementationTypeName ) );
Configuração de hospedagem adicional, como a criação de uma lista de endereços base para o serviço também pode ser feita. Você também pode usar um personalizado ServiceHostFactory para estender a diretiva para uso com soluções de hospedagem personalizadas. Os aplicativos do IIS que hospedam serviços WCF não são responsáveis por gerenciar a criação e o tempo de vida das ServiceHost instâncias. A infraestrutura de hospedagem gerenciada do WCF cria a instância necessária ServiceHost dinamicamente quando a primeira solicitação é recebida para o arquivo .svc. A instância não é liberada até que seja fechada explicitamente por código ou quando o aplicativo é reciclado.
Para obter mais informações sobre a sintaxe dos arquivos .svc, consulte @ServiceHost.
Implantar a implementação do serviço no aplicativo IIS
Os serviços WCF hospedados no IIS usam o mesmo modelo de compilação dinâmica do ASP.NET 2.0. Assim como no ASP.NET, você pode implantar o código de implementação para serviços WCF hospedados no IIS de várias maneiras em vários locais, da seguinte maneira:
Como um arquivo de .dll pré-compilado localizado no cache de assembly global (GAC) ou no diretório \bin do aplicativo. Os binários pré-compilados não são atualizados até que uma nova versão da biblioteca de classes seja implantada.
Como arquivos de origem não compilados localizados no diretório \App_Code do aplicativo. Os arquivos de origem localizados neste diretório são dinamicamente necessários ao processar a primeira solicitação do aplicativo. Quaisquer alterações nos arquivos no diretório \App_Code fazem com que todo o aplicativo seja reciclado e recompilado quando a próxima solicitação for recebida.
Como código não compilado colocado diretamente no arquivo .svc. O código de implementação também pode ser localizado em linha no arquivo .svc do serviço, após a diretiva @ServiceHost. Quaisquer alterações no código embutido fazem com que o aplicativo seja reciclado e recompilado quando a próxima solicitação for recebida.
Para obter mais informações sobre o modelo de compilação do ASP.NET 2.0, consulte Visão geral da compilação ASP.NET.
Configurar o serviço WCF
Os serviços WCF hospedados no IIS armazenam sua configuração no arquivo Web.config de aplicativos. Os serviços hospedados no IIS usam os mesmos elementos de configuração e sintaxe que os serviços WCF hospedados fora do IIS. No entanto, as seguintes restrições são exclusivas para o ambiente de hospedagem do IIS:
Endereços base para serviços hospedados no IIS.
Os aplicativos que hospedam serviços WCF fora do IIS podem controlar o endereço base dos serviços que hospedam passando um conjunto de URIs de endereço base para o ServiceHost construtor ou fornecendo um <elemento de host> na configuração do serviço. Os serviços hospedados no IIS não têm a capacidade de controlar seu endereço base; o endereço base de um serviço hospedado no IIS é o endereço de seu arquivo .svc.
Endereços de ponto de extremidade para serviços hospedados no IIS
Quando hospedados no IIS, os endereços de ponto de extremidade são sempre considerados relativos ao endereço do arquivo .svc que representa o serviço. Por exemplo, se o endereço base de um serviço WCF estiver http://localhost/Application1/MyService.svc
com a seguinte configuração de ponto de extremidade:
<endpoint address="anotherEndpoint" />
Isso fornece um ponto de extremidade que pode ser alcançado em http://localhost/Application1/MyService.svc/anotherEndpoint
.
Da mesma forma, o elemento de configuração do ponto de extremidade que usa uma cadeia de caracteres vazia como o endereço relativo fornece um ponto de extremidade acessível em http://localhost/Application1/MyService.svc
, que é o endereço base.
<endpoint address="" />
Você sempre deve usar endereços de ponto de extremidade relativos para pontos de extremidade de serviço hospedados no IIS. O fornecimento de um endereço de ponto de extremidade totalmente qualificado (por exemplo, http://localhost/MyService.svc
) pode levar a erros na implantação do serviço se o endereço do ponto de extremidade não apontar para o aplicativo IIS que hospeda o serviço expondo o ponto de extremidade. O uso de endereços de ponto de extremidade relativos para serviços hospedados evita esses conflitos potenciais.
Transportes Disponíveis
Os serviços WCF hospedados no IIS 5.1 e no IIS 6.0 estão restritos ao uso de comunicação baseada em HTTP. Nessas plataformas IIS, configurar um serviço hospedado para usar uma associação não-HTTP resulta em um erro durante a ativação do serviço. Para o IIS 7.0, os transportes suportados incluem HTTP, Net.TCP, Net.Pipe, Net.MSMQ e msmq.formatname para compatibilidade com versões anteriores com aplicativos MSMQ existentes.
Segurança de Transporte HTTP
Os serviços WCF hospedados no IIS podem usar a segurança de transporte HTTP (por exemplo, esquemas de autenticação HTTPS e HTTP, como Autenticação Básica, Digest e Integrada do Windows), desde que o diretório virtual do IIS que contém o serviço ofereça suporte a essas configurações. As configurações de Segurança de Transporte HTTP na associação de um ponto de extremidade hospedado devem corresponder às configurações de segurança de transporte no diretório virtual do IIS que o contém.
Por exemplo, um ponto de extremidade WCF configurado para usar a autenticação digest HTTP deve residir em um diretório virtual do IIS que também esteja configurado para permitir a autenticação digest HTTP. Combinações incomparáveis de configurações do IIS e configurações de ponto de extremidade WCF resultam em um erro durante a ativação do serviço.