Qual é a diferença entre WCF e Web Services?

Opa pessoal, beleza?

Eu estava muito sumido estes tempos, mas este ano é outra historia. Quero mostrar bastante conteúdo bacana pra voces e também ajudar a sanar as duvidas de quem está precisando. Este ano, comecei a trabalhar em outra empresa que utiliza o framework baseado em WCF. Dai me surgiu a pergunta, qual é a diferença entre WCF e Web Services? Pesquisei na internet e encontrei um artigo muito bom e explicativo no Code Project escrito por Yatin V Patil. Voce pode acessá-lo diretamente por este link. Agora vamos lá pra tradução 🙂

Introdução

Neste artigo será explicado a diferença entre o ASP.NET web service e o WCF services. Também será discutido como usar as duas tecnologias para desenvolver web services.

Background

Web Service em ASP.NET

Um Web Service é uma aplicação lógica programável acessível via protocolos Web. Um destes protocolos é o Simple Object Protocol (SOAP). SOAP é um padrão da W3C desde maio de 2000 que usa padrões baseados em XML (XML para descrição de dados e também para o transporte HTTP) para codificar e transmitir dados da aplicação.

WCF Service

Windows Communication Foundation (WCF) é um framework para construir aplicações orientadas a serviços. Usando WCF, voce pode enviar mensagens assíncronas de um serviço a outro. Este serviço pode ser parte de um serviço hospedado no ISS ou pode ser um serviço hospedado em uma aplicação. O serviço pode ser um cliente de um outro serviço que busca dados de outro serviço. As mensagens podem ser simples caracteres ou palavras mandadas em XML, ou dados complexos, como stream de dados ou dados binários.

Em quais cenários o WCF precisa ser usado:

  • Um serviço seguro para processar transações de negócio;
  • Um serviço que alimenta os dados atuais de outros serviços, como um relatório de tráfego ou um serviço de monitoramento;
  • Um serviço de chat que permite 2 pessoas a se comunicarem ou trocarem dados entre si;
  • Expor um workflow implementado usando WindowsWorkflow Foundation como um serviço WCF
  • Uma aplicação Silverlight para consultar um serviço para os últimos feeds de dados.

Features do WCF

  • Orientação a Serviço
  • Interoperabilidade
  • Multiplos Padrões de Mensagens
  • Metadata de Serviços
  • Contrato de Dados (Data Contracts)
  • Segurança
  • Multiplos transportadores e Encodings
  • Mensagens confiáveis ​​e em fila
  • Mensagens duráveis
  • Transações
  • Suporte a AJAX e REST
  • Extensibilidade

Diferenças entre Web Services em ASP.NET e Serviços WCF

WCF é a substituição para todas tecnologias antigas de web services da Microsoft. Também faz muito mais do que é considerado “Web Services”.

WCF “web services” são parte de um espectro muito mais amplo de comunicação remota habilitado por meio do WCF. Você vai ter um maior grau de flexibilidade e portabilidade se fazer as coisas em WCF do que através o tradicional ASMX, porque WCF é projetado, desde o início, para unir todas as diferentes infra-estruturas de programação distribuída oferecidos pela Microsoft. Um ponto de extremidade WCF pode se comunicar com o simples SOAP / XML como pode também se comunicar via TCP / binário. Para mudar este meio de comunicação basta simplesmente mudar um arquivo de configuração. Em tese, isso reduz a quantidade necessária de código ou mudar a necessidades de negócio, metas, etc.

ASMX é mais antigo do que WCF, e qualquer coisa que o ASMX consegue fazer o WCF também consegue fazer (e mais). Basicamente voce pode ver WCF como um agrupador lógico que junta todas as formas de fazer dois apps se comunicarem no mundo da Microsoft; ASMX era somente uma dessas várias maneiras que o WCF cobre.

