Desenvolvimento - ASP. NET

WCF Service no IIS

Ao criar um projeto do tipo WCF Service no Visual Studio .NET e, quando finalizar, efetuar o deployment no IIS 6.0, atente-se para o nome do diretório virtual quando você opta por marcar a aplicação como sendo “atualizável”, mais precisamente, quando você desmarca a opção “Allow this precompiled site to be updatable” da janela “Publish Web Site”.

por Israel Aéce



Ao criar um projeto do tipo WCF Service no Visual Studio .NET e, quando finalizar, efetuar o deployment no IIS 6.0, atente-se para o nome do diretório virtual quando você opta por marcar a aplicação como sendo “atualizável”, mais precisamente, quando você desmarca a opção “Allow this precompiled site to be updatable” da janela “Publish Web Site”.

Ao desmarcá-la e o serviço colocado em um diretório virtual com o nome diferente do nome da aplicação, a seguinte exceção será lançada:

Exception: System.ServiceModel.ServiceActivationException: The service "/WCF/Service.svc" cannot be activated due to an exception during compilation. The exception message is: Value cannot be null.
Parameter name: key. ---> System.ArgumentNullException: Value cannot be null.
Parameter name: key
at System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
at System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value)
at System.ServiceModel.Activation.MetabaseSettingsIis.GetTransportSettings(String virtualPath)
at System.ServiceModel.Activation.MetabaseSettingsIis.GetAccessSslFlags(String virtualPath)
at System.ServiceModel.Activation.HttpHostedTransportConfiguration.GetBaseAddresses(String virtualPath)
at System.ServiceModel.Activation.HostedTransportConfigurationManager.InternalGetBaseAddresses(String virtualPath)
at System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService(String normalizedVirtualPath)
at System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(String normalizedVirtualPath)
at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath)


Ao desmarcar esta opção, permitindo que o site seja “atualizável”, então não teremos problemas. Tudo isso se deve ao fato de que quando efetuamos a pré-compilação, o .NET embuti o nome da aplicação como sendo o nome do diretório virtual, o que muitas vezes difereem ambiente de produção. Maiores detalhes são explicados por Tom Fuller neste post.
Israel Aéce

Israel Aéce - Especialista em tecnologias de desenvolvimento Microsoft, atua como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. Como instrutor Microsoft, leciona sobre o desenvolvimento de aplicações .NET. É palestrante em diversos eventos Microsoft no Brasil e autor de diversos artigos que podem ser lidos a partir de seu site http://www.israelaece.com/. Possui as seguintes credenciais: MVP (Connected System Developer), MCP, MCAD, MCTS (Web, Windows, Distributed, ASP.NET 3.5, ADO.NET 3.5, Windows Forms 3.5 e WCF), MCPD (Web, Windows, Enterprise, ASP.NET 3.5 e Windows 3.5) e MCT.