Criando e do Web Service Em C

Embed Size (px)

Citation preview

Criando e consumindo Web Service em C-Sharp Parte 1Publicado 7 de setembro de 2008 | Por Raphael Cardoso 0 inShare Em mais um artigo, vou explicar como criar nosso primeiro Web service e ainda consumi-lo tanto em uma aplicao Windows Form quanto em um Web Form. Como primeira parte dessa publicao iremos criar nosso Web service. Mais o que vem a ser o Web service?

Web service uma soluo utilizada na integrao de sistemas e na comunicao entre aplicaes diferentes. Com esta tecnologia possvel que novas aplicaes possam interagir com aquelas que j existem e que sistemas desenvolvidos em plataformas diferentes sejam compatveis. Os Web services so componentes que permitem s aplicaes enviar e receber dados em formato XML. Cada aplicao pode ter a sua prpria linguagem, que traduzida para uma linguagem universal, o formato XML. (fonte: Wikipdia) Um Web service nada mais que uma Classe seja ela em C-Sharp quanto VB.NET. Essa classe ou Web service pode ser consumido por uma aplicao Web Form, Windows Form ou at mesmo outros Web service e detalhe, independente da linguagem que eles foram criados. Suponhamos que voc tenha criado um Web service em VB.NET com todas as regras de negocio da sua empresa onde suas aplicaes Web Form ir consumi-lo, e se futuramente voc pretende disponibiliza-lo para parceiros ou clientes isso no ser problema, mesmo que seus parceiros possuam aplicaes em C-Sharp, Java, Delphi ou qualquer outra linguagem que venha a surgir e tenha a capacidade de consumir um Web Service. Ento agora vamos ao que interessa. 1- Abra o Visual Studio. 2- Crie um novo ASP.NET Web Service em File > New > Web Site

