Web Services na plataforma.net - PDF
Download "Web Services na plataforma.net"
Júlio César Borja Lobo
1 Web Services na plataforma.net Jackson Gomes de Souza 1 1 Curso de Sistemas de Informação Centro Universitário Luterano de Palmas (CEULP/ULBRA) Caixa Postal Palmas TO Brasil 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=" xmlns:soap=" xmlns:s=" <types> <s:schema elementformdefault="qualified" targetnamespace=" <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=" /> </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 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, passandose os parâmetros 3.5 e 6.5, do serviço Calculadora. <?xml version="1.0" encoding="utf-8"?> <soap:envelope xmlns:xsi=" xmlns:xsd=" xmlns:soap=" <soap:body> <Soma xmlns=" <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"> 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=" xmlns:xsd=" xmlns:soap=" <soap:body> <SomaResponse xmlns=" <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 elemento <SomaResult> com valor 10.
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 palavrachave, 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 /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: //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= // using System.Diagnostics; using System.Xml.Serialization; using System; using System.Web.Services.Protocols;
9 using System.ComponentModel; using System.Web.Services; /// <remarks/> [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Web.Services.WebServiceBindingAttribute(Name="CalculadoraSoap", Namespace=" public class Calculadora : System.Web.Services.Protocols.SoapHttpClientProtocol { /// <remarks/> public Calculadora() { this.url = " } /// <remarks/> [System.Web.Services.Protocols.SoapDocumentMethodAttribute(" puri.org/soma", RequestNamespace=" ResponseNamespace=" 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 classes da plataforma.net necessárias para prover acesso ao recurso através da Internet.
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 p. Rio de Janeiro: Editora Ciência Moderna Ltda., KALANI, Amit et. al. ASP.NET 1.0 with C#. Namespace Reference. Wrox, 2002.
.htc Explorer Internet Conceitos e Funcionalidades dos Web Services Poliana Alves de Leva Uberlândia, Dezembro/2002. Conceitos e Funcionalidades dos Web Services Poliana Alves de Leva Uberlândia, Dezembro/2002.