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”.

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 difere em ambiente de produção. Maiores detalhes são explicados por Tom Fuller neste post.