ID do artigo: 313984 - Última revisão: quinta-feira, 19 de maio de 2005 - Revisão: 3.0

Erro em controle de tempo de execução 429 Winsock do Visual Basic e escalabilidade

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sumário

O controle Microsoft Winsock (Mswinsck.ocx) não foi projetado para ser criados dinamicamente em tempo de execução. Para usar esse controle, coloque-o em um formulário em tempo de design. Caso contrário, talvez você obtenha erro em tempo de execução 429, "o componente ActiveX não é possível criar objeto."

Além disso, não use o controle Winsock em ambientes de servidor, como com o Microsoft Internet Information Server (IIS) e Microsoft COM +, escalabilidade pode ser necessária.

Mais Informações

Erro em tempo de execução 429

Um aplicativo que cria o controle Winsock dinamicamente em tempo de execução através do uso de execuções de ligação inicial em tempo de design pode falhar em tempo de execução com o erro 429 se o aplicativo é executado em um computador nondevelopment (um computador que não tenha instalado do Visual Basic):
Erro em tempo de execução '429':
O componente ActiveX não é possível criar o objeto
O erro ocorre porque o computador de destino não tem as informações de licença para os objetos de controle que são usados no aplicativo. Você pode tentar definir a referência de projeto para apontar para MSWINSCK.ocx e, em seguida, gerar um pacote de implantação através do uso de Package and Deployment Wizard. Isso geraria um pacote de instalação que contém a versão correta do controle Winsock. No entanto, a chave de licença para o controle não será compilada no aplicativo, a menos que uma instância do controle é colocada em um formulário. Quando você tenta instanciar os objetos em tempo de execução, o aplicativo não tem como para fornecer a chave de licença e o código falhará. Por exemplo, o código a seguir será executado corretamente em tempo de design, mas falhará em tempo de execução em computadores que não têm instalado do Visual Basic:
Dim myWinSock As MSWinsockLib.Winsock

Sub Main()
    ' Early binding does not work
    Set myWinSock = New MSWinsockLib.Winsock

    myWinSock.LocalPort = 5432
    
    myWinSock.Listen
    
    MsgBox ("Listening!")
    
    myWinSock.Close
End Sub
portanto, você deve fornecer uma instância do controle Winsock em um formulário para que o Visual Basic pode compilar as informações de licença para o aplicativo. Você pode tornar o formulário oculto se necessário. Para fazer isso, defina a propriedade do formulário visível para "False". Em seguida, você pode preparar para a implantação. O trecho de código a seguir demonstra o método:
Dim myWinsock As MSWinsockLib.Winsock

Sub Main()
    ' Form1 is hidden
    Set myWinsock = Form1.myWinsock

    myWinsock.LocalPort = 5432
    
    myWinsock.Listen
    
    MsgBox ("Listening!")
    
    myWinsock.Close
End Sub
				
como alternativa, você pode colocar um objeto de controle Winsock no designer visual de um objeto UserControl como um controle constituinte, que geralmente é feito para estender a funcionalidade do controle Winsock ou subclasse. No entanto, essa abordagem não aborda o requisito de licenciamento. Para um aplicativo usar o objeto wrapper para executar com êxito em tempo de execução, o objeto de wrapper deve ser, por fim, em um formulário.

Escalabilidade

O controle Winsock é projetado para uso em aplicativos de servidor cliente ou a luz de carga. Microsoft não suporta o uso do controle em ambientes de servidor multithreaded, especialmente no IIS e COM +, escalabilidade pode ser importante. Usando esse controle em um ambiente como pode causar problemas unpredicatible inclusive deadlocks. A Microsoft recomenda que você considerar o uso de tecnologias alternativas, como a API do Winsock e a porta de conclusão de E/S (IOCP) nesses casos.

Referências

Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
274754  (http://support.microsoft.com/kb/274754/EN-US/ ) INFO: Licenciamento problemas relacionados a controles de usuário criados com Visual Basic
241126  (http://support.microsoft.com/kb/241126/EN-US/ ) INFO: Adicionar dinamicamente UserControls que requerem licenças de tempo de execução
192800  (http://support.microsoft.com/kb/192800/EN-US/ ) INFO: Problemas de design ao usar IOCP em um servidor de Winsock

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 3
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 4
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 5
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
Palavras-chave: 
kbmt kbdswnet2003swept kbapi kbctrl kbinfo kbnetwork kbwinsock KB313984 KbMtpt
Tradução automáticaTraduçã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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 313984  (http://support.microsoft.com/kb/313984/en-us/ )