Integrando Magic xpa e COM / .NET

Neste outro post mostramos com integrar o Magic xpa (uniPaaS) ao Java. É muito importante e conveniente a capacidade de integração tecnológica existente no UniPaaS, não só para podermos expandir as capacidades das nossas soluções, como também para conectarmos a outras aplicações existentes, situação cada vez mais necessária no mundo corporativo.

Agora, vamos ver como integrar Magic xpa e COM/.NET.

De fato, a integração ocorre mesmo é com o COM. O .NET possui uma interface chamada CCW, e é com este recurso que rotinas .NET podem ser acessadas nativamente pelo Magic xpa (para o UniPaaS serão objetos COM).

É necessário seguir alguns passos na criação da rotina .NET, para ela utilizar a interface CCW e tornar-se acessível ao Magic xpa:

1.                         Deve-se criar uma interface pública para cada classe/método a ser exposto. Esta interface deve ser decorada com os atributos [Guid()] e [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]. Isto é necessário, pois o Magic xpa só acessará objetos COM que implementem a interface IDispatch.

(NOTA: sempre gere um novo GUID para cada nova interface criada)

2.                         Deve-se criar a classe pública que implementa fisicamente (o código) esta interface. Esta classe deve ser decorada com o atributo [Guid()] e [InterfaceType(ClassInterface(ClassInterfaceType.None))]. Isto é necessário para que os detalhes de exposição da classe sejam os mesmos da interface que ela implementa.

(NOTA: sempre gere um novo GUID para cada nova classe criada)

3.                         O assembly onde estas classes estarão deve ser decorado com o atributo [assembly: ComVisible(true)]. Isto é necessário para que ele possa ser exposto via CCW, e normalmente é feito no arquivo de atributos do projeto (AssemblyInfo.cs ou AssemblyInfo.vb).

4.                         Este assembly também precisa ser assinado com um Strong Name, para que possa ser instalado no GAC .NET:

5.                         Uma vez que seja feito o ‘build’ do projeto .NET, será criado o assembly contendo todas as classes. Por se tratar de uma interface COM, este assembly precisa ser registrado em cada máquina que for utilizá-lo (servidor ou clientes). Isto precisa ser feito em três passos, conforme abaixo:

A)     Escolha um local (pasta) no MSWindows da máquina que irá acessar o componente, e copie o assembly (.dll) nela:

B)       Este assembly precisa ser registrado no GAC .NET. Isso pode ser feito com o utilitário do framework .NET: GACUtil.exe. O comando é: GACUtil /i <assembly>.dll, ex:

GACUtil /i UniPaaSUtils.dll

C)      Depois de estar no GAC, por ser exposto como um objeto COM, ele precisará também ser importado no registro do Windows como um servidor OCX. Isso pode ser feito com o utilitário do framework .NET: RegAsm.exe. O comando é: RegAsm /tlb:<assembly>.tlb <assembly>.dll, ex:

RegAsm /tlb:UniPaaSUtils.tlb UniPaaSUtils.dll

NOTA: quando alterar ‘assemblies’ já existentes, será preciso remover o antigo (GACUtil /u e RegAsm /u), atualizar a nova DLL, e repetir o registro.

Com estes passos, o objeto COM/.NET está disponível na estação MSWindows. Ele está disponível para qualquer produto que interfaceie com a tecnologia COM, não apenas para o Magic xpa.

No projeto Magic xpa, devemos criar um modelo do tipo OLEServer, e definir a classe OCX a que ele se refere:

NOTA: Selecione a ‘classe’ e não a ‘interface’. Observe que para o UniPaaS o acesso será a um objeto COM. O MSWindows é quem faz a ponte entre o COM e o .NET.

No programa Magic xpa, o objeto COM será criado sempre que uma virtual deste modelo for definida:

Com objetos COM deve ser usada a instrução ‘Invoke COM’ para ler/alterar propriedades e executar métodos:

Acesse este link e baixe um pequeno projeto exemplo Magic xpa (1.9g) que executa um componente .NET exposto como COM. Este componente permite enviar e-mails a servidores SMTP que exigem conexão segura (SSL ou TLS) (como o GMail por exemplo). O código fonte .NET (em C#) está contido no pacote. Não se esquecer de registrar o assembly (UniPaaSUtils.dll) na máquina, conforme instruções acima. Este componente requer o .NET Framework 2.0 ou superior.

Manoel Frederico - Gerente de Produto e Magic Evangelista
Manoel Frederico – Gerente de Produto e Magic Evangelista

 

7 comentários

    1. Oscar,

      ‘pop3’ não tem classe por default no MS.NET. Nós usamos bibliotecas de terceiros (ex: LumiSoft) para fazer ‘pop3’ ou ‘imap’ quando necessário.

  1. Fred,

    Dentro da pasta (projeto .NET) C:\Projects\UniCOMDNet\.NET Project\UniPaaSUtils, onde salvei o projeto, não existe a UniPaaSUtils.dll.

    Esta dll não deveria estar na pasta ?

    Desde já agradeço.

    Carlos Mollero

    1. Baixando o projeto pelo link acima, a DLL (assembly) está na pasta:

      UniCOMDNet\.NET Project\UniPaaSUtils\UniPaaSUtils\bin\Release

      1. Boa tarde FRED,

        Tentei registrar a DLL no GAC de uma máquina com XP e não consigo, não encontro o GAC em nenhuma pasta do .NET. Tentei arrastar a DLL para pasta C:\Windows\Assembly, mas não é permitido.
        Estou logado com usuario adminsitrador, existe alguma dica ou outra maneira de fazer ? este aplicativo pode ser baixado para uso ?

        Obrigado.

        1. Baixe-o deste endereço:

          http://files.magicsoftware.com.br/GACUtil.exe

          e coloque-o junto do ‘RegASM.exe’ na pasta ‘C:\windows\Microsoft.NET\Framework\v2.0.50727\’

          Caso a sua máquina tenha vários Frameworks .NET (2, 4, 4.5), use os programas do 2.0, que estão na pasta:
          ‘C:\windows\Microsoft.NET\Framework\v2.0.50727\’

Deixe um comentário

O seu endereço de e-mail não será publicado.