1 / 93

Implementando Serviços Web

Implementando Serviços Web. MO818 – Tópicos em Redes de Computadores Prof. Dr. Edmundo Madeira Instituto de Computação - Unicamp. Tópicos. Introdução Alguns conceitos de .NET Serviços web na plataforma .NET Serviços web na plataforma J2EE Comparação J2EE x .NET Considerações finais

thyra
Download Presentation

Implementando Serviços Web

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Implementando Serviços Web MO818 – Tópicos em Redes de Computadores Prof. Dr. Edmundo Madeira Instituto de Computação - Unicamp Francisco Hoyos

  2. Tópicos • Introdução • Alguns conceitos de .NET • Serviços web na plataforma .NET • Serviços web na plataforma J2EE • Comparação J2EE x .NET • Considerações finais • Referências Francisco Hoyos

  3. Introdução • J2EE e .NET são duas das principais plataformas para desenvolvimento, execução e consumo de serviços web. • No que consiste o suporte ao usuário e desenvolvedor de serviços web nessas plataformas? • Qual ambiente de execução elas oferecem aos serviços? Francisco Hoyos

  4. .NET: Definição • “.NET é a estratégia da Microsoft para conectar sistemas, informação e dispositivos através de web services para que as pessoas possam colaborar e comunicar-se mais efetivamente.” • “A Microsoft oferece uma completa gama de software que ajuda organizações e indivíduos a se beneficiarem da conectividade baseada em web services: ferramentas de desenvolvimento Visual Studio .NET, Windows Server System que hospeda web services e aplicações para desktop como Office, que consomem web services.” Francisco Hoyos

  5. .NET: Origens • Em outubro de 2000, Microsoft, HP e Intel submeteram as especificações da linguagem C# e da Common Language Infrastructure (CLI) à ECMA (European Computer Manufacturers Association) para padronização. • Em dezembro de 2001 ambas foram aprovadas pela ECMA e em 2003 pela ISO. Francisco Hoyos

  6. .NET: Common Language Infrastructure • A CLI inclui: • Common Intermediate Language (CIL) • linguagem independente de plataforma • Common Type System (CTS) • conjunto de tipos e operações compartilhados por várias linguagens de programação • Common Language Specification (CLS) • toda linguagem de programação “.NET-compliant” deve atender a essa especificação Francisco Hoyos

  7. .NET: Plataforma • O .NET Framework é composto pelo Common Language Runtime e a .NET Framework class library. • Enterprise Servers incluem SQL Server, Exchange Server, BizTalk, Commerce Server. Francisco Hoyos

  8. .NET: CLR • O CLR é a implementação Microsoft da especificação CLI. • Quando uma aplicação .NET é executada, o CLR gerencia o carregamento e a execução do código e provê vários serviços “runtime” à aplicação, como: gerenciamento de memória (garbage collection), de threads e de segurança. Francisco Hoyos

  9. .NET: execução de código nativo • Aplicações .NET são compiladas para MSIL (Microsoft Intermediate Language, o mesmo que CIL). • Quando a aplicação é executada pela primeira vez, o runtime faz uma compilação just-in-time para converter o código MSIL para código de máquina. Francisco Hoyos

  10. .NET: execução no CLR Francisco Hoyos

  11. .NET: CLS • A CLS (Common Language Specification) define um conjunto de tipos de dados que podem ser usados por qualquer linguagem “.NET-compliant”. Isso permite completa integração entre aplicações desenvolvidas em linguagens diferentes: • um tipo definido em uma linguagem pode ser herdado em outra linguagem • exceções podem ser lançadas de uma linguagem e capturadas em uma outra Francisco Hoyos

  12. .NET: managed/unmanaged code • Código feito para .NET é chamado managed code e pode dispor dos serviços oferecidos pelo runtime .NET. • Qualquer outro código é chamado unmanaged code, pode ser executado pelo CLR, mas não tem acesso aos serviços deste. Francisco Hoyos

  13. .NET: Framework Class Library • Pode ser dividida em quatro grupos: • Base Class Library (BCL): funcionalidades comuns (ex: tipos de dados “core”) • ADO.NET e XML: acesso e manipulação de dados (tipicamente obtidos de um banco de dados); conversão dos dados para XML • Windows Forms: desenvolvimento de aplicações Windows tradicionais para desktop (“controls”) • ASP.NET: desenvolvimento de aplicações web Francisco Hoyos

  14. ASP.NET • Sucessor da tecnologia Active Server Pages. • Simplificação do processo de desenvolvimento de serviços web. • Modelo “web forms” para desenvolvimento de interfaces para web browser. “Controls” presentes nas web forms executam no servidor e não no cliente. “Look and feel” muito semelhante ao das Windows forms. Francisco Hoyos

  15. ASP.NET • Páginas com extensão .aspx. • Quando um browser requisita uma página aspx, o “runtime” ASP.NET compila o conteúdo numa classe .NET. A partir daí essa classe processa os acessos à página original. • A lógica do programa pode ser fisicamente separada do HTML da página através da técnica “code-behind”. Francisco Hoyos

  16. .NET Web Services • Um dos principais focos da plataforma .NET. • Classes .NET pré-existentes podem ter seus métodos facilmente expostos como serviços web. • Um serviço web é definido através de uma página .asmx. Francisco Hoyos

  17. Servidor “na raça” • Receber requisição SOAP via HTTP • Usar XML parser para obter nome da operação invocada e seus parâmetros • Montar mensagem SOAP de resposta “manualmente”, usando uma biblioteca XML • Enviar resposta SOAP via HTTP Francisco Hoyos

  18. Serviço web definido no .asmx <@% WebService class="MathServiceJit" language="C#"%> using System.Web.Services; public class MathServiceJit { [WebMethod] public double Add(double x, double y) { return x + y; } [WebMethod] public double Subtract(double x, double y) { return x - y; } } Francisco Hoyos

  19. Serviço web fora do .asmx:arquivo fonte C# using System.Web.Services; public class MathService { [WebMethod] public double Add(double x, double y) { return x + y; } [WebMethod] public double Subtract(double x, double y) { return x - y; } } Francisco Hoyos

  20. Serviço web fora do .asmx:página .asmx <@% WebService class="MathService" language="C#"%> OU <@% WebService class="MathService"%> OU <@% WebService class=“MyNS.MathService, MyAssembly"%> • A forma recomendada de implementação é manter e compilar separadamente a classe que implementa o serviço web. • No Visual Studio .NET a diretiva @WebService é adicionada automaticamente ao arquivo .asmx. Francisco Hoyos

  21. Atributo WebService [WebService(Namespace="http://www.notashop.com/wscr", Description="SimpleService1", Name="Try This Out")] public class MyService { ... } • Namespace deve ser usado quando o serviço for disponibilizado. Se não for especificado, http://tempuri.org será automaticamente usado. Francisco Hoyos

  22. Atributo WebMethod • Pode vir acompanhado das seguintes propriedades: • Description • MessageName • EnableSession • CacheDuration • TransactionOption • BufferResponse Francisco Hoyos

  23. WebMethod: Description, MessageName e EnableSession • Description: Descrição textual da operação. Aparece no WSDL. • MessageName: Nome pelo qual a operação é conhecida pelo cliente. Aparece no WSDL. • EnableSession: Se true, o serviço tem acesso aos objetos que mantêm o estado da sessão com cada cliente. Francisco Hoyos

  24. WebMethod: CacheDuration • CacheDuration: Especifica o tempo em segundos que o resultado de uma operação será armazenado na memória. O resultado é mantido na forma de um par request/response. Novos pedidos de execução da mesma operação, com os mesmos parâmetros, serão respondidos com dados diretamente do cache, sem a invocação do serviço. Francisco Hoyos

  25. WebMethod: TransactionOption e BufferResponse • TransactionOption: Permite especificar que o web method seja executado numa transação. A transação é interrompida quando uma exceção é lançada ou quando o método SetAbort da classe System.EnterpriseServices.ContextUtil é chamado. • BufferResponse: Se true, a resposta do serviço é inteiramente armazenada antes de ser enviada ao cliente, ao invés de ser enviada em várias pequenas partes. Francisco Hoyos

  26. A classe WebService using System.Web.Services; public class MathService : System.Web.Services.WebService { [WebMethod] public double Add(double x, double y) { return x + y; } } • Se o serviço especificar WebService como classe base, ele ganha acesso a objetos ASP.NET, tais como Application, Session, User e Context, que oferecem facilidades para gerenciamento de sessão e identificação do usuário do serviço. Francisco Hoyos

  27. .NET WS: exemplo using System; using System.Web.Services; public class Point { public double x; public double y; } [WebService(Namespace="urn:geometry")] public class Geometry { [WebMethod] public double Distance(Point orig, Point dest) { return Math.Sqrt(Math.Pow(orig.x-dest.x, 2) + Math.Pow(orig.y-dest.y, 2)); } } Francisco Hoyos

  28. .NET WS: SOAP request <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Distance xmlns="urn:geometry"> <orig> <x>0</x> <y>0</y> </orig> <dest> <x>3</x> <y>4</y> </dest> </Distance> </soap:Body> </soap:Envelope> Francisco Hoyos

  29. .NET WS: SOAP response <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <DistanceResponse xmlns="urn:geometry"> <DistanceResult>5</DistanceResult> </DistanceResponse> </soap:Body> </soap:Envelope> Francisco Hoyos

  30. .NET WS: uso de atributos using System; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Serialization; public class Point { [XmlAttribute] public double x; [XmlAttribute] public double y; } [WebService(Namespace="urn:geometry")] public class Geometry { [WebMethod] [SoapDocumentMethod(RequestElementName="CalcDistance", ResponseElementName="CalculatedDistance")] [return: XmlElement("result")] public double Distance([XmlElement("o")] Point orig, [XmlElement("d")] Point dest) { return Math.Sqrt(Math.Pow(orig.x-dest.x, 2) + Math.Pow(orig.y-dest.y, 2)); } } Francisco Hoyos

  31. SOAP request resultante <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <CalcDistance xmlns="urn:geometry"> <o x=“0” y=“0” /> <d x=“3” y=“4” /> </CalcDistance> </soap:Body> </soap:Envelope> Francisco Hoyos

  32. SOAP response resultante <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <CalculatedDistance xmlns="urn:geometry"> <result>5</result> </CalculatedDistance> </soap:Body> </soap:Envelope> Francisco Hoyos

  33. Acessando o SOAP header 1 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <x:UsernameToken xmlns:x="http://example.org/security"> <username>Mary</username> <password>yraM</password> </x:UsernameToken> </soap:Header> <soap:Body> <CalcDistance xmlns="urn:geometry"> ... Francisco Hoyos

  34. Acessando o SOAP header 2 • Criar uma classe .NET que representa o tipo do elemento desejado no header, conforme o XML Schema [XmlType(Namespace="http://example.org/security")] [XmlRoot(Namespace="http://example.org/security")] public class UsernameToken : SoapHeader { public string username; public string password; } Francisco Hoyos

  35. Acessando o SOAP header 3 using System; using System.Web.Services; using System.Web.Services.Protocols; [WebService(Namespace="urn:geometry")] public class Geometry { public UsernameToken Token; [WebMethod] [SoapHeader("Token")] public double Distance(Point orig, Point dest) { if (!Token.username.Equals(Reverse(Token.password))) throw new Exception("access denied"); return Math.Sqrt(Math.Pow(orig.x-dest.x, 2) + Math.Pow(orig.y-dest.y, 2)); } } Francisco Hoyos

  36. Cliente “na raça” • Montar mensagem SOAP “manualmente”, usando uma biblioteca XML • Enviar mensagem via HTTP • Receber resposta SOAP via HTTP • Usar XML parser para obter valor de retorno incluído na resposta Francisco Hoyos

  37. .NET WS: cliente • O consumo de serviços web em .NET é feito através de classes proxy. • O programa wsdl.exe gera uma classe proxy a partir do WSDL do serviço. Entre outras opções, wsdl.exe permite selecionar a linguagem de programação em que o proxy é implementado. • Visual Studio .NET gera automaticamente a classe proxy através da opção “Add Web Reference”. Francisco Hoyos

  38. Adicionando uma Web Reference 1 Francisco Hoyos

  39. Adicionando uma Web Reference 2 Francisco Hoyos

  40. Adicionando uma Web Reference 3 Francisco Hoyos

  41. Usando a classe proxy private void Submit1_Click(object sender, System.EventArgs e) { Simple1.TryThisOut svc1 = new Simple1.TryThisOut(); SvcOutput1.Text = svc1.WakeUp(SvcInput1.Text); } Francisco Hoyos

  42. .NET WS: invocação assíncrona de serviços • Para cada operação XYZ do serviço são gerados dois métodos para invocação assíncrona: • BeginXYZ(): invoca XYZ sem aguardar pela resposta, retornando ao chamador imediatamente. • EndXYZ(): retorna o resultado da invocação a XYZ. Francisco Hoyos

  43. .NET WS: invocação assíncrona, polling static IAsyncResult tempHolder1; WeatherFetcher.USWeather USW = new WeatherFetcher.USWeather( ); private void Button1_Click(object sender, System.EventArgs e) { Button1.Enabled = false; tempHolder1 = USW.BeginGetWeatherReport(TextBox1.Text, null, null); } private void Button2_Click(object sender, System.EventArgs e) { if (tempHolder1.IsCompleted) { Label2.Text += USW.EndGetWeatherReport(tempHolder1) + "<br>"; Button1.Enabled = true; tempHolder1 = null; } else { Label2.Text += "1 is Still completing..."; } } Francisco Hoyos

  44. .NET WS: invocação assíncrona, callback private void Button1_Click(object sender, System.EventArgs e) { Button1.Enabled = false; AsyncCallback callBack = new AsyncCallback(MyCallBack); USW.BeginGetWeatherReport(TextBox1.Text, callBack, USW); Label2.Text = "Web Service called..."; } public void MyCallBack(IAsyncResult AsyncResult) { string ReturnValue; ReturnValue = USW.EndGetWeatherReport(AsyncResult); Label2.Text += "<br>" + "Weather Report = " + ReturnValue; Button1.Enabled = true; } Francisco Hoyos

  45. J2EE • Plataforma para o desenvolvimento de aplicações para o meio empresarial • Antecede web services • J2EE 1.4 foi a primeira versão a adotar completamente o paradigma de web services Francisco Hoyos

  46. J2EE: plataforma Francisco Hoyos

  47. J2EE 1.4: APIs Francisco Hoyos

  48. J2EE 1.4 • Preocupação com interoperabilidade: adoção do Basic Profile (BP), publicado pela Web Services Interoperability Organization (WS-I) (www.ws-i.org). • BP especifica como usar XML, WSDL, SOAP e UDDI conjuntamente, eliminando ambigüidades. Francisco Hoyos

  49. J2EE Web Service APIs • JAX-RPC (Java API for XML-based RPC): permite a criação (servidor) e consumo (cliente) de web services • SAAJ (SOAP with Attachments API for Java): usada na criação e manipulação baixo nível de mensagens SOAP • JAXR (Java API for XML Registries): acesso aos “catálogos” UDDI • JAXP (JAVA API for XML Processing): junto com DOM e SAX, permite a manipulação de documentos XML Francisco Hoyos

  50. JAX-RPC: servidor • Existem dois modelos de programação: • JAX-RPC Service Endpoint (JSE): mais simples, baseado em servlet containers • Enterprise Java Beans (EJB) endpoint: baseado em stateless EJBs Francisco Hoyos

More Related