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.
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.
- Web Reference: cria uma classe cliente para comunicação com web services descritos em Web Services Description Language (WSDL) [4]. Baseia-se no. NET Framework 1.1 ou 2.0.
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. Adicionando uma Web Reference
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). 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. 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.
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