Seu cdigo inicialmente ser igual ao cdigo abaixo.01 using System; 02 using System.Web; 03 using System.Web.Services; 04 using System.Web.Services.Protocols; 05 06 [WebService(Namespace = "http://tempuri.org/")] 07 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 08 public class Service : System.Web.Services.WebService 09 { 10 11 12 13 14 15 16 17 18 19 20 21 } [WebMethod] public string HelloWorld() { return "Hello World"; } public Service() { //Uncomment the following line if using designed components //InitializeComponent(); }

Iremos criar um WebMetodo que possibilita a uma aplicao realizar as 4 Operaes Bsicas da Matemtica, mais o detalhe que daremos a possibilidade de se escolher qual delas usar no mesmo WebMetodo.

Para isso crie uma nova classe do tipo Enum e nosso cdigo ficar como o exemplo abaixo:01 using System; 02 using System.Web; 03 using System.Web.Services; 04 using System.Web.Services.Protocols; 05 06 [WebService(Namespace = "http://tempuri.org/")] 07 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 08 public class Service : System.Web.Services.WebService 09 { 10 11 12 13 14 15 16 17 18 19 20 21 } 22 23 public enum OperacoesBasicas 24 { 25 26 27 28 29 } Adicao = 0, Divisao = 1, Multiplicacao = 2, Subtracao = 3 [WebMethod] public string HelloWorld() { return "Hello World"; } public Service() { //Uncomment the following line if using designed components //InitializeComponent(); }

Feito isso iremos criar ento um novo WebMetodo chamado Calculadora onde iremos informar 2 valores do Tipo Decimal, a Tipo da Operao e ser retornado um outro valor do tipo Decimal. Veja o cdigo abaixo:01 [WebMethod] public decimal Calculadora(decimal ValorA, decimal ValorB, 02 OperacoesBasicas TipoOperacao) 03 { 04 05 06 07 08 switch (TipoOperacao) { case OperacoesBasicas.Adicao: decimal ResultadoAB = 0;

09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 }

{ ResultadoAB = decimal.Add(ValorA, ValorB); break; } case OperacoesBasicas.Divisao: { ResultadoAB = decimal.Divide(ValorA, ValorB); break; } case OperacoesBasicas.Multiplicacao: { ResultadoAB = decimal.Multiply(ValorA, ValorB); break; } case OperacoesBasicas.Subtracao: { ResultadoAB = decimal.Subtract(ValorA, ValorB); break; } } return ResultadoAB;

Pronto, nosso bsico Web Service est pronto. Agora execute o Web Service e ser aberto uma pgina com a lista de WebMetodos do seu Web Service. Clique no link Calculadora e ser aberto outra pgina para entrada dos valores.

Para realizar as operaes voc dever informar o TipoOperacao.

Adicao ou 0 Divisao ou 1 Multiplicacao ou 2

Subtracao ou 3

Ser aberto uma outra pgina com o resultado.

Viu como simples? Se quiser realizar o download do exemplo criado: Aqui Espero que tenham entendido e no prximo artigo irei explicar como consumir esse mesmo Web Service em Windows Form. Abrao e sucesso!!!

Criando e consumindo Web Service em C-Sharp Parte 2Publicado 12 de setembro de 2008 | Por Raphael Cardoso 0 inShare Ol pessoa, dando continuidade ao artigo anterior onde criamos um web service, nesse artigo irei mostrar como simples utilizado em uma aplicao WinForm. Para quem no leu o artigo anterior: Criando e consumindo Web Service em C-Sharp Parte 1

Vamos ao que interessa. 1- Abra o projeto anterior, quem no tiver poder fazer o download aqui. 2- Clique com o boto direito em cima do Solution no Solution Explorer do Visual Studio > Add > New Project

3- Na janela que ira abrir, escolha Windows Application, defina um nome TesteMeuWebService

4- Agora adicionaremos referencia ao nosso WebService j criado. Clique com o boto direito em cima do Project no Solution Explorer do Visual Studio > Add Web Reference

5- Vamos listar os Web Services inclusos em nosso Solution.

6- Selecionamos o nosso Web Service

7- Adicionamos como referencia ao projeto.

8- Agora vamos ao WinForm. Adicione 3 Labels, 3 TextBox, 1 ComboBox e 1 Button

9- Adicione a lista de operaes no ComboBox conforme imagem abaixo.

Adio Diviso Multiplicao Subtrao

10- Agora de um duplo clique no Button para adicionarmos o evento Click e o cdigo abaixo.01 private void button1_Click(object sender, EventArgs e) 02 { 03 04 05 decimal ValorA; decimal ValorB;

localhost.OperacoesBasicas operacao = localhost.OperacoesBasicas.Adicao; 06 decimal Resultado; 07 08 09 10 11 12 13 14 15 16 17 switch (comboBox1.SelectedIndex) { case 0: operacao = localhost.OperacoesBasicas.Adicao; break; case 1: operacao = localhost.OperacoesBasicas.Divisao; decimal.TryParse(textBox1.Text, out ValorA); decimal.TryParse(textBox2.Text, out ValorB);

18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 } }

break; case 2: operacao = localhost.OperacoesBasicas.Multiplicacao; break; case 3: operacao = localhost.OperacoesBasicas.Subtracao; break; default: operacao = localhost.OperacoesBasicas.Adicao; break;

localhost.Service MeuWebService = new localhost.Service(); Resultado = MeuWebService.Calculadora(ValorA, ValorB, operacao); textBox3.Text = Resultado.ToString();

Pronto, mais se formos executar o nosso projeto, ele no ser executado, pois o projeto que esta definido como principal o WebService, ento clique com o boto direito em cima do Project do WinForm > Set as StartUp Project

Agora sim, s executar nosso projeto.

Espero que tenham entendido e qualquer dvida s mandar os comentrios que responderei. Se quiser realizar o download do exemplo criado: Aqui No prximo artigo irei explicar como utilizar o mesmo webservice em um WebForm ASP.NET. Abrao e at l.

Criando um Web Service seguro com SoapHeaderPublicado 15 de agosto de 2008 | Por Raphael Cardoso 0 inShare Ol pessoa, como meu primeiro artigo vou iniciar uma breve explicao de como criar um WebService seguro utilizando o SoapHeader e como acessar os seus mtodos utilizando o ObjectDataSource com GridView. Apesar de o artigo estar com exemplos em C-Sharp, voc poder tranquilamente aplic-lo em VB.NET, basta um pouco de vontade. No irei entrar em detalhes de como criar uma conexo passo a passo, vou levar em considerao que voc j sabe como fazer e esta a procura de como adicionar mais segurana a seu Web Service, mais prometo criar um artigo especialmente com esse assunto.

1- Criando o WebService Crie um novo Web Service, onde inicialmente seu cdigo ser como esse:01 /// 02 /// Summary description for MeuWebService 03 /// 04 [WebService(Namespace = "http://tempuri.org/")] 05 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 06 public class MeuWebService : System.Web.Services.WebService 07 { 08 09 10 11 12 13 14 15 16 17 18 19 } [WebMethod] public string HelloWorld() { return "Hello World"; } public MeuWebService() { //Uncomment the following line if using designed components //InitializeComponent(); }

2- Adicionando um novo mtodo Crie um mtodo onde esse retorne um DataSet para mais tarde ser consumido por uma aplicao, que no nosso caso ser um WebForm:01 [WebMethod(Description = "Retorna todos os clientes cadastrados")] 02 public DataSet getClientes()

03 { 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18

DataSet dsClientes = null;

string connectionString = "Data Source=seu_servidor_sql;User Id=seu_usuario;Password=sua_senha;Initial Catalog=seu_bd;"; StringBuilder sqlString = new StringBuilder(); sqlString.Append(" SELECT * FROM CLIENTES "); using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionString)) { connection.Open(); using (System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand()) { command.Connection = connection; command.CommandText = sqlString.ToString();

using (System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(command)) 20 { 19 21 22 23 24 25 26 27 } return dsClientes; } } adapter.Fill(dsClientes); }

