Departamento de Engenharia Informática 2010/2011 Sistemas Empresariais Integrados Tutorial de Web Services 2º semestre Pretende-se desenvolver um Web Service que converte valores de temperatura de graus Fahrenheit para graus Celsius. Adicionalmente, pretende-se usar esse Web Service no âmbito de uma orquestração. Este tutorial explica como fazer ambas as coisas. Por exemplo, dado um valor de temperatura em graus Fahrenheit (100 F), < Temperature> <Fahrenheit>100</Fahrenheit> <Celsius></Celsius> <Temperature> pretende-se que a orquestração devolva o resultado em graus Celsius (37,8 C): < Temperature> <Fahrenheit>100</Fahrenheit> <Celsius>37.8</Celsius> <Temperature> Criação do Web Service 1. Abra o Visual Studio 2010 com privilégios de administrador e crie um novo projecto com File -> New -> Web Site 2. Seleccione ASP.NET Empty Web Site (Visual C#) IST/DEI Pág. 1 de 11
3. Carregue em Browse para abrir a janela Choose Location. 4. Do lado esquerdo, clique em Local IIS, e do lado direito seleccione Default Web Site e carregue no botão Create New Web Application. 5. Dê o nome à aplicação: TempConvert 6. Com a aplicação TempConvert seleccionada, clique em Open. 7. Clique em OK para criar o projecto. 8. Clique com o botão direito sobre o projecto e seleccione Add New Item. 9. Na lista de templates, seleccione Web Service (Visual C#) e dê o nome Service.asmx. 10. Confirme que a opção Place code in separate file está seleccionada e clique em Add para criar o Web Service. 11. Abra o ficheiro Service.cs que está dentro da pasta App_Code. 12. Substitua o namspace do serviço de http://tempuri.org/ para http://demows/ IST/DEI Pág. 2 de 11
13. Apague o método HelloWorld() e substitua-o pelo seguinte código: 14. Faça Build do projecto. [WebMethod] public double ConvertTemperature(double dfahrenheit) { return ((dfahrenheit - 32) * 5) / 9; } Teste do Web Service 15. Abra o seguinte endereço no browser: http://localhost/tempconvert/service.asmx 16. Invoque o método ConvertTemperature com o valor 100 e verifique o resultado. Criação da aplicação BizTalk 17. Abra o Visual Studio 2010 com privilégios de administrador e crie um novo projecto BizTalk em C:\Tutorial\Lessons, com o nome DemoWS. (Se o projecto já existir apague-o primeiro.) 18. Adicione um novo schema ao projecto, com o nome: Temperature.xsd 19. Mude o nome do nó Root para Temperature. 20. Adicione dois elementos debaixo desse nó, chamados Fahrenheit e Celsius. 21. Nas propriedades de ambos os elementos, escolha o tipo de dados xs:double 22. Clique num dos elementos com o botão direito e seleccione Promote -> Show Promotions. IST/DEI Pág. 3 de 11
23. Coloque os dois elementos como propriedades distinguidas. 24. Clique com o botão direito sobre o projecto, seleccione Add Service Reference, clique no botão Advanced e depois clique no botão Add Web Reference. 25. Indique o URL: http://localhost/tempconvert/service.asmx do Web Service criado nos passos anteriores. 26. Repare que o nome da referência é localhost. Clique em Add Reference. 27. Adicione uma nova orquestração ao projecto, com o nome: Orchestration.odx 28. A orquestração a ser desenvolvida terá de: receber do exterior um pedido inicial com um valor em Fahrenheit; construir o pedido a enviar ao WS; enviar pedido ao WS; receber resposta do WS; construir o resultado final; enviar resultado final para o exterior. 29. Adicione as seguintes shapes à orquestração: Uma shape Receive para receber o pedido inicial; IST/DEI Pág. 4 de 11
Uma shape Message Assignment para construir o pedido a enviar ao WS; Uma shape Send para enviar o pedido ao WS; Uma shape Receive para receber a resposta do WS; Uma shape Message Assignment para construir o resultado final; Uma shape Send para enviar o resultado final para o exterior. 30. Nas propriedades do Receive_1 coloque Activate = True. 31. No Orchestration View, crie quatro mensagens com os seguintes nomes: msgorchinput é pedido inicial msgorchoutput é resultado final msgconvertrequest é o pedido ao WS msgconvertresponse é a resposta do WS IST/DEI Pág. 5 de 11
32. Nas propriedades de cada mensagem indique o message type: msgorchinput Temperature.xsd msgorchoutput Temperature.xsd msgconvertrequest Web Message Type: DemoWS.localhost.Service_.ConvertTemperature_request msgconvertresponse Web Message Type: DemoWS.localhost.Service_.ConvertTemperature_response 33. Na orquestração, seleccione as shapes de send e receive, e nas propriedades indique as mensagens enviadas/recebidas por cada uma delas: Receive_1: msgorchinput Send_1: msgconvertrequest Receive_2: msgconvertresponse Send_2: msgorchoutput 34. Nas propriedades das shapes Construct Message indique as mensagens construídas: ConstructMessage_1: msgconvertrequest ConstructMessage_2: msgorchoutput 35. Faça duplo clique sobre a shape MessageAssignment_1 e escreva a expressão: msgconvertrequest.dfahrenheit = msgorchinput.fahrenheit; 36. Faça duplo clique sobre a shape MessageAssignment_2 e escreva a expressão: msgorchoutput = msgorchinput; msgorchoutput.celsius = msgconvertresponse.converttemperatureresult; 37. Crie uma porta para receber o pedido inicial e coloque-a perto do Receive_1: Nome: PortOrchInput Create New Port Type: PortTypeOrchInput One-Way Internal Direction: I will always be receiving Binding: Specify later 38. Crie uma porta para enviar o resultado final e coloque-a perto do Send_2: Nome: PortOrchOutput Create New Port Type: PortTypeOrchOutput One-Way Internal IST/DEI Pág. 6 de 11
Direction: I will always be sending Binding: Specify later 39. Crie uma porta para interagir com o WS e coloque-a perto do Send_1: Nome: PortConvertTemperature Use an existing Port Type: Web Port Types: DemoWS.localhost.Service_.Service Binding: Specify now 40. Ligue as shapes às portas conforme a figura seguinte: 41. Nas configurações do projecto, assine a assembly com um strong name. Pode usar o mesmo strong name que já utilizou nos outros tutoriais. IST/DEI Pág. 7 de 11
42. Nas propriedades de deployment, indique o nome da aplicação DemoWS, indique a máquina (LOCAL), e coloque Redeploy a True, bem como Restart Host Instances. 43. Faça build e deploy da aplicação. Configuração da aplicação na consola de administração 44. Na consola de administração do BizTalk, clique com o botão direito na aplicação DemoWS e seleccione Configure. IST/DEI Pág. 8 de 11
45. Escolha BizTalkServerApplication para servir de host da orquestração. 46. Crie uma Receive Port e uma Receive Location para receber o pedido inicial. Esta porta deve ser do tipo FILE e deve usar a pipeline XMLReceive. Crie o directório onde o pedido inicial será colocado e configure a porta para usar esse directório. IST/DEI Pág. 9 de 11
47. Crie uma Send Port para enviar o resultado final. Esta porta deve ser do tipo FILE e deve usar a pipeline XMLTransmit. Crie o directório onde o resultado final será colocado e configure a porta para usar esse directório. 48. A porta para comunicar com o WS foi criada automaticamente quando se adicionou a Web Reference. Verifique que a porta usa o adaptador SOAP e as pipelines PassThru. IST/DEI Pág. 10 de 11
49. Depois de configuradas as portas, arranque a aplicação com Start. Teste da aplicação 50. No Visual Studio, clique com o botão direito no schema Temperature.xsd e seleccione Generate Instance. 51. Use esta instância para criar um pedido inicial com um valor de temperatura em Fahrenheit, p.ex. 100. <ns0:temperature xmlns:ns0="http://demows.temperature"> <Fahrenheit>100</Fahrenheit> <Celsius></Celsius> </ns0:temperature> 52. Coloque este pedido inicial na porta que dispara a orquestração. 53. Verifique que a orquestração produz um resultado na porta de saída e que o resultado contém o seguinte: <?xml version="1.0" encoding="utf-16"?> <ns0:temperature xmlns:ns0="http://demows.temperature"> <Fahrenheit>100</Fahrenheit> <Celsius>37.777777777777779</Celsius> </ns0:temperature> IST/DEI Pág. 11 de 11