• Nenhum resultado encontrado

Web Services na plataforma.net

N/A
N/A
Protected

Academic year: 2021

Share "Web Services na plataforma.net"

Copied!
11
0
0

Texto

(1)

Web Services na plataforma .NET

Jackson Gomes de Souza1

1

Curso de Sistemas de Informação – Centro Universitário Luterano de Palmas (CEULP/ULBRA)

Caixa Postal 160 – 77054-970 – Palmas – TO – Brasil jgomes@ulbra-to.br

Abstract. This paper presents the .NET framework Web Services technology, by Microsoft, e, specifically, it’s utilization in the ASP.NET Internet programming model; there are demonstrated the Web Services characteristics and the related concepts, as SOAP and XML-RPC. Also, it presents an example of utilization of a Web Service inside a client application.

Resumo. Este artigo apresenta a tecnologia de Web Services para a plataforma .NET, da Microsoft, e, em específico, sua utilização com o modelo de programação para a Internet ASP.NET; são demonstradas as características de Web Services e os conceitos relacionados, como SOAP e XML-RPC. Ainda, apresenta um exemplo de utilização de um Web Service em uma aplicação cliente.

1. Introdução: O Web Services Model

A definição mais básica para Web Services é a de “uma aplicação que é acessível por programas através de protocolos web de uma maneira independente de plataforma” [KALANI et. al. 2002] Esta definição apresenta elementos importantes que valem a pena ser detalhados:

a) “aplicação acessada por programas através de protocolos web”: esta definição não é antiga , pois várias arquiteturas já prometiam e possibilizavam a realizam de execuções de métodos remotos através da Internet (como CORBA e DCOM). Além disso, o uso do protocolo HTTP, como padrão para transmissão de dados pela Internet, pode permitir a comunicação entre servidores (e entre clientes e sevidores) mesmo através de mecanismos de segurança de rede como firewalls.

b) “independente de plataforma”: aqui entra a parte mais importante da criação de Web Services e já é bom trabalhar com o termo “XML Web Services” por causa da natureza da troca de mensagens entre aplicativos. A linguagem XML é utilizada para manter um padrão de forma de comunicação (troca de mensagens) entre as aplicações, ou seja, para a execução de métodos remotos (Remote Procedure Call – RPC). De fato, o protocolo SOAP, sobre o qual XML Web Services se baseia, parte da definição de um projeto inicial chamado “XML-RPC” (chamada de procedimento remoto XML), criado por volta de 1998 por David Winer; na sua criação, ele foi definido como o básico sobre como XML poderia ser usada para descrever as informações da biblioteca de tipo de uma maneira neutra frente ao sistema operacional, que poderia tornar possível às tecnologias de componentes, então incompatíveis, falar umas com as outras pela Internet [AMUNDSEN e LITWIN 2002].

(2)

É essa característica de independência de sistema operacional (ou, de plataforma) que torna XML Web Services uma arquitetura tão interessante para a comunicação entre aplicações que são desenvolvidas em linguagens e plataformas diferentes.

Em 1999 era criado o protocolo SOAP (Simple Objet Access Protocol) como resultado de uma solicitação de um consórcio liderado pela Microsoft, IBM e Sun para a W3C.

2. O protocolo SOAP

O SOAP é um formato de mensagens baseado em XML, usado para passar informações entre duas localidades ou “extremidades”. As informações são armazenadas em um tipo de envelope [AMUNDSEN e LITWIN, 2002]. Este conjunto de elementos XML (um documento XML) realiza a tarefa de descrever as formas usadas para a transmissão de mensagens e a biblioteca de tipos. A Figura 1 ilustra os procedimentos realizados para troca de mensagens, utilizando SOAP, entre dois servidores (A e B).

Figura 1. Modelo de estrutura da chamada de métodos entre servidores

Os elementos do mecanismo de troca de mensagens apresentado pela Figura 1 podem ser explicados da seguinte maneira:

1) Servidor A envia solicitação SOAP ao servidor B para receber informações da biblioteca de tipos

