CORRECÇÃO: Winhttp.dll faz com que uma fuga de memória ao Windows integrado autenticação falha

Traduções de Artigos Traduções de Artigos
Artigo: 826216 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Quando tenta utilizar um serviço Web a partir de um cliente que utiliza o Microsoft SOAP 3.0, poderá detectar uma fuga de memória.

Nota Verificar este comportamento quando o esquema de autenticação para o objecto de cliente SOAP a autenticação integrada do Windows utilizando o seguinte código:
objSoapClient.ConnectorProperty("WinHTTPAuthScheme") = 2
Nota "objSoapClient" é o nome de um objecto de cliente SOAP.

Causa

O objecto de cliente SOAP utiliza o componente WinHTTP.dll. Se a autenticação integrada do Windows falhar, ocorre uma fuga de memória no componente do WinHTTP.dll e repare o comportamento mencionado na secção "Sintomas".

Resolução

Está disponível a partir da Microsoft uma correcção suportada. No entanto, esta correcção destina-se a corrigir o problema descrito neste artigo. Aplique esta correcção apenas em sistemas que tenham este problema específico.

Se a correcção está disponível para transferência, existe uma secção "denominada transferência de correcção disponível" na parte superior deste artigo da base de dados de conhecimento. Se esta secção não for apresentada, submeta um pedido para o serviço de cliente do Microsoft e suporte para obter a correcção.

Nota Se ocorram problemas adicionais ou se for necessária qualquer resolução de problemas, poderá ter de criar um pedido de assistência separado. Os custos normais do suporte serão aplicados a problemas adicionais e questões de suporte que não se enquadrem esta correcção específica. Para obter uma lista completa dos números de telefone do suporte de cliente do Microsoft ou para criar um pedido serviço separado, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/contactus/?ws=support
Nota O formulário "Transferência de correcção disponível" apresenta os idiomas para a qual a correcção está disponível. Se não vir o idioma, é porque uma correcção não está disponível para esse idioma.A versão inglesa desta tem os atributos de ficheiro (ou posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são indicadas no formato de universal hora (UTC) coordenada Coordinated. 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 na ferramenta Data e hora no painel de controlo.

Sistemas operativos do Microsoft Windows 2000

 

    Date         Time   Version            Size    File name
   --------------------------------------------------------------
   27-Aug-2003  05:22  5.1.2600.1264     310,784  Winhttp.dll      
  
 
				

Microsoft Windows XP Operating Systems

 

      Date         Time   Version            Size    File name
   --------------------------------------------------------------
   21-Aug-2003  05:46  5.1.2600.1264     945,152  Winhttp.dll      
  
  
 
				

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos da Microsoft listados no início deste artigo.

Mais Informação

Passos para reproduzir o comportamento

  1. Inicie o Microsoft Visual Studio NET..
  2. No menu ficheiro , aponte para Novo e, em seguida, clique em projecto .
  3. Clique em Projectos do Visual Basic ou Visual C# Projects em Tipos de projecto e clique em Serviço Web do ASP.NET em modelos .
  4. Nome do projecto SampleWebService .
  5. No ficheiro Service1.asmx, uncomment o método HelloWorld do serviço Web.
  6. No menu criar , clique em criar soluções .
  7. Clique em Iniciar e, em seguida, clique em Executar .
  8. Escreva inetmgr na caixa Abrir e, em seguida, clique em OK .
  9. Nos Serviços de informação Internet (IIS) janela, expanda Web Site predefinido .
  10. Clique com o botão direito do rato SampleWebService e, em seguida, clique em Propriedades .
  11. Na caixa de diálogo Propriedades de SampleWebService , clique no separador Segurança de directórios .
  12. Em controlo de acesso anónimo e autenticação , clique em Editar .
  13. Na caixa de diálogo Métodos de autenticação , clique para seleccionar a caixa de verificação autenticação integrada do Windows .

    Nota Certifique-se que todas as outras caixas de verificação na caixa de diálogo Métodos de autenticação estão desmarcadas.
  14. Clique em OK duas vezes para fechar a caixa de diálogo Propriedades de SampleWebService .
  15. Feche os Serviços de informação Internet (IIS) janela.
  16. Inicie o Microsoft Visual Basic 6.0.
  17. Crie um projecto EXE padrão. Por predefinição, é criado o Form1.
  18. Adicione um controlo CommandButton e um controlo de ProgressBar ao Form1. Se a caixa de ferramentas não contiver o controlo de ProgressBar , siga estes passos:
    1. No menu projecto , clique em componentes .
    2. Clique para seleccionar controlos comuns do Microsoft Windows 6.0 .

      Nota Se o separador de controlos da caixa de diálogo componentes não contém 6.0 de controlos comuns do Microsoft Windows , clique em Procurar , clique em MSCOMCTL.OCX e em seguida, clique em Abrir .
    3. Clique em OK para fechar a caixa de diálogo componentes .
  19. No evento clique do controlo Command1 , cole o seguinte código:
    Dim objSoapClient As Object
    Dim wsdl As String
    Dim MySoapResponse As String
    Dim i As Long
    
    ' The wsdl variable contains the physical path of the wsdl in the client.
    wsdl = "C:\SoapClient\SoapTestSrv.wsdl"
    Set objSoapClient = CreateObject("Mssoap.SoapClient30")
    objSoapClient.MSSoapInit wsdl
    
    ' The value of AuthUser/AuthPassword must be incorrect for a memory leak to occur.
    objSoapClient.ConnectorProperty("AuthUser") = "TestUserid"
    objSoapClient.ConnectorProperty("AuthPassword") = "TestPassword"
    objSoapClient.ConnectorProperty("WinHTTPAuthScheme") = 2
    
    ' Replace ServerName with the name of the server where the Web service Service1.asmx is hosted.
    objSoapClient.ConnectorProperty("EndPointURL") = "http://ServerName/SampleWebService/Service1.asmx"
    
    For i = 1 To 500000
        On Error Resume Next
        On Error GoTo Error
        MySoapResponse = objSoapClient.HelloWorld
    
        'If you run this code, you will notice a memory leak.
        If (i Mod 500000) = 0 Then
            ProgressBar1.Value = ProgressBar1.Value + 1
        End If
    
    Error:
        MsgBox (Err.Description)
    Next
    
    Set objSoapClient = Nothing
  20. No menu Run , clique em Iniciar . É apresentado o Form1.
  21. No Form1 , clique em Command1 .
Nota Verificar este comportamento em qualquer aplicação que utiliza o componente WinHTTP.dll e que também utiliza a autenticação integrada do Windows.

Referências

Para mais informações sobre a autenticação em WinHTTP, visite o seguinte Web site da Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/aa383144.aspx
Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
305965COMO: Beneficiar XML Web Service métodos utilizando SOAP Toolkit 2.0

Propriedades

Artigo: 826216 - Última revisão: 15 de novembro de 2007 - Revisão: 1.7
A informação contida neste artigo aplica-se a:
  • Microsoft SOAP Toolkit 3.0 nas seguintes plataformas
    • the operating system: Microsoft Windows XP
    • the operating system: Microsoft Windows 2000
Palavras-chave: 
kbmt kbautohotfix kbhotfixserver kbqfe kbqfe kbwebservices kbbug kbfix KB826216 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 826216

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com