Tutorial de serviços da Web SOAP: O que é protocolo SOAP? EXEMPLO
O que é SABÃO?
SOAP é um protocolo baseado em XML para acessar serviços da web por HTTP. Ele possui algumas especificações que podem ser usadas em todos os aplicativos.
SOAP é conhecido como Simple Object Access Protocol, mas posteriormente foi abreviado para SOAP v1.2. SOAP é um protocolo ou, em outras palavras, é uma definição de como os serviços da Web se comunicam entre si ou com os aplicativos clientes que os invocam.
SOAP foi desenvolvido como uma linguagem intermediária para que aplicativos construídos em diversas linguagens de programação pudessem se comunicar facilmente entre si e evitar o esforço extremo de desenvolvimento.
Introdução ao SOAP
No mundo de hoje, há um grande número de aplicativos construídos em diferentes linguagens de programação. Por exemplo, poderia haver uma aplicação web projetada em Java, outro em .Net e outro em PHP.
A troca de dados entre aplicativos é crucial no mundo conectado de hoje. Mas a troca de dados entre estas aplicações heterogéneas seria complexa. Assim será a complexidade do código para realizar essa troca de dados.
Um dos métodos utilizados para combater essa complexidade é utilizar XML (Extensible Markup Language) como linguagem intermediária para troca de dados entre aplicações.
Toda linguagem de programação pode compreender a linguagem de marcação XML. Conseqüentemente, o XML foi usado como meio subjacente para troca de dados.
Mas não existem especificações padrão sobre o uso de XML em todas as linguagens de programação para troca de dados. É aí que entra o software SOAP.
SOAP foi projetado para funcionar com XML sobre HTTP e possui algum tipo de especificação que pode ser usada em todos os aplicativos. Veremos mais detalhes sobre o protocolo SOAP nos capítulos subsequentes.
Vantagens do SOAP
SOAP é o protocolo usado para intercâmbio de dados entre aplicativos. Abaixo estão algumas das razões pelas quais o SOAP é usado.
- Ao desenvolver serviços da Web baseados em SOAP, você precisa ter alguma linguagem que possa ser usada para que os serviços da Web se comuniquem com os aplicativos clientes. SOAP é o meio perfeito que foi desenvolvido para atingir esse propósito. Este protocolo também é recomendado pelo consórcio W3C, que é o órgão regulador de todos os padrões da web.
- SOAP é um protocolo leve usado para intercâmbio de dados entre aplicativos. Observe a palavra-chave 'leve.' Como a programação SOAP é baseada na linguagem XML, que por si só é uma linguagem leve de intercâmbio de dados, o SOAP é um protocolo que também se enquadra na mesma categoria.
- SOAP foi projetado para ser independente de plataforma e também para ser independente de sistema operacional. Portanto, o protocolo SOAP pode funcionar com qualquer aplicativo baseado em linguagem de programação em ambos Windows com Linux plataforma.
- Funciona no protocolo HTTP –SOAP funciona no protocolo HTTP, que é o protocolo padrão usado por todos os aplicativos da web. Conseqüentemente, não há nenhum tipo de personalização necessária para executar os serviços da web construídos no protocolo SOAP para funcionar na World Wide Web.
Blocos de construção SOAP
A especificação SOAP define algo conhecido como “mensagem SOAP”que é o que é enviado ao serviço web e ao aplicativo cliente.
O diagrama abaixo da arquitetura SOAP mostra os vários blocos de construção de uma mensagem SOAP.

