CORRECÇÃO: É accionada uma excepção de System.NotSupportedException quando executa um IIS hospedado serviço WCF que utiliza um certificado de cliente para autenticação de SSL

Aplica-se a: .NET Framework 3.5 Service Pack 1

Sintomas


Considere o seguinte cenário:
  • Criar um serviço do Windows Communication Foundation (WCF) que é alojado no Internet Information Services (IIS).
  • Utilize a classe de WebScriptEnablingBehavior no serviço WCF.
  • Configurar o serviço WCF para utilizar um certificado de cliente para autenticação de camada segura de Sockets (SSL). Para tal, definiu a propriedade ClientCredentialType no ficheiro Web. config ao certificado.
Neste cenário, quando executar o serviço WCF, é accionada uma excepção de System.NotSupportedException e recebe uma mensagem de erro semelhante à seguinte:
As definições de SSL para o serviço de 'Nenhum' não correspondem do IIS 'Ssl, SslNegotiateCert, SslRequireCert, SslMapCert, Ssl128'.

Causa


Este problema ocorre porque algumas propriedades da instância HttpTransportBindingElement não são copiadas para os pontos finais de proxy de javascript gerado automaticamente.

Resolução


Agora tem uma correcção suportada disponível na Microsoft. Contudo, destina-se apenas a corrigir o problema descrito neste artigo. Aplique-a apenas em sistemas que tenham este problema específico.

Para resolver este problema, contacte o suporte técnico da Microsoft para obter a correcção. Para obter uma lista completa dos números de telefone do suporte técnico da Microsoft e informações sobre os custos de suporte, visite o seguinte Web site da Microsoft:Nota Em casos especiais, os custos normalmente inerentes às chamadas de suporte poderão ser anulados se um técnico de suporte da Microsoft determinar que uma actualização específica resolverá o problema. Os custos de normais do suporte serão aplicados a questões de suporte adicionais e problemas que não se enquadrem na atualização específica em questão.

Pré-requisitos

Tem de ter o .NET Framework 3.5 Service Pack 1 (SP1) instalado para aplicar esta correcção.

Requisito de reinício

Não é necessário reiniciar o computador depois de instalar a correcção.

Informações sobre substituição da correção

Esta correcção não substitui quaisquer outras correcções.
A versão inglesa desta correcção tem os atributos de ficheiro (ou atributos de ficheiro posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são listadas na hora Universal Coordenada (UTC). Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador Fuso horário no item data e hora no painel de controlo.
versão baseada em x86 para Windows Server 2000, Windows Server 2003 e Windows XP
Nome do ficheiroVersão do ficheiroTamanho do ficheiroDataHoraPlataforma
System.servicemodel.web.dll3.5.594.4152569,34422-Jul-200901:51x86

versão baseada em x64 para Windows Server 2000, Windows Server 2003 e Windows XP
Nome do ficheiroVersão do ficheiroTamanho do ficheiroDataHoraPlataforma
System.servicemodel.web.dll3.5.594.4152491,52022-Jul-200902:13x64

Versão baseada em Itanium para Windows Server 2000, Windows Server 2003 e Windows XP
Nome do ficheiroVersão do ficheiroTamanho do ficheiroDataHoraPlataforma
System.servicemodel.web.dll3.5.594.4152491,52022-Jul-200902:26IA-64

Estado


A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a".

Solução alternativa


Para contornar este problema, por conta própria do anfitrião do serviço WCF em vez de anfitrião do serviço no IIS.

Mais informações


Informações de estado da pilha

System.ServiceModel.dll!System.ServiceModel.Channels.HttpsChannelListener.ApplyHostedContext(System.ServiceModel.Activation.VirtualPathExtension virtualPathExtension, bool isMetadataListener) + 0x1b7 bytes    

System.ServiceModel.dll!System.ServiceModel.Channels.HttpsTransportBindingElement.BuildChannelListener<System.__Canon>(System.ServiceModel.Channels.BindingContext context) + 0x69 bytes

System.ServiceModel.dll!System.ServiceModel.Channels.BindingContext.BuildInnerChannelListener<System.__Canon>() + 0x5f bytes

System.ServiceModel.dll!System.ServiceModel.Channels.MessageEncodingBindingElement.InternalBuildChannelListener<System.__Canon>(System.ServiceModel.Channels.BindingContext context) + 0x66 bytes

System.ServiceModel.Web.dll!System.ServiceModel.Channels.WebScriptMetadataMessageEncodingBindingElement.BuildChannelListener<System.__Canon>(System.ServiceModel.Channels.BindingContext context) + 0x4b bytes

System.ServiceModel.dll!System.ServiceModel.Channels.BindingContext.BuildInnerChannelListener<System.__Canon>() + 0x5f bytes

System.ServiceModel.dll!System.ServiceModel.Channels.Binding.BuildChannelListener<System.__Canon>(System.Uri listenUriBaseAddress, string listenUriRelativeAddress, System.ServiceModel.Description.ListenUriMode listenUriMode, System.ServiceModel.Channels.BindingParameterCollection parameters) + 0xa6 bytes

System.ServiceModel.dll!System.ServiceModel.Channels.Binding.BuildChannelListener<System.__Canon>(System.Uri listenUriBaseAddress, System.ServiceModel.Channels.BindingParameterCollection parameters) + 0x7c bytes

System.ServiceModel.Web.dll!System.ServiceModel.Description.WebScriptEnablingBehavior.AddMetadataEndpoint(System.ServiceModel.Description.ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher, bool debugMode) + 0x698 bytes

System.ServiceModel.Web.dll!System.ServiceModel.Description.WebScriptEnablingBehavior.ApplyDispatchBehavior(System.ServiceModel.Description.ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher) + 0x60 bytes