Web Services podem ser acessados somente sobre protocolo HTTP e em ambientes stateless, onde WCF é flexivel por que os seus serviços podem ser hospedados em diferentes tipos de aplicações. Em cenários comuns para hostiar Serviços WCF é usado o IIS, WAS, Self-Hosted, Managed Windows Service.

A maior diferença é que Web Services usam XmlSerializer e o WCF utiliza DataContractSerializer, este que é melhor em desempenho comparado ao XmlSerializer.

As questões-chave com XmlSerializer para serializar. NET para XML

  • Somente campos ou propriedades públicas do .NET podem ser traduzidas em XML
  • Somente classes que implementão a interface IEnumerable
  • Classes que implementam a interface IDictionary, como uma tabela Hash, não podem ser serializadas

Diferenças importantes entre DataContractSerializer e XMLSerializer

  • Um beneficio prático é o design do DataContractSeralizer que tem melhor desempenho sobre o XmlSerializer
  • Serialização de XML não indica quais campos ou propriedades são serializadas como é em DataContractSerializer
  • Mostra explicitamente quais campos ou propriedades são serializadas em XML (DataContractSerializer)
  • O DataContractSerializer pode traduzir uma Hashtable em XML

Usando o Código

O desenvolvimento de serviços Web com ASP.NET depende de definição de dados e conta com o XmlSerializer para transformar dados para ou de um serviço.

O WCF utiliza DataContractAttribute e DataMenberAttribute para traduzir tipos .NET em XML.

[DataContract]
public class Item
{
    [DataMember]
    public string ItemID;
    [DataMember]
    public decimal ItemQuantity;
    [DataMember]
    public decimal ItemPrice;
}

O atributo DataContractAttribute pode ser aplicado em uma classe ou em uma estrutura. DataMemberAttribute pode ser aplicado em campos ou propriedades e estes campos ou propriedades podem ser tanto publico quanto private.

Desenvolvento um Serviço

Para desenvolver um serviço usando ASP.NET, precisamos adicionar o atributo WebService  na classe e o WebMetrodAttribute em qualquer metodo da classe.

Exemplo:

[WebService]
public class Service : System.Web.Services.WebService
{
      [WebMethod]
      public string Test(string strMsg)
      {
          return strMsg;
      }
}

Para desenvolver um serviço em WCF, nós iremos escrever o seguinte código:

[ServiceContract]
public interface ITest
{
       [OperationContract]
       string ShowMessage(string strMsg);
}
public class Service : ITest
{
       public string ShowMessage(string strMsg)
       {
          return strMsg;
       }
}
Você tem dúvida sobre algumas notações do C# e pra que elas servem? Então leia meu artigo sobre Herança, Polimorfismo e Encapsulamento: C# te ajudando a colocar a teoria na prática com Modificadores de Acesso

O Atributo ServiceContractAttribute especifica que uma interface define o contrato de serviço do WCF. O atributo OperationContract indica quais metodos da interface definem as operações do contrato de serviço.

Uma classe que implementa o contrato de serviço é referenciada como um tipo de serviço no WCF.

Hospedando o Serviço

Web Services em ASP.NET são compilados em assembly do tipo class library e um arquivo de serviço (com a extensão .asmx) irá ter o codigo para o serviço. O arquivo de serviço é copiado em um diretório da aplicação ASP.NET e o assembly será copiado para o diretorio bin. A aplicação é acessível usando a url do arquivo de serviço.

O Serviço WCF  pode ser hospedado no IIS ou no WindowsActivationService.

  • Compile o serviço em uma class library
  • Copie o arquivo de serviço (com a extensão .SVC) em um diretorio virtual e o assembly dentro da bin, sub diretorio do diretorio virtual.
  • Copie o web.config para o diretorio virtual

Desenvolvimento do Cliente

O cabeçalho da mensagem SOAP pode ser customizado no serviço ASP.NET .

WCF provê atributos em MessageContractAttribute, MessageHeaderAttribute e MessageBodyMenberAttribute para descrever a estrutura da mensagem SOAP.