Pronto, j possumos um Web Service capaz de retornar um DataSet contendo as informaes que desejamos, porem esse poder ser consumido por qualquer aplicao uma vez que for publicada na internet. Ento imagine o seguinte cenrio, seu Web Service possui tambem um mtodo capaz de excluir todos os seu cliente cadastrado. Isso seria catastrfico. Com essa dica abaixo ser possvel proteger facilmente o Web Service impedindo que outras aplicaes, por mais que estejam acessando o Web Service, no sejam capaz de executar os mtodos sem autenticao. 3- Criando a classe de segurana Crie uma nova classe herdando a classe SoapHeader como no exemplo abaixo:1 public class SegurancaClientes : SoapHeader 2{ 3 4 5} public string Usuario; public string Senha;

Voc poder adiciona-lo logo abaixo da declarao dos Namespaces ou criar um novo arquivo de Classe. Agora dentro do Web Service voc dever estanciar essa nova classe:1 public SegurancaClientes Credencial = new SegurancaClientes();

Agora atribua o seguinte cdigo antes da declarao do WebMethod.1 [SoapHeader("Credencial")] 2 [WebMethod(...

Apesar de termos criado o Cabealho de autenticao do nosso Web Service utilizando o SoapHeader, no quer dizer que ele est protegido. 4- Como autenticar o WebService Ser necessrio criar um novo mtodo, s que esse no ir conter a declarao de [WebMethod], ser do tipo private e no precisaremos passar nenhum argumento. Crie um mtodo simples que retorne o Tipo Boolean ou bool e dentro dele crie seu esquema de autenticao utilizando os parmetros do SoapHeader como no exemplo abaixo.01 private Boolean Autenticou() 02 { 03 04 05 06 07 08 09 10 11 12 13 14 } return Autenticou; if (Credencial.Usuario == Usuario && Credencial.Senha == Senha) { Autenticou = true; } string Usuario = "admin"; string Senha = "123456"; Boolean Autenticou = false;

A Credencial.Usuario e Credencial.Senha so as informao que viro de fora do Web Service pela classe de segurana. Feito tudo isso nosso mtodo de retorno de clientes ficara assim:01 [SoapHeader("Credencial")] 02 [WebMethod(Description = "Retorna todos os clientes cadastrados")] 03 public DataSet getClientes() 04 { 05 06 07 if (!Autenticou()) { throw new Exception("Erro: Usurio no autenticado.");

08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

} DataSet dsClientes = null; string connectionString = "sua_connection_string"; StringBuilder sqlString = new StringBuilder(); sqlString.Append(" SELECT * FROM CLIENTES "); using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionString)) { connection.Open(); using (System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand()) { command.Connection = connection; command.CommandText = sqlString.ToString();

using (System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(command)) 26 { 25 27 28 29 30 31 32 33 } return dsClientes; } } adapter.Fill(dsClientes); }

Quando nosso mtodo for invocado de uma aplicao e ele no tiver passado antes a autenticao, ou seja se retornar false, ser gerando um Exception para a aplicao e a chamada ser interrompida. Abaixo o retorno do erro:

5- Consumindo o Web Service e Autenticando um ObjectDataSource Adicione em seu WebForm um GridView, um ObjectDataSource e faa as devidas configuraes para que ele acesse o WebService e o mtodo desejado. Feito isso, atribua o evento ObjectCreating ao ObjectDataSource que ser onde passaremos nossa autenticao da aplicao como no exemplo abaixo:

protected void objClientes_ObjectCreating(object sender, ObjectDataSourceEventArgs e) 02 { 01 03 04 05 06 07 08 09 10 11 } e.ObjectInstance = clientes; Clientes clientes = new Clientes(); clientes.SegurancaClientesValue = Credencial; SegurancaClientes Credencial = new SegurancaClientes(); Credencial.Usuario = "admin"; Credencial.Senha = "123456";

O que ocorrer acima? Quando o ObjectDataSource for criado no momento que a pagina for carregada (no caso dos WebForms) ser realizado a criao do Cabealho com a autenticao e enviado para o ObjectDataSource para que ele possa utiliz-lo para autenticar quando os nossos outros mtodos forem invocados. Se falhar a autenticao, ser gerado um Exception com a mensagem de erro.

Basicamente isso. Mesmo que voc no utilize o ObjectDataSource para consumir seus mtodos do Web Service, voc poder chamar seu mtodo informando qual a classe de segurana. Espero que esse artigo tenha sido de grande utilidade e caso tenham duvida deixem seus comentrios. Abrao e sucesso!!!

