ASP.Net Web Services e SOAP Headers (ASP.Net Web Services and SOAP Headers)
24/07/2010 Deixe um comentário
A comunicação utilizando o formato SOAP é a prática mais comum de implementação ao construirmos web services.
SOAP Headers (cabeçalhos SOAP) são uma maneira diferente de passarmos dados para um web service caso os dados não estejam diretamente relacionados à funcionalidade primária do web method que estamos invocando.
A utilização de SOAP Headers é indicada quando temos de customizar o modo de autenticação de nossos serviços. Ao invés de criarmos parâmetros em nossos Web Methods para autenticação, nós podemos exigir a passagem de um SOAP Header com os dados necessários para autenticação.
Para utilizarmos SOAP Headers como parte do modelo de autenticação de nossos web services, devemos:
1º – Criar uma classe que encapsule os dados que devem transitar no SOAP Header, e fazer a mesma herdar de “System.Web.Services.Protocols.SoapHeader”
| using System.Web.Services.Protocols;
public class WorkerAuth : SoapHeader public string Password { get; set; } |
2º – Adicionar ao serviço uma propriedade pública que faça referência a entidade que representa o nosso SOAP Header.
| [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] public class WorkerService : System.Web.Services.WebService { /// <summary> /// Entidade de autenticação… /// Deve conter os dados que são transitados /// entre o cabeçalho das requisições… /// </summary> public WorkerAuth Authentication { get; set; } } |
3º – Marcar em nossos web methods com qual SOAP Header eles devem trabalhar, através do atributo “System.Web.Services.Protocols.SoapHeaderAttribute”…
| using System.Web.Services.Protocols;
[WebService(Namespace = "http://tempuri.org/")] /// <summary> |
4º – Adicionar aos nossos web methods as regras de negócios necessárias para validação das informações trafegadas no SOAP Header…
| using System.Web.Services.Protocols;
[WebService(Namespace = "http://tempuri.org/")] /// <summary> private void AuthenticateRequest(WorkerAuth soapHeader) if ((string.Compare(soapHeader.User, “usuario”, false) != 0) || |
5º – Executar chamadas ao web service utilizando SOAP Headers…
| using WebAuthSample; using System.Web.Services.Protocols; class Program objHeader = new WorkerAuth(); objWeb = new WorkerService(); employess = objWeb.GetEmployees(); |
Para fazer o download do exemplo acesse o link: SOAP Headers
obs.: Não é aconselhável a passagem de dados sigilosos entre requisições sem a utilização de criptografia e outras técnicas de segurança. Como o tema deste post não se refere a tais tópicos eles não foram abordados por simplificação e enfoque no tema abordado.
Referências:
SoapHeaderAttribute Class – http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapheaderattribute.aspx
SoapHeader Class – http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapheader.aspx
Using SOAP Headers – http://msdn.microsoft.com/en-us/library/77hkfhh8%28VS.71%29.aspx
Authentication for Web Services (using SOAP headers) – http://www.codeproject.com/KB/cpp/authforwebservices.aspx
Microsoft Press – Microsoft-Training Kit-.Net Framework 3.5-ASP.Net Application Development


