Web Service em .Net
1
Criação de um Web Services em .Net
1. Criar um novo Web Site com template ASP.NET Web Service, de acordo com a
figura seguinte.
O Visual studio cria um directório com os ficheiros indicados
2. A implementação do serviço é realizada no ficheiro Service.cs
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
public Service () {}
Miguel Losa
DEI-ISEP
Web Service em .Net
2
3. Alterar o nome do ficheiro Service.asmx e Service.cs para DemoService.asmx
e DemoService.asmx usando o rename no Solution Explorer e alterar o nome da
classe para DemoService
public class DemoService : System.Web.Services.WebService
{
public DemoService()
{
...
}
O ficheiro .asmx tem a directiva WebService e contém uma referência para a classe
que implementa o serviço.
<%@ WebService Language="C#" CodeBehind="~/App_Code/DemoService.cs"
Class="DemoService" %>
4. Criar na classe um método CalculaDias que recebe uma data e devolve um long
com o número de dias que passaram até ao dia de hoje.
[WebMethod]
public long CalculaDias(DateTime dt)
{
System.TimeSpan diff=DateTime.Now.Subtract(dt);
long dias=(long) diff.TotalDays;
return dias;
}
Este método deve ter o atributo [WebMethod] para ser exposto como um método do
serviço Web e poder ser chamado por outra aplicação.
5. Utilizar o atributo [WebService] na classe que implementa o serviço, para alterar
o namespace da classe que por omissão é http://tempuri.org/
[WebService(Namespace = "dei.isep.demoservice")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class DemoService : System.Web.Services.WebService
{
...
6. Compilar o código
7. Testar o serviço implementado
Miguel Losa
DEI-ISEP
Web Service em .Net
3
O .Net permite testar o serviço fazendo View in Browser no Solution Explorer ou
usando no Internet Explorer o url, caso o projecto não seja File System,
http://localhost/DatasService/DemoService.asmx
A página seguinte é apresentada:
Esta página é criada pela framework .net e permite testar o serviço implementado.
Se seguir o link CalculaDias será apresentada a página seguinte:
Miguel Losa
DEI-ISEP
Web Service em .Net
4
Se introduzir na caixa de texto uma data válida (ano/mês/dia) o serviço retornará um
long resultado da chamada do método.
Miguel Losa
DEI-ISEP
Web Service em .Net
5
Criação de uma aplicação cliente do serviço
1. Acrescentar à solução um novo projecto do tipo ASP.NET Web Application, com o
nome ClienteDatas.
2. Criar uma página aspx muito simples, tendo como objectivo invocar o serviço
criado anteriormente
Crie os controlos de acordo com a figura seguinte:
Miguel Losa
DEI-ISEP
Web Service em .Net
6
3. Ligação ao Web Service
Para invocar o serviço é necessário acrescentar uma Web Reference ao projecto,
utilizando no Solution Explorer a opção Add Web Reference.
Usando a opção Web Services in this solution, seleccione o Web Service
anteriormente implementado e carregue no botão Add Reference.
O .Net acrescenta ao projecto um directório App_WebReferences que contém um
ficheiro DemoService.wsdl responsável pela descrição do serviço.
Miguel Losa
DEI-ISEP
Web Service em .Net
7
Implemente o seguinte código no evento click do botão CalculaDias
private void ChamarServiço_Click(object sender, System.EventArgs e)
{
localhost.DemoService proxy = new localhost.DemoService();
DateTime dt = new DateTime(2004, 1, 1);
long dias = proxy.CalculaDias(dt);
Label1.Text=dias.ToString();
Label1.Visible=true;
}
Faça Build do projecto e em seguida View in Browser e deverá ter como resultado a
seguinte página:
Miguel Losa
DEI-ISEP
Web Service em .Net
8
Framework .Net para Web Service
A figura seguinte mostra o conjunto de eventos que acontecem quando é chamado
um método de um serviço Web.
Anatomy of an XML Web Service Lifetime - .NET Framework Developer's Guide
1. O cliente cria uma nova instância da classe proxy do serviço web.
localhost.DemoService proxy=new localhost.DemoService();
..
A classe proxy é criada pela platafoma .Net através da descrição do serviço no
ficheiro DemoService.wsdl.
Esta classe está no ficheiro Reference.cs no directório Web References / ..
/Reference.Map, onde é implementado o código responsável por chamar os métodos
remotos do serviço – A classe Proxy
Extracto do Reference.cs
public partial class DemoService :
System.Web.Services.Protocols.SoapHttpClientProtocol {
private System.Threading.SendOrPostCallback
CalculaDiasOperationCompleted;
public DemoService() {
this.Url = global::web_app_project.Properties.Settings.
Default.web_app_project_localhost_DemoService;
..
[System.Web.Services.Protocols.SoapDocumentMethodAttribute(
dei.isep.demoservice/CalculaDias",
RequestNamespace="dei.isep.demoservice",
ResponseNamespace="dei.isep.demoservice",
Miguel Losa
DEI-ISEP
Web Service em .Net
9
Use=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wr
apped)]
public long CalculaDias(System.DateTime dt) {
object[] results =
this.Invoke("CalculaDias", new object[] {dt});
return ((long)(results[0]));
}
2. O cliente invoca um método da classe proxy
long dias=proxy.CalculaDias(dt);
3. A plataforma no cliente formata (serialize) os argumentos do método numa
mensagem XML/SOAP e envia a mensagem através da rede usando o protocolo
HTTP para o computador onde reside o serviço Web.
Exemplo de uma mensagem SOAP:
POST /DatasService/DemoService.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "dei.isep.demoservice/CalculaDias"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<CalculaDias xmlns="dei.isep.demoservice">
<dt>o valor do argumento</dt>
</CalculaDias>
</soap:Body>
</soap:Envelope>
O mapeamento é realizado usando o nome do método como elemento no XML <CalculaDias> - e como sub-elementos os argumentos do método -<dt>
Existem vários atributos para alterar o modo como este mapeamento é realizado
4. O serviço Web recebe a mensagem SOAP e deserialize o XML recebido. Cria uma
instância da classe que implementa o serviço e invoca o método do serviço.
Miguel Losa
DEI-ISEP
Web Service em .Net
10
5. O serviço executa o código e serialize o resultado enviando uma mensagem de
resposta para o cliente.
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<CalculaDiasResponse xmlns="dei.isep.demoservice">
<CalculaDiasResult>
o valor do resultado
</CalculaDiasResult>
</CalculaDiasResponse>
</soap:Body>
</soap:Envelope>
O mapeamento da resposta é realizado acrescentando ao nome do método a palavra
Response - <CalculaDiasResponse>
Miguel Losa
DEI-ISEP
Download

Criação de um Web Services em .Net