WCF vs ASP .Net Web API

93

Quais são os prós e os contras de usar cada tecnologia?

O WCF Web Api agora está integrado ao Asp.net Asp.net web api agora oferece suporte à auto-hospedagem.

Eu ainda imagino que se eu quiser expor vários esquemas de protocolo para a mesma operação, eu ainda me inclinaria para o WCF ou o terminal Mvc pode fazer isso também?

Além disso, a nova API da web Asp.Net expõe o Wsdl? Se não, como o cliente descobriria qual operação está disponível para ele?

Indiscutivelmente, a melhor característica do Mvc é o modelbinder. Quão robusto é o equivalente WCF?

Então, alguém pode me dizer que vantagem a API da web Asp.net traz para a mesa? WCF parece esmagadoramente a escolha mais poderosa / escalável, imo. A única coisa que o Mvc Web Api tem sobre o modelo WCF é provavelmente a facilidade de desenvolvimento, mas isso significa agachamento se acabar sendo uma limitação de design séria no futuro.

Alwyn
fonte
15
Acho o título desta pergunta um pouco enganador. O título é "MVC 4 vs Wcf Web Api", mas a questão parece lidar mais com WCF vs ASP .Net Web API. Pelo título, pensei que o que estava sendo comparado era o framework MVC 4 padrão (controladores, modelos, visualizações) vs o framework ASP .Net Web API. Alguém mais achou este título enganoso?
BruceHill

Respostas:

72

Primeiramente, sugiro que você leia minha postagem sobre o assunto: http://blogs.microsoft.co.il/blogs/idof/archive/2012/03/05/wcf-or-asp-net-web-apis-my- dois centavos sobre o assunto.aspx

Em relação à sua pergunta WSDL - como o WebApi não usa SOAP, ele não requer WSDL e não exporta. Você pode usar hipermídia para retornar recursos com uma lista de URLs de atividades possíveis (pense nisso como um recurso autodescritivo)

IdoFlatow
fonte
6
Essa é uma redação muito boa. O melhor que já vi. Mas agora estou mais confuso do que nunca. WebApi adiciona muito, mas a incapacidade de expor outro ponto de extremidade parece muito restritiva. Se você tinha um cliente que pode usar sabão, agora ele será forçado a construir a ação e analisar o resultado manualmente, quando o sabão poderia ter gerado todo o contexto para eles. Você também os bloqueará do recurso Soap mais avançado, como sessão confiável e transação de ácido ... suspiro.
Alwyn
2
@Alwyn - Eu acho que todos os fatos que você mencionou são verdadeiros e, portanto, não devem confundi-lo, mas sim ajudá-lo a tomar uma decisão - a API da Web tem suas próprias vantagens, mas se o seu serviço precisar ser exposto a partir de vários terminais, incluindo outros protocolos, ou você tem uma forte necessidade do recurso de geração automática do cliente ou de recursos avançados de sabão - essas podem ser considerações sobre o motivo de preferir o WCF em vez da API da Web
BornToCode
@BornToCode: O código do cliente pode ser gerado automaticamente com WebAPI. Você pode produzir um arquivo json swagger usando o código WebAPI. Esse arquivo json pode então ser usado por um gerador de código, como swagger-codegen, para produzir código cliente em um grande número de linguagens de destino.
deixado em branco involuntariamente em
@unintentionallyleftblank - IMHO É ainda mais "amigável" para gerar código de cliente automaticamente via WCF do que Web API.
BornToCode
15

A escolha depende do que queremos fazer.

  1. ASP.NET Web API é uma estrutura para construir serviços não baseados em SOAP sobre HTTP apenas - portanto, não há mais protocolos de transporte disponíveis usando esta estrutura.
  2. WCF / Windows Communication Foundation é uma estrutura para a troca de mensagens baseadas em SOAP - aqui usamos muitos protocolos de transporte: HTTP, TCP, Pipes nomeados, MSMQ, etc ...

Não tenho certeza sobre qual deles tem melhor desempenho em relação à quantidade de dados, talvez WCF, pois podemos usar protocolos baixos. Quaisquer comentários são apreciados.

Junior Mayhé
fonte
2
Sem ofensa, mas o HTTP é apenas um protocolo da camada de aplicativo . Não tem nenhuma restrição inerente sobre quais protocolos de camada de transporte podem ser usados.
smwikipedia
8

O WCF Web API concentra-se principalmente em implementações REST. Se você estiver configurando uma implementação REST, os bits WCF padrão são um pouco chatos na parte traseira. Se você estiver configurando serviços RESTful, verá que a API Web WCF é uma experiência muito mais agradável. Se você estiver configurando serviços SOAP, a API Web WCF não é sua melhor amiga e é melhor usar o WCF para seus serviços.

Gregory A Beamer
fonte
2
Sim, as configurações são uma dor, mas é um custo de configuração único. Depois de fazer isso, você pode praticamente copiar e colar o comportamento / endpoint em outro serviço. Na maioria das vezes, você consegue apenas marcar as novas operações com WebGet. Por outro lado, se você tiver um cliente que deseja usar Soap + Wsdl, é tudo apenas uma mudança de configuração em oposição a código + implantar + QA + o resto. Então, como o Mvc Web Api é melhor?
Alwyn
1
Se você já está confortável com o WCF, pode continuar por esse caminho. Existem, além do que mencionei, algumas melhorias internas no REST na API Web do WCF (não tenho a lista na minha frente), mas ambos podem funcionar e eu não gastaria semanas refatorando se você tivesse toneladas de serviços de trabalho, esp. já que há uma pequena mudança de paradigma no pensamento. Para trabalhos futuros, eu consideraria a API Web WCF, no entanto. Mas eu estou com a API Web WCF há algum tempo, então posso ser tendencioso.
Gregory A Beamer
0

Use WCF para sites intranet / B2B n Web API para sites B2C / C2C / internet ... SOAP / XML ainda é o padrão para comunicação intra-empresas n não vai desaparecer !!!

A_Var
fonte