Para esta semana preparei um cdigo bem simples utilizando o Microsoft Visual Studio.Net que, na minha opinio, o melhor CASE de desenvolvimento para Webservices. Para quem no possui o Microsoft Visual Studio.Net, podem procurar o WebMatrix que grtis e est disponvel para download no http://www.asp.net/. Mas recomendo o Microsoft Visual Studio.Net mesmo que seja o BETA ou o SDK. Nas colunas utilizarei sempre o Microsoft Visual Studio.Net. Criando o webservice Abra o VS.Net, crie um novo projeto ASP.NET Web Service com a linguagem C# e altere o nome padro para o nome retCalculo como na imagem abaixo.

Agora veja no Solution Explorer que o VS.Net criou vrios arquivos. Os que no interessam no momento o arquivo chamado Service1.asmx. Altere o nome deste para Operacoes.asmx como na imagem abaixo.

No mesmo Solution Explorer, clique com o boto direito e selecione a opo View Code. Abrir a pgina de cdigo que, se voc notar, vai ter o mesmo nome da pagina .asmx mas com a adio do .cs no final .asmx.cs . O cs significa C Sharp(C#). Subistitua o cdigo por este abaixo. using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Web.Services; namespace retCalculo { [WebService(Namespace="http://www.austin.com.br/retCalculo/", Description="WEBSERVICE PARA OPERAES ARITIMTICAS
CRIADO POR: ROGRIO PEREZ
EXCLUSIVO PARA A COLUNA WEBSERVICE IMASTERS")] // O Namespace do webservice serve para identificar de onde vem o webservice, se voc

no especificar esta linha a pagina ir avaisar que esta usando o padro. // O Description a descrio que ir aparece logo aps o nome do Servio public class Operacoes : System.Web.Services.WebService { public Operacoes() { InitializeComponent(); } #region Component Designer generated code private IContainer components = null; private void InitializeComponent() { } protected override void Dispose( bool disposing ) { if(disposing && components != null) { components.Dispose(); } base.Dispose(disposing); } #endregion //WEBMETHOD isso importante pois aqui onde voc indica que o mtodo de um servio web. //O Description de um WEBMETHOD sempre para descrever o que o mtodo ir fazer, muito importante utilizar esta descrio para webservices pblico, pois ningum tem obrigao de saber o que esse webservice faz. [WebMethod(Description="MTODO USADO PARA SOMAR VALORES")] //Aqui criamos um funo onde ir somar valores public double soma(double valor1, double valor2) { //Retornamos o valor return valor1 + valor2; } } } Observao importante Observe que o VS.Net criou um arquivo chamado Web.config. Ele est configurado para rodar somente na sua mquina local . Caso deseje colocar ele em um servidor que no seja o seu de desenvovimento, adcione as linhas de cdigos abaixo dentro do mesmo abaixo da TAG "".

Pronto. O seu primeiro WebService est pronto. Ele bem simples mas ser aperfeioado a cada semena. O resultado esperado seria como neste webservice http://www.austin.com.br/retCalculo/Operacoes.asmx. Qualquer dvida, estarei respondendo pelo e-mail [email protected]. At a prxima semana.

Como criar WebService C#Ol Pessoal, Bom, aqui iremos aprender a como criar WebService C#, mais uma vez, enfatizo que no entrarei no mrito de padres e melhor forma de programar ou desenvolver, mas tambm no iremos fazer a coisa de uma forma desorganizada.

New Project ASP.net C#

Para iniciar, irei pressumir que j temos uma aplicao, caso vocs no tenham uma aplicao, vocs podem criar uma pelo menu File>New Project > (Project Types) Visual C# ou Vb.net > (Templates) ASP.NET Web Application ou pode pegar esta aqui.

Add New Folder ASP.net C#

Criado a nossa aplicao, iremos criar o nosso WebService. Para iniciar, vamos criar um diretrio chamado ws, para que possamos deixar o nosso WebService (Servio Web) em seu devido lugar e separado das outras coisas que voc venha a criar futuramente. Para isto, com o boto direito do mouse, clique no projeto, Add> New Folder e d o nome ws para o nosso diretrio. Em seguida, clique no nosso diretrio ws e v at add>New Item > E escola a opo WebService.asmx.

Add New Item ASP.net C#

Pronto, note que ele j abre o WebService, e j tem um mtodo Hello World montado para que voc possa testar, deixe ele como sua pgina inicial, com o boto direito no mouse, clique sobre ele e escolha a opo Set As Start Page.

Set As Start Page WebService

Pronto, aperte a tecla F5 para que voc possa executar e invocar o mtodo HelloWorld e note que ele retorna o Texto Hello World. Assim finalizamos este post, espero ter ajudado com esse exemplo simples. Boa Sorte! Alan