A mensagem SOAP nada mais é do que um mero documento XML que possui os componentes abaixo.
- Um elemento Envelope que identifica o documento XML como uma mensagem SOAP – Esta é a parte que contém a mensagem SOAP e é usada para encapsular todos os detalhes na mensagem SOAP. Este é o elemento raiz na mensagem SOAP.
- Um elemento Header que contém informações de cabeçalho – O elemento header pode conter informações como credenciais de autenticação que podem ser usadas pelo aplicativo de chamada. Também pode conter a definição de tipos complexos que podem ser usados na mensagem SOAP. Por padrão, a mensagem SOAP pode conter parâmetros que podem ser de tipos simples, como strings e números, mas também podem ser um tipo de objeto complexo.
Um exemplo simples de serviço SOAP de tipo complexo é mostrado abaixo.
Suponha que queiramos enviar um tipo de dados estruturado que tenha uma combinação de “Tutorial Name” e “Tutorial Descriptíon”, então definiríamos o tipo complexo como mostrado abaixo.
O tipo complexo é definido pela tag do elemento . Todos os elementos necessários da estrutura junto com seus respectivos tipos de dados são então definidos na coleção de tipos complexos.
<xsd:complexType> <xsd:sequence> <xsd:element name="Tutorial Name" type="string"/> <xsd:element name="Tutorial Description" type="string"/> </xsd:sequence> </xsd:complexType>
- Um elemento Body que contém informações de chamada e resposta – Este elemento é o que contém os dados reais que precisam ser enviados entre o serviço web e o aplicativo de chamada. Abaixo está um exemplo de serviço web SOAP do corpo SOAP que realmente funciona no tipo complexo definido na seção de cabeçalho. Aqui está a resposta do Tutorial Name e Tutorial Descriptíon que é enviado para o aplicativo de chamada que chama esse serviço da web.
<soap:Body> <GetTutorialInfo> <TutorialName>Web Services</TutorialName> <TutorialDescription>All about web services</TutorialDescription> </GetTutorialInfo> </soap:Body>
Estrutura da mensagem SOAP
Uma coisa a observar é que as mensagens SOAP normalmente são geradas automaticamente pelo serviço web quando ele é chamado.
Sempre que uma aplicação cliente chamar um método no serviço web, o serviço web irá gerar automaticamente uma mensagem SOAP que conterá os detalhes necessários dos dados que serão enviados do serviço web para a aplicação cliente.
Conforme discutido no tópico anterior deste tutorial SOAP, uma mensagem SOAP simples possui os seguintes elementos –
- O elemento Envelope
- O elemento de cabeçalho e
- O elemento corporal
- O elemento Fault (opcional)
Vejamos abaixo um exemplo de uma mensagem SOAP simples e veja o que o elemento realmente faz.
- Como pode ser visto na mensagem SOAP acima, a primeira parte da mensagem SOAP é o elemento do envelope que é usado para encapsular toda a mensagem SOAP.
- O próximo elemento é o corpo SOAP que contém os detalhes da mensagem real.
- Nossa mensagem contém um serviço web chamado “Guru99WebService”.
- O “Guru99Webservice” aceita um parâmetro do tipo ‘int’ e tem o nome de TutorialID.
Agora, a mensagem SOAP acima será passada entre o serviço web e a aplicação cliente.
Você pode ver como as informações acima são úteis para o aplicativo cliente. A mensagem SOAP informa à aplicação cliente qual é o nome do serviço Web, e também quais parâmetros ele espera e também qual o tipo de cada parâmetro que é obtido pelo serviço Web.
Elemento de envelope SOAP
A primeira parte do bloco de construção é o Envelope SOAP.
O Envelope SOAP é usado para encapsular todos os detalhes necessários das mensagens SOAP, que são trocadas entre o serviço web e a aplicação cliente.
O elemento envelope SOAP é usado para indicar o início e o fim de uma mensagem SOAP. Isso permite que o aplicativo cliente que chama o serviço da Web saiba quando a mensagem SOAP termina.
Os seguintes pontos podem ser observados no elemento envelope SOAP.
- Toda mensagem SOAP precisa ter um elemento Envelope raiz. É absolutamente obrigatório que a mensagem SOAP tenha um elemento de envelope.
- Cada elemento Envelope precisa ter pelo menos um elemento de corpo de sabão.
- Se um elemento Envelope contiver um elemento de cabeçalho, ele não deverá conter mais de um e deverá aparecer como o primeiro filho do Envelope, antes do elemento body.
- O envelope muda quando as versões SOAP mudam.
- Um processador SOAP compatível com v1.1 gera uma falha ao receber uma mensagem contendo o namespace do envelope v1.2.
- Um processador SOAP compatível com v1.2 gera uma falha de incompatibilidade de versão se receber uma mensagem que não inclua o namespace do envelope v1.2.
Abaixo está um exemplo de API SOAP da versão 1.2 do elemento de envelope SOAP.
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle=" http://www.w3.org/2001/12/soap-encoding">
<soap:Body>
<Guru99WebService xmlns="http://tempuri.org/">
<TutorialID>int</TutorialID>
</Guru99WebService>
</soap:Body>
</SOAP-ENV:Envelope>
A mensagem de falha
Quando uma solicitação é feita a um serviço da web SOAP, a resposta retornada pode ter dois formatos, que são uma resposta bem-sucedida ou uma resposta de erro. Quando um sucesso é gerado, a resposta do servidor será sempre uma mensagem SOAP. Mas se forem geradas falhas SOAP, elas serão retornadas como erros “HTTP 2”.
A mensagem de falha SOAP consiste nos seguintes elementos.
- – Este é o código que designa o código do erro. O código de falha pode ser qualquer um dos valores abaixo
- SOAP-ENV:VersionMismatch – ocorre quando um namespace inválido para o elemento SOAP Envelope é encontrado.
- SOAP-ENV:MustUnderstand – Um elemento filho imediato do elemento Header, com o atributo mustUnderstand definido como “1”, não foi compreendido.
- SOAP-ENV:Client – A mensagem foi formada incorretamente ou continha informações incorretas.
- SOAP-ENV:Servidor – Houve um problema com o servidor, portanto a mensagem não pôde prosseguir.
- – Esta é a mensagem de texto que fornece uma descrição detalhada do erro.
- (Opcional)– Esta é uma sequência de texto que indica quem causou a falha.
- (Opcional) – Este é o elemento para mensagens de erro específicas do aplicativo. Portanto, o aplicativo pode ter uma mensagem de erro específica para diferentes cenários de lógica de negócios.
Exemplo de mensagem de falha
Um exemplo de mensagem de falha é fornecido abaixo. O erro é gerado caso o cenário em que o cliente tente utilizar um método chamado TutorialID na classe GetTutorial.
A mensagem de falha abaixo é gerada caso o método não exista na classe definida.
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
<faultstring xsi:type="xsd:string">
Failed to locate method (GetTutorialID) in class (GetTutorial)
</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Saída:
Ao executar o código acima, será exibido um erro como “Falha ao localizar o método (GetTutorialID) na classe (GetTutorial)”
Modelo de comunicação SOAP
Toda a comunicação via SOAP é feita através do protocolo HTTP. Antes do SOAP, muitos serviços web usou o estilo RPC (Remote Procedure Call) padrão para comunicação. Esse era o tipo de comunicação mais simples, mas tinha muitas limitações.
Agora neste tutorial da API SOAP, vamos considerar o diagrama abaixo para ver como essa comunicação funciona. Neste exemplo, vamos supor que o servidor hospede um serviço web que fornece 2 métodos como
- ObterEmployee – Isso obteria todos os detalhes do funcionário
- DefinirEmployee – Isso definiria o valor dos detalhes como departamento de funcionários, salário, etc.
Na comunicação normal do estilo RPC, o cliente apenas chamaria os métodos em sua solicitação e enviaria os parâmetros necessários ao servidor, e o servidor enviaria então a resposta desejada.
O modelo de comunicação acima tem as sérias limitações abaixo
- Não é independente de idioma – O servidor que hospeda os métodos estaria em uma linguagem de programação específica e normalmente as chamadas para o servidor seriam apenas nessa linguagem de programação.
- Não é o protocolo padrão – Quando é feita uma chamada para o procedimento remoto, a chamada não é realizada através do protocolo padrão. Isso era um problema, já que quase toda a comunicação pela web tinha que ser feita por meio do protocolo HTTP.
- firewalls – Como as chamadas RPC não passam pelo protocolo normal, portas separadas precisam ser abertas no servidor para permitir que o cliente se comunique com o servidor. Normalmente, todos os firewalls bloqueariam esse tipo de tráfego, e geralmente era necessária muita configuração para garantir que esse tipo de comunicação entre o cliente e o servidor funcionasse.
Para superar todas as limitações citadas acima, o SOAP usaria então o modelo de comunicação abaixo
- O cliente formataria as informações relativas à chamada do procedimento e quaisquer argumentos em uma mensagem SOAP e as enviaria ao servidor como parte de uma solicitação HTTP. Este processo de encapsular os dados em uma mensagem SOAP era conhecido como Marshallagem.
- O servidor então desembrulharia a mensagem enviada pelo cliente, veria o que o cliente solicitou e então enviaria a resposta apropriada de volta ao cliente como uma mensagem SOAP. A prática de desembrulhar uma solicitação enviada pelo cliente é conhecida como Desmarcação.
Exemplo prático de SOAP
Agora neste tutorial do SoapUI, vamos ver um exemplo prático de SOAP,
Provavelmente, uma das melhores maneiras de ver como as mensagens SOAP são geradas é ver um serviço web em ação.
Este tópico examinará o uso do MicrosoftFramework .Net para construir um serviço web ASMX. Este tipo de serviço web suporta SOAP versão 1.1 e versão 1.2.
Os serviços da web ASMX geram automaticamente o Linguagem de definição de serviço da Web (WSDL) documento. Este documento WSDL é exigido pelo aplicativo cliente chamador para que o aplicativo saiba o que o serviço da web é capaz de fazer.
Em nosso exemplo, vamos criar um web service simples, que será utilizado para retornar uma string para a aplicação que chama o web service.
Este serviço web será hospedado em um Asp.Net aplicativo da web. Em seguida, invocaremos o serviço web e veremos o resultado retornado pelo serviço web.
O Visual Studio também nos mostrará qual é a mensagem SOAP que está sendo passada entre o serviço web e o aplicativo de chamada.
O primeiro pré-requisito para configurar nosso aplicativo de serviço Web, que pode ser feito seguindo as etapas abaixo.
Certifique-se de ter o Visual Studio 2013 instalado em seu sistema para este exemplo.
Passo 1) A primeira etapa é criar um aplicativo Web ASP.Net vazio. No Visual Studio 2013, clique na opção de menu Arquivo->Novo projeto.
Ao clicar na opção Novo Projeto, o Visual Studio fornecerá outra caixa de diálogo para escolher o tipo de projeto e fornecer os detalhes necessários do projeto. Isso é explicado na próxima etapa.
Passo 2) Nesta etapa,
- Certifique-se de escolher primeiro o C# modelo web do aplicativo Web ASP.NET. O projeto deve ser deste tipo para criar um projeto de serviços SOAP. Ao escolher esta opção, o Visual Studio executará as etapas necessárias para adicionar os arquivos necessários para qualquer aplicativo baseado na Web.
- Dê um nome ao seu projeto que no nosso caso foi webservice.asmx. Em seguida, certifique-se de fornecer um local onde os arquivos do projeto serão armazenados.
Uma vez feito isso, você verá o arquivo do projeto criado em seu gerenciador de soluções no Visual Studio 2013.
Passo 3) Nesta etapa,
Vamos adicionar um arquivo de serviço da Web ao nosso projeto
- Primeiro clique com o botão direito no arquivo do projeto conforme mostrado abaixo
- Ao clicar com o botão direito no arquivo do projeto, você terá a oportunidade de escolher a opção “Adicionar-> Serviço Web (ASMX) para adicionar um arquivo de serviço web. Basta fornecer um nome de Tutorial Service para o arquivo de nome do serviço da web.
Passo 4) Adicione o código a seguir ao arquivo asmx do Tutorial Service.
Explicação do código:
- Esta linha de código fornece um nome para seu arquivo de serviço da web. Esta é uma etapa importante porque permite que o aplicativo cliente chame o serviço web por meio do nome do serviço web.
- Normalmente, um arquivo de classe é usado para encapsular a funcionalidade de um serviço web. Assim o arquivo de classe terá a definição de todos os métodos web que irão fornecer alguma funcionalidade à aplicação cliente.
- Aqui [WebMethod] é conhecido como um atributo que descreve uma função. A etapa subsequente cria uma função chamada “Guru99WebService”, mas com a inclusão desta etapa de adição de um atributo [WebMethod] garante que este método possa ser invocado por uma aplicação cliente. Se esse atributo não estiver em vigor, o método nunca poderá ser chamado por um aplicativo cliente.
- Aqui estamos definindo uma função chamada 'Guru99WebService' que será usada para retornar uma string para o aplicativo cliente chamador. Esta função é um serviço web que pode ser chamado por qualquer aplicativo cliente.
- Estamos usando a instrução return para retornar a string “Este é um serviço da Web Guru99” para o aplicativo cliente.
Se o código for executado com sucesso, a seguinte saída será mostrada quando você executar o código no navegador.
Saída:
- A saída mostra claramente que o nome do nosso serviço web é “Guru99 Web Service”, que é o resultado de dar um nome ao nosso serviço web.
- Também podemos ver que podemos invocar o serviço web. Se clicarmos no botão Invocar, obteremos a resposta abaixo no navegador da web.
A saída acima,
- Isso mostra claramente que ao invocar o método web, a string “Este é um serviço Web Guru99” é retornada.
- O Visual Studio também permite visualizar a solicitação e a resposta da mensagem SOAP que é gerada quando o serviço da Web acima é chamado.
A solicitação SOAP gerada quando o serviço web é chamado é mostrada abaixo.
Explicação do código:
- A primeira parte da mensagem SOAP é o elemento envelope, que foi discutido nos capítulos anteriores. Este é o elemento de encapsulamento que está presente em todas as mensagens SOAP.
- O Corpo SOAP é o próximo elemento e contém os detalhes reais da mensagem SOAP.
- A terceira parte é o elemento que especifica que queremos chamar o serviço denominado 'Guru99WebService'.
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<Guru99WebServiceResponse xmlns="http://tempuri.org/">
<Guru99WebServiceResult>string</Guru99WebServiceResult>
</Guru99WebServiceResponse>
</soap:Body>
</soap:Envelope>
Explicação do código:
- A primeira parte da mensagem SOAP é o elemento envelope, que foi discutido nos capítulos anteriores. Este é o elemento de encapsulamento que está presente em todas as mensagens SOAP.
- O Corpo SOAP é o próximo elemento e contém os detalhes reais da mensagem SOAP.
- A parte interessante que você verá agora é o atributo ‘string’. Isso informa ao aplicativo cliente que o serviço da web que está sendo chamado retorna um objeto do tipo string. Isso é muito útil porque se o aplicativo cliente não saber o que o serviço da web retorna.
Resumo
- SOAP é um protocolo usado para trocar dados entre aplicativos construídos em diferentes linguagens de programação.
- SOAP é baseado na especificação XML e funciona com o protocolo HTTP. Isso o torna perfeito para uso em aplicativos da web.
- Os blocos de construção SOAP consistem em uma mensagem SOAP. Cada mensagem SOAP consiste em um elemento de envelope, um cabeçalho e um elemento de corpo.
- O elemento envelope é o elemento obrigatório na mensagem SOAP e é usado para encapsular todos os dados na mensagem SOAP.
- O elemento header pode ser usado para conter informações como informações de autenticação ou a definição de tipos de dados complexos.
- O elemento body é o elemento principal que contém a definição dos métodos da web junto com qualquer informação de parâmetro, se necessário.