Descrição do Serviço

A emissão de uma requisição HTTP GET com WSDL faz com que o ASP.NET gere uma descrição do serviço. Isso que retorna o WSDL como resposta da requisição.

O WSDL gerado pode ser personalizado fazendo uma derivação da classe ServiceDescriptionFormatExtension.

A emissão de uma requisição com uma query WSDL para o arquivo .SVC gera o WSDL. O WDSL que é gerado pelo WCF pode ser customizada usando a classe ServiceMetadataBehavior.

Tratamento de Exceções

Nos serviços da Web ASP.NET, exceções não tratadas são devolvidas para o cliente como falhas SOAP.

Em serviços WCF, exceções não tratadas não são retornados aos clientes como falhas SOAP. Uma configuração é fornecida para que as exceções não tratadas retornem aos clientes com a finalidade de depuração.

Fonte: http://www.codeproject.com/Articles/139787/What-s-the-Difference-between-WCF-and-Web-Services

—-

Espero que tenham gostado. Qualquer dúvida postem nos comentários que ajudo da forma que eu puder!

Kelvin 🙂

Anúncios

9 comentários sobre “Qual é a diferença entre WCF e Web Services?

  1. Alex 13/06/2016 / 16:04

    Olá Kelvin, tudo bem?

    O webservice tradicional é compativel com a maioria das linguagens, etc. Ou seja: um web service em c# pode ser consumido por Android, Delphi, etc.

    E quanto ao WCF? Ele também possui essa compatibilidade com outras linguagens?

  2. Alane 17/05/2015 / 12:50

    Parabéns pelo artigo, muito bom. Atualmente estou buscando conteúdos referente ao WCF para aprofundar-me no assunto.

  3. Marcelo 21/03/2015 / 12:32

    Muito bom cara 😉

  4. Ricardo 11/01/2015 / 22:00

    Tira uma duvida criei um webservice , gostaria de publica – lo , minha duvida eh um seguinte por exemplo se eu comprar a hospedagem de um site aspnet na local web eu consigo usar esse webservice.nao conheco muito sobre servidores e hospedagens, muito bom seu post

    • Kelvin Rodrigues 11/01/2015 / 22:22

      Olá Ricardo, fico feliz por ter gostado.
      Sobre sua dúvida a resposta é sim, mas desde que voce consiga acessar algumas configurações do IIS.
      Da pra publicar a aplicação no IIS, sistema de arquivos, site FTP ou em um site remoto.
      Se quiser saber mais sobre isso pode ir em:
      – Publicação de serviço WCF ( http://msdn.microsoft.com/pt-br/library/bb924407(v=vs.110).aspx )

      Sobre a locaweb em especifico eu não tenho certeza se eles abrem o IIS pra fazer as configurações necessárias, mas encontrei este tutorial mostrando como se publica um Web Service asmx:
      – Web Services com ASP.NET( http://ajuda.locaweb.com.br/index.php/Web_Services_com_ASP.NET )

      Espero ter ajudado.

  5. Claudinei 04/12/2014 / 21:47

    Kelvin

    Como eu faria para adicionar um certificado para que o Visual Studio saiba que existe um certificado para quando eu for add service reference, ele encontre o certificado, pois no momento não consegui estou utilizando windows forms com vb.net e visual studio 2010 ?

    • Kelvin Rodrigues 11/01/2015 / 22:28

      Claudinei,
      desculpe a demora pra responder, mas não entendi muito a sua pergunta.
      Em Etapas, o seu serviço está sob um protocolo? é SSL? Ele já está publicado?
      Se for, tente o seguinte.
      Acesse o wsdl do seu servico e baixe-o
      quando for em “ADD SERVICE REFERENCE” adicione o caminho do arquivo localmente.
      ex:”file:\\\drive:\caminho\nomedoarquivo.wsdl”

      Espero ter ajudado.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s