2) Servidor B envia de volta a mensagem SOAP com a biblioteca de tipo 3) Servidor A envia envelope SOAP com o método que será chamado

4) Servidor B executa o método e envia de volta o resultado em um envelope SOAP 2.1. A Linguagem de Descrição de Web Service (WSDL)

Para que os servidores consigam se comunicar, é necessário que eles entendam o mesmo “vocabulário”. Os métodos (e seus argumentos) e os tipos precisam ser entendidos por ambas as partes. Para isso existe a Web Services Description Language (WSDL), que disponibiliza as informações necessárias para compor as solicitações e as respostas SOAP [AMUNDSEN e LITWIN 2002].

A Figura 2 apresenta um exemplo de mensagem WSDL para o serviço “Calculadora” onde são descritos os tipos e a forma de comunicação a ser estabelecida com um serviço que tem um método (“Soma”) que realiza a soma de dois números reais.

(3)

<?xml version="1.0" encoding="utf-8"?> <definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema"> <types> <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/"> <s:element name="Soma"> <s:complexType> <s:sequence>

<s:element minOccurs="1" maxOccurs="1" name="a" type="s:float" />

<s:element minOccurs="1" maxOccurs="1" name="b" type="s:float" /> </s:sequence> </s:complexType> </s:element> <s:element name="SomaResponse"> <s:complexType> <s:sequence>

<s:element minOccurs="1" maxOccurs="1" name="SomaResult" type="s:float" /> </s:sequence> </s:complexType> </s:element> </s:schema> </types> <message name="SomaSoapIn">

<part name="parameters" element="s0:Soma" /> </message>

<message name="SomaSoapOut">

<part name="parameters" element="s0:SomaResponse" /> </message>

<service name="Calculadora">

<port name="CalculadoraSoap" binding="s0:CalculadoraSoap"> <soap:address

location="http://localhost/webservices/calculadora.asmx" /> </port>

</service> </definitions>

Figura 2. Exemplo de trecho de mensagem WSDL para o serviço “Calculadora” Na Figura 2, o elemento <s:element name="Soma"> contém uma série de

elementos <s:element> que definem os tipos de dados dos parâmetros do método

“Soma”. Os elementos <message name="SomaSoapIn"> e <message

name="SomaSoapOut"> representam, respectivamente, as mensagens utilizadas para

solicitação e envio de resposta.

2.2. A mensagem SOAP de solicitação

Assim, que a máquina solicitante recebe a mensagem WSDL da descrição do serviço, já é possível compor uma mensagem SOAP de solicitação, pedindo ao servidor para executar um

(4)

determinado método e retornar algum resultado. A Figura 3 apresenta um exemplo de mensagem de solicitação que poderia ser utilizada para chamar o método “Soma”, passando-se os parâmetros “3.5” e “6.5”, do passando-serviço “Calculadora”.

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Soma xmlns="http://tempuri.org/"> <a>3,5</a> <b>6,5</b> </Soma> </soap:Body> </soap:Envelope>

Figura 3. Exemplo de mensagem SOAP de solicitação do método “Soma” do serviço “Calculadora”

Na Figura 3, a mensagem inclui um elemento <soap:envelope>, que define um

esquema para informações que estarão presentes no corpo da solicitação e um elemento

<soap:body>, que é o corpo da mensagem de solicitação (representada pelo elemento

<Soma>, descrito pela WSDL (Figura 2) pelo elemento <s:element name="Soma">.

2.3. A mensagem SOAP de resposta

Após uma mensagem de solicitação, devidamente formatada, ser recebida pelo servidor, a mensagem de resposta é devolvida, contendo o resultado da execução do método. A Figura 4 apresenta um exemplo de mensagem de resposta a uma solicitação de execução do método “Soma” do serviço “Calculadora”.

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <SomaResponse xmlns="http://tempuri.org/"> <SomaResult>10</SomaResult> </SomaResponse> </soap:Body> </soap:Envelope>

Figura 4. Exemplo de mensagem SOAP de resposta à chamada do método “Soma” do serviço “Calculadora”

Na Figura 4, no corpo da mensagem, está contido o elemento <SomaResponse>

que contém a resposta à chamada do método “Soma” e está descrito na WSDL (Figura 2) pelo elemento <s:element name="SomaResponse">, neste exemplo, contém o

(5)

Pelos exemplos das Figuras 2, 3 e 4, é possível perceber a relação entre as mensagens de solicitação e resposta e como os elementos enviados são disponibilizados pela WSDL.

3. Criação e publicação de ASP.NET Web Services

Há várias maneiras de consumir web services. Já que são disponibilizados via rede, através do protocolo HTTP, qualquer cliente que consiga acessar recursos de rede (como TC`P/IP) poderá realizar uma interação com o Web Service [AMUNDSEN e LITWIN 2002]. Embora isso seja possível, não é a solução mais prática e viável, porque o programador necessitaria de um grande conhecimento das mensagens SOAP e de processamento de documentos XML (que, no caso, seriam retornados como strings e deveriam ser analisados para que os dados de interesse pudessem ser recuperados).

ASP.NET fornece um mecanismo para acesso aos Web Service que diminui consideravelmente a necessidade de programação. Existem várias bibliotecas de classes que entendem o protocolo SOAP.

Em ASP.NET, disponibilizar um Web Service está relacionado com a criação de um arquivo Active Server Method Extension (.asmx) que é publicado em um servidor web. ASP.NET cuidará do envio de mensagens no formato SOAP e produzirá documentos que descreverão o web service e os métodos possíveis de serem chamados [AMUNDSEN e LITWIN 2002].

A Figura 5 apresenta o código do Web Service “Calculadora”, que será elucidado posteriormente.

1: <%@ WebService Language="C#" Class="Calculadora" %> 2:

3: using System;

4: using System.Web.Services; 5:

6: public class Calculadora : WebService {

7: [WebMethod] public float Soma(float a, float b){ 8: return(a+b);

9: }

10: }

Figura 5. Código, em linguagem C#, para o Web Service “Calculadora”

Na Figura 5, linha 1, está a descrição inicial do Web Service. As palavras chave “WebService”, “Language” e “Class” definem, respectivamente, que o código representa um Web Service, que a linguagem a ser utilizada é a linguagem C# e que o nome da classe que descreve o serviço (e que será tornada de domínio público) é “Calculadora”.

Nas linhas 3 e 4 são importados os espaços de nome (bibliotecas de classes) que serão utilizados. Estes espaços de nomes, em específico, contém as classes necessárias para a criação de Web Services.

Na linha 6, é criada a definição da classe “Calculadora” e que ela herda da classe “WebService”.

(6)

Na linha 7, é criada a definição do método “Soma”, e a palavra-chave “[WebMethod]” define que este método será disponibilizado publicamente (como um método possível de ser executado). Podem existir métodos auxiliares, não marcados por esta palavra-chave, neste caso, tais métodos só serão acessíveis internamente, pela classe que os contém (neste caso, “Calculadora”).

A Figura 6 apresenta como a descrição do Web Service é visualizado pelo browser. A Figura 7 apresenta o formulário HTML criado para realizar a interação com o Web Service (envio de mensagens de solicitação).

Figura 6. Visualização do Web Service no browser

O ASP.NET cria automaticamente o documento HTML das Figura 6 e 7. Na Figura 6, ao clicar sobre o link “Soma”, é possível executar o método; ao clicar sobre o link “Service Description” é possível visualizar o documento WSDL para o Web Service “Calculadora” (Figura 2). Na Figura 7, o usuário deve preencher os campos dos parâmetros do método “Soma” (“a” e “b”) e clicar sobre o botão “Invoke”; ao clicar sobre o botão, uma mensagem de resposta, no formato XML, é enviada (Figura 8).

(7)

Figura 7. Interface para comunicação e execução do método “Soma”

Figura 8. Documento XML enviado ao cliente como resposta à chamada (invocação) do método “Soma” (para a=3,5 e b=6,5)

3.1. Utilização do Web Service “Calculadora”

Dentre as formas para utilização de Web Services estão: formulários HTML e a criação de classes proxy através do utilitário wsdl.exe (que acompanha o Microsoft .NET Framework SDK).

Para utilizar formulários HTML, a tag form deve como valor para o atributo action a url para o recurso .asmx e o método a ser executado, como apresenta a Figura 9.

<html> <body>

<h1>Utilização de Web Services através de formulários</h1> <form action="calculadora.asmx/Soma" method="POST">

a: <input type="text" name="a"><br> b: <input type="text" name="b"><br> <input type="submit" value="Calcular">

(8)

</form> </html>

Figura 9. Utilização de Web Services através de formulários HTML

Quando o formulário da Figura 9 for enviado (o usuário clicar sobre o botão “Calcular”) uma nova janela será aberta e a mesma tem a mesma aparência da apresentada pela Figura 8.

O utilitário wsdl.exe pode acessar um documento .asmx, verificar seu WSDL e

criar automaticamente uma classe proxy, que poderá ser acessada por qualquer aplicativo (web ou desktop) criado sobre a plataforma .NET. A Figura 10 apresenta um exemplo de utilização do wsdl.exe de uma classe para o Web Service “Calculadora”, a Figura 11

apresenta o resultado da execução do comando e a Figura 12 apresenta o código, em linguagem C#, gerado automaticamente para o arquivo “Calculadora.cs”.

wsdl http://localhost/webservices/calculadora.asmx /l:cs /o:Calculadora.cs

Figura 10. Geração da classe proxy para o Web Service Calculadora

Figura 11. Resultado da execução do wsdl.exe para geração do arquivo CalculadoraProxy.cs

//--- //<autogenerated>

//This code was generated by a tool. //Runtime Version: 1.1.4322.573

//Changes to this file may cause incorrect behavior and will be lost //if the code is regenerated.

// </autogenerated>

//---

//

// This source code was auto-generated by wsdl, Version=1.1.4322.573. //

using System.Diagnostics;

using System.Xml.Serialization; using System;

(9)

using System.ComponentModel; using System.Web.Services; /// <remarks/> [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Web.Services.WebServiceBindingAttribute(Name="CalculadoraSoap" , Namespace="http://tempuri.org/")]

public class Calculadora :

System.Web.Services.Protocols.SoapHttpClientProtocol { /// <remarks/> public Calculadora() { this.Url = "http://localhost/webservices/calculadora.asmx"; } /// <remarks/> [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tem puri.org/Soma", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrappe d)]

public System.Single Soma(System.Single a, System.Single b) { object[] results = this.Invoke("Soma", new object[] { a, b}); return ((System.Single)(results[0])); } /// <remarks/>

public System.IAsyncResult BeginSoma(System.Single a,

System.Single b, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("Soma", new object[] {

a,

b}, callback, asyncState); }

/// <remarks/>

public System.Single EndSoma(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult);

return ((System.Single)(results[0])); }

}

Figura 12. Código, em linguagem C#, para a classe proxy “Calculadora” (CalculadoraProxy.cs)

Embora o código da Figura 12 se pareça confuso e difícil de se entender, o programador não precisa analisá-lo, ou, mesmo, entendê-lo. Como o código é gerado automaticamente pelo utilitário wsdl.exe o mesmo é criado exatamente de acordo com as

(10)

Após a geração do arquivo CalculadoraProxy.cs, este tem que ser compilado, para que possa ser gerada um arquivo .dll que conterá a definição de tipos para propiciar a utilização da classe “Calculadora” em uma aplicação cliente. Para gerar o arquivo .dll, o seguinte comando deve ser utilizado:

csc /t:library CalculadoraProxy.cs

Após a geração do arquivo .dll, a classe proxy está pronta para ser utilizada por outra aplicação. A Figura 13 apresenta o código, em linguagem C#, que utiliza a classe proxy “Calculadora” em um aplicativo de linha de comando para consumir o Web Service “Calculadora”. O arquivo deve ser compilado realizando uma referência à dll:

csc /r:CalculadoraProxy.dll CalculadoraConsole.cs

1: using System;

2: class CalculadoraConsole {

3: public static void Main(String[] args){

4: Calculadora calculadora = new Calculadora(); 5: float a = 3.5f;

6: float b = 6.5f;

7: Console.WriteLine("O valor da soma é: {0}",calculadora.Soma(a,b).ToString()); 8: }

9: }

Figura 13. Código, em linguagem C#, para o arquivo CalculadoraConsole.cs: um cliente que utiliza a classe proxy “Calculadora” para consumir o Web

Service “Calculadora”

Na Figura 13, na linha 3, é feita a instanciação do objeto “Calculadora”. As linhas 5 e 6 definem as variáveis que serão utilizadas na passagem de parâmetros para o método “Soma” (linha 7).

4. Considerações finais

XML Web Services apresentam uma nova maneira de comunicação (envio de dados e mensagens) entre clientes e servidores e entre servidores e servidores. Explorando as potencialidades deste ambiente, aplicações cliente podem consultar bancos de dados públicos, apresentar informações de maneira específica (voltada para o contexto de sua própria aplicação) e, ainda, fornecer uma interface para outros clientes. Logo, uma aplicação não se torna apenas cliente, mas, dependendo da relação na qual está inserida, também pode se tornar uma aplicação servidora.

Os Web Services ainda dispõem de outras características importantes para o meio comercial, como:

?? Segurança: a aplicação pode solicitar autenticação do usuário para que o Web Service possa ser devidamente acessado.

(11)

?? Gerenciamento de sessão: a aplicação pode manter o estado da aplicação para o usuário, facilitando, assim, a interação com o mesmo.

?? Gerenciamento de transação: provavelmente, um dos recursos mais utilizados pelo meio comercial, principalmente porque é um mecanismo que consegue gerenciar a execução de métodos e verificar a ocorrência de falha ou sucesso.

A publicação dos serviços na Internet se torna uma tarefa simplificada através da utilização de ASP.NET.

Com isso, o ambiente de execução dos Web Services pode crescer exponencialmente à medida que novas aplicações (servidoras e clientes) surgem e são disponibilizadas na Internet.

Este trabalho aprestou as características iniciais para o desenvolvimento e utilização de XML Web Services na plataforma .NET. Outras potencialidades podem ser exploradas, não se atendo, é claro ao que foi apresentado aqui, como a utilização de classes personalizadas (no resultado da execução de métodos) e acesso a dados utilizando classes DataSet.

6. Referências Bibliográficas

AMUNDSEN, Michael e LITWIN, Paul. ASP.NET para desenvolvedores de Web Sites. 319-360 p. Rio de Janeiro: Editora Ciência Moderna Ltda., 2002.

Referências

Documentos relacionados

Assim, além de suas cinco dimensões não poderem ser mensuradas simultaneamente, já que fazem mais ou menos sentido dependendo do momento da mensuração, seu nível de

(grifos nossos). b) Em observância ao princípio da impessoalidade, a Administração não pode atuar com vistas a prejudicar ou beneficiar pessoas determinadas, vez que é

No entanto, maiores lucros com publicidade e um crescimento no uso da plataforma em smartphones e tablets não serão suficientes para o mercado se a maior rede social do mundo

devidamente assinadas, não sendo aceito, em hipótese alguma, inscrições após o Congresso Técnico; b) os atestados médicos dos alunos participantes; c) uma lista geral

Entre as atividades, parte dos alunos é também conduzida a concertos entoados pela Orquestra Sinfônica de Santo André e OSESP (Orquestra Sinfônica do Estado de São

Ao compreender que a canção pode ser parcialmente entendida como produção relacionada ao gênero poético, tomarei por base as formas com que o gênero se apresenta na

O objetivo deste estudo foi caracterizar a comunidade de palmeiras nativas em doze aldeias krahô e também descrever o potencial de utilização das espécies nessas