Comunicando com web services via driver VBScript.

1) Introdução

No artigo Criando e instanciando assemblies .NET utilizando o driver VBScript [1], pode-se ver como criar um assembly .NET no Microsoft Visual C# e carregá-lo no E3 via driver VBScript. Entre outras possibilidades de uso, esse recurso pode ser utilizado para comunicar com web services.

Este artigo irá explicar como criar um assembly que faça essa comunicação com um web service de forma simples. Para simular a comunicação do exemplo, será utilizado o driver Elipse WebService, que cria um web service no computador que o executa. 

2) Adicionando uma referência ao web service

Primeiro, deve-se criar um projeto no Microsoft Visual C#, configurando-o de acordo com o artigo citado anteriormente [1]. É importante ressaltar que é obrigatório habilitar a opção Com-Visible nas opções do assembly.

Neste exemplo, o nome do projeto será WebServiceClient, e a classe será renomeada para Client.

Para criar a referência, antes é necessário publicar o web service com permissões de acesso. Assim, deve-se criar um projeto no E3 com o driver Elipse WebService configurado e ativado, conforme as orientações do artigo Enviando dados ao E3 através de web services .NET [2] (itens 4 e 5).

No Microsoft Visual C# 2008, a comunicação com um web service pode ser realizada de duas formas:

  • Service Reference: essa opção cria uma classe cliente para comunicação com serviços baseados em Windows Communication Foundation (WCF) [3], que podem ser web services ou não. Requer o .NET Framework 3.0 ou superior.

Para este exemplo, já que o tipo de web service criado pelo driver Elipse WebService é descrito em WSDL, será criada uma Web Reference. Para isso, dentro do projeto criado, clique no menu Project >> Add Service Reference.  Na próxima janela, clique no botão Advanced… e então em Add Web Reference… (Figura 1).

 Figura 1. Adicionando uma Web Reference

Ao inserir a URL do web service criado pelo driver (ela pode ser obtida nas configurações do driver Elipse WebService) e clicar em Go, serão exibidos os serviços encontrados (neste caso, SendData). Para adicionar a referência ao projeto, basta clicar em Add Reference (Figura 2).


Figura 2. Adicionando uma referência ao serviço “SendData”

Uma classe que habilita a comunicação com o serviço e a chamada dos métodos disponíveis será gerada. No código da classe Client que pode ser visto abaixo, uma variável do tipo WebReference.SendData e dois métodos serão criados: o método SendData envia um dado à primeira posição do array de objetos esperado pela função SetParams do web service, e o método Dispose garante que os recursos serão liberados.

namespace WebServiceClient
{
public sealed class Client : IDisposable
{
private WebReference.SendData service;

    public Client()
{
service = new
WebServiceClient.WebReference.SendData();
}

public void SendData(object o)
{
object[] obj = new object[1] { o };
service.SetParams(obj);
}


public void Dispose()
{
service.Dispose();
service = null;
}
}
}

3) Acessando o web service através do driver VBScript

Após compilar o assembly, é possível carregá-lo via script, conforme o artigo [1]. Entretanto, além do arquivo DLL, mais dois arquivos serão gerados e devem estar no mesmo diretório: um arquivo XML que define as configurações do web service (WebServiceClient.dll.config), e um outro arquivo DLL que é usado na serialização do XML (WebServiceClient.XmlSerializers.dll).

Depois, um novo objeto Driver deve ser adicionado ao projeto do E3 para carregar o driver VBScript. Para o envio de dados ao web service, será criado um tag com permissão de escrita. O parâmetro Item deve ser preenchido para ser reconhecido pelo script (foi utilizado o nome Tag), conforme a Figura 3. O script abaixo cria um objeto WebServiceClient.Client assim que o driver é ativado, e envia o valor do tag usando o método SendData sempre que é feita uma escrita:

Dim obj

Sub OnStart()
  Set obj = CreateDotNetObject(“C:\WebServiceClient.dll”, “WebServiceClient.Client”)
End Sub

Sub OnWrite_Tag(r, v)
  obj.SendData(v.Value)
End Sub

Sub OnStop()
 Set obj = Nothing
End Sub


Figura 3. Enviando dados ao web service

No exemplo, ao fazer uma escrita no Tag1, deverá aparecer o valor informado no Elemento1 do bloco criado no driver Elipse WebService (Figura 4). Neste caso, foi escrita a palavra Teste, que foi imediatamente lida através do web service e exibida no Elemento1.


Figura 4. Valor lido pelo driver através do web service


Figura 4. Valor lido pelo driver através do web service

4) Conclusão

Carregando assemblies .NET e instanciando os tipos de dados configurados, é possível facilitar a realização de tarefas complexas para quem está criando o script. Por exemplo, a facilidade oferecida pelo uso do .NET Framework pode ser aproveitada para comunicar com os mais diversos tipos de web services.

Mais informações sobre as configurações de referências a serviços no Microsoft Visual C# podem ser encontradas na MSDN Library [5] [6].

5) Referências

[1] Como criar e instanciar assemblies .NET utilizando o driver VBScript 

[2] Enviando dados ao E3 através de web services .NET
[3] Windows Communication Foundation
(WCF)

[4] Web Services Description Language
(WSDL)

[5] How to: Add a Reference to a Web Service
[6] How to: Add, Update, or Remove a Service Reference

 

Anexos:

Projeto1
WebServiceClient

Este artigo foi útil? Was this post helpful?
Yes0
No0

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *