API da Web do WCF vs ASP.NET [fechada]

484

Passei alguns meses tentando entender os conceitos por trás do WCF e recentemente desenvolvi meu primeiro aplicativo de serviço WCF.

Eu lutei bastante para entender todas as configurações no arquivo de configuração.
Não estou convencido sobre o meio ambiente, mas parece que você pode fazer coisas incríveis com ele.

Outro dia, descobri que a Microsoft lançou uma coisa nova chamada ASP.NET Web API .

Pelo que posso ler, é uma estrutura RESTful , muito fácil de usar e implementar.

Agora, estou tentando descobrir quais são as principais diferenças entre as duas estruturas e se devo tentar converter meu aplicativo de serviço WCF antigo com a nova API.

Alguém poderia me ajudar a entender as diferenças e o uso de cada um?

LeftyX
fonte
12
+1 pergunta interessante. talvez você obtenha boas respostas em programmers.stackexchange.com
Mithir
1
Quais recursos do WCF "antigo" você está usando? Você está tentando criar uma API RESTful? Ou RPC ou SOAP?
21412 Marcind
1
@marcind: obrigado pela sua resposta. São principalmente chamadas RESTful. Nenhum RPC.
LeftyX
4
Outra boa resposta pode ser encontrada em stackoverflow.com/a/9859981/456814 #
1
ambos são a mesma coisa, mas a antiga diferença que se poderia encontrar seria o wcf é basicamente para intranet e Webapi para internet, sim, definitivamente, podemos tornar o wcf repousante também! basicamente ambos foi executado sobre o web.http protocolo http
LostCoder

Respostas:

185

A nova API da Web do ASP.NET é uma continuação do projeto anterior da API da Web do WCF (embora alguns dos conceitos tenham sido alterados ).

O WCF foi criado originalmente para habilitar serviços baseados em SOAP. Para serviços RESTful ou RPCish mais simples (pense em clientes como jQuery), a API da Web do ASP.NET deve ser uma boa opção.

marcind
fonte
36
Além disso: embora o WCF forneça algum suporte para a criação de serviços no estilo REST, o suporte ao REST na API da Web do ASP.NET é mais completo e todas as melhorias futuras nos recursos do REST serão feitas na API da Web do ASP.NET msdn.microsoft.com/en- / home / library / jj823172.aspx
Ohad Schneider
6
Na verdade, o WCF foi criado originalmente para implementar uma camada de abstração entre um serviço SOAP ou RPC e o cliente. O objetivo era criar uma arquitetura única (ABC) em torno dessas duas chamadas muito diferentes e lidar com o encanamento por meio de arquivos de configuração.
Scott Marcus
4
A verdadeira desvantagem da API da Web do ASP.NET é o ferramental do cliente. O Visual Studio suporta ferramentas integradas para oferecer suporte a entidades clientes de serviço WCF e geração de serviços sem interrupções. Não há suporte na API da Web. Eu sei que há o HttpClientque é incrível, mas ele não cuida da geração de entidades e da serialização / desserialização.
Shimmy Weitzhandler
1
@Shimmy E quanto à geração de serviços usando o swagger?
217818 Alex28191
1
@ Alex78191 obrigado pela sua resposta. As entidades geradas podem emitir INotifyPropertyChangedentidades clientes? E a validação?
Shimmy Weitzhandler 28/02
250

Para nós, o WCF é usado para SOAP e API da Web para REST. Também desejo que o SOAP da API da Web seja suportado. Não estamos usando recursos avançados do WCF. Aqui está a comparação do MSDN :

insira a descrição da imagem aqui

Manish Jain
fonte
1
E a API da Web suporta OData, que para CSOM é uma dádiva de Deus.
Abbaf33f #
12
É incrível como o MS com tanto diz nada realmente digno. Por exemplo, o WCF suporta JSON, mas essas informações estão bem ocultas nessa "comparação", enquanto diz textualmente que o WebApi suporta JSON não uma, mas duas vezes.
magallanes
1
esta tabela não tem sentido. "JQuery" (aspas assustadoras para a capital J) é um protocolo e / ou formato?
hyankov 02/09
1
Interessante. O MSDN está errado ao mencionar o HTTP como um protocolo de transporte. HTTP é um protocolo de camada de aplicativo.
RayLoveless
80

A API da Web do ASP.net é baseada em HTTP e REST, GET, POST, PUT, DELETE, com o conhecido estilo de programação ASP.net MVC e retornável em JSON; API web é para todo o processo leve e componentes puros baseados em HTTP. Para que você possa avançar com o WCF, mesmo para serviços web simples ou mais simples, isso trará toda a bagagem extra. Para um serviço simples e leve para chamadas ajax ou dinâmicas, o WebApi sempre resolve a necessidade. Isso complementa perfeitamente ou ajuda em paralelo ao ASP.net MVC.

Confira o podcast: Hanselminutes Podcast 264 - Este não é o WCF de seu pai - Tudo sobre o WebAPI com Glenn Block, de Scott Hanselman, para mais informações.

Naveen Vijay
fonte
67

Nos cenários listados abaixo, você deve ir para o WCF:

  1. Se você precisar enviar dados em protocolos como TCP, MSMQ ou MIME
  2. Se o cliente consumidor souber apenas consumir mensagens SOAP

A API WEB é uma estrutura para o desenvolvimento de serviços RESTful / HTTP.

Existem muitos clientes que não entendem o SOAP, como Navegadores, HTML5; nesses casos, as APIs da WEB são uma boa opção.

O cabeçalho de serviços HTTP especifica como proteger o serviço, como armazenar em cache as informações, o tipo do corpo da mensagem e o corpo HTTP pode especificar qualquer tipo de conteúdo, como HTML, não apenas XML, como serviços SOAP.

Kris
fonte
7
Isso pressupõe que o WCF lida apenas com mensagens SOAP, uma suposição incorreta. Você também pode expor pontos de extremidade REST nos serviços WCF. Eu o modificaria para dizer, se você não usar os recursos do WCF (consulte a mensagem de tridy), a API da Web fará sentido.
Mike
3
Sim, o WCF também funciona. Basicamente, a API da Web é um subconjunto da funcionalidade dos WCFs que é apropriado se você estiver executando aplicativos de dados simples no estilo CRUD.
usar o seguinte comando
41

Desde o uso de ambos até agora, encontrei muitas diferenças entre o WCF e a API da Web. Ambas as pilhas de tecnologia são adequadas para diferentes cenários; portanto, não é possível dizer qual é o melhor, isso depende da configuração e do cenário.

Properties              ASP.Net Web API                         WCF
--------------------------------------------------------------------------------------------------
End point (mainly)      Http based                              SOAP based
Service Type            Front End                               Back-end
Support                 caching, compression, versioning        No
Framework               ASP.net                                 WCF
Orientation             Resource Oriented                       Service Oriented
Transports              http                                    http, tcp, MSMQ, Named pipe
Message pattern         Request reply                           request Reply, one way, duplex
Configuration overhead  Less                                    Much
Security                lesser than WCF (web standard security) Very high (WS-I standard)
Hosting                 IIS                                     IIS, Windows Service, Self hosting
Performance             Fast                                    A bit slower than Web API
In use from             .NET 4.0                                .NET 3.5

Nota: Os dados não são apenas da minha opinião, mas também são coletados de outros sites oficiais.

Rajput
fonte
12
Serviço Web API também pode ser auto-hospedado (Owin / Katana), bem como em um serviço do Windows
Monis Iqbal
menos 1 para criar a tabela usando uma imagem em vez de HTML, pois isso impede a edição da resposta para aprimoramento.
Ahsan Ahmed
34

O WCF lhe dará muito do que precisa, que nem é comparável a nada. A menos que você queira implementar por conta própria (para citar alguns) autenticação, autorização, criptografia, enfileiramento, limitação, mensagens confiáveis, registro, sessões e assim por diante. O WCF não é [apenas] serviços da web; O WCF é uma plataforma de desenvolvimento para SOA.

tridy
fonte
11
Se não me engano, acho que a API WEB também fornece a maioria das funções que você listou.
285 Alex
4
Nenhuma API da Web não fornece essas coisas ou fornece versões muito simples.
user1496062
3
Bem, o que é isso - fornece ou não?
5
Para autenticação e autorização, verifique asp.net/web-api/overview/security/… . tl; dr: suporta definitivamente no IIS. Para criptografia, você provavelmente precisará usar SSL, o ASP.NET manipula naturalmente as filas (mas isso é feito com base nos threads de trabalho disponíveis versus solicitações recebidas). Existem sessões (mas eu nunca recomendo o uso direto de sessões). O registro é fácil de configurar (por meio do ActionFilters ou outros). Uma alternativa para mensagens confiáveis ​​é usar o SignalR (embora não exatamente).
James Haug
7
"Não é comparável a nada" ?? Improvável.
precisa saber é o seguinte
16

Por que estou respondendo:

Demorei muito tempo para entender a diferença entre essas duas tecnologias. Vou colocar todos esses pontos aqui que penso: "Se eu tive esses pontos no momento em que estava pensando em busca dessa resposta, então decidi muito antes selecionar a tecnologia necessária".

Fonte de informação:

Liberado o Microsoft® Visual Studio® 2015

ISBN-13: 978-0-672-33736-9 ISBN-10: 0-672-33736-3

Por que API da Web do ASP.NET e WCF:

Antes de comparar as tecnologias da API da Web do ASP.NET e do WCF, é importante entender que existem dois estilos / padrões para criar serviços da Web: REST (Representational State Transfer) e SOAP / WSDL. O SOAP / WSDL era o padrão original no qual os serviços da web foram construídos. No entanto, era difícil de usar e tinha formatos de mensagens volumosos (como XML) que prejudicavam o desempenho. Os serviços baseados em REST rapidamente se tornaram a alternativa. Eles são mais fáceis de escrever porque utilizam as construções básicas do HTTP (GET, POST, PUT, DELETE) e geralmente usam formatos de mensagens menores (como JSON). Como resultado, os serviços HTTP baseados em REST agora são o padrão para serviços de gravação direcionados estritamente à Web.

Vamos definir o objetivo da API da Web do ASP.NET

A API da Web do ASP.NET é a tecnologia da Microsoft para o desenvolvimento de serviços da Web HTTP baseados em REST. (Há muito tempo substituiu o ASMX da Microsoft, que era baseado em SOAP / WSDL.) A API da Web facilita a criação de serviços robustos com base em protocolos HTTP que todos os navegadores e dispositivos nativos entendem. Isso permite criar serviços para dar suporte ao seu aplicativo e chamá-los de outros aplicativos da web, tablets, telefones celulares, PCs e consoles de jogos. A maioria dos aplicativos criados hoje para alavancar a sempre presente conexão com a Web usa serviços HTTP de alguma maneira.

Vamos agora definir o objetivo do WCF:

A comunicação pela Internet nem sempre é o meio mais eficiente. Por exemplo, se o cliente e o serviço existirem na mesma tecnologia (ou mesmo na mesma máquina), eles poderão negociar um meio mais eficiente de se comunicar (como TCP / IP). Os desenvolvedores de serviços se viram fazendo as mesmas escolhas que estavam tentando evitar. Agora, eles teriam que escolher entre criar serviços internos eficientes e poder ter o amplo acesso encontrado na Internet. E, se eles precisassem oferecer suporte a ambos, talvez precisassem criar várias versões de seus serviços ou pelo menos proxies separados para acessar seus serviços. Esse é o problema que a Microsoft resolveu com o WCF .

Com o WCF, você pode criar seu serviço sem se preocupar com limites. Em seguida, você pode deixar o WCF se preocupar em executar seu serviço da maneira mais eficiente, dependendo do cliente que está chamando. Para gerenciar esta tarefa, o WCF usa o conceito de terminais. Seu serviço pode ter vários pontos de extremidade (configurados em tempo de design ou após a implantação). Cada ponto de extremidade indica como o serviço pode oferecer suporte a um cliente que está chamando: pela Web, via comunicação remota, pelo Microsoft Message Queuing (MSMQ) e muito mais. O WCF permite que você se concentre na criação da funcionalidade do seu serviço. Preocupa-se em como falar com mais eficiência com os clientes que ligam. Dessa maneira, um único serviço WCF pode suportar com eficiência muitos tipos diferentes de clientes.

Exemplo de WCF:

Considere o exemplo:

Os dados do cliente são compartilhados entre os aplicativos. Cada aplicativo pode ser gravado em uma plataforma diferente e pode existir em um local diferente. Você pode extrair a interface do cliente em um serviço WCF que fornece acesso comum a dados compartilhados do cliente. Isso centraliza os dados, reduz a duplicação, elimina a sincronização e simplifica o gerenciamento. Além disso, usando o WCF, você pode configurar os terminais de serviço para funcionarem da maneira que faz sentido para o cliente que está chamando. A figura mostra o exemplo de antes com acesso centralizado aos dados do cliente em um serviço WCF.

É assim que o WCF atende a diferentes clientes

Conclusão:

i) Quando escolher a API da Web:

Não há como negar que os serviços HTTP baseados em REST, como os criados usando a API da Web do ASP.NET, se tornaram o padrão para a criação de serviços da web. Esses serviços oferecem uma abordagem fácil e direta aos desenvolvedores da Web que estão criando serviços. Os desenvolvedores da Web compreendem HTTP GET e POST e, assim, adaptam-se bem a esses tipos de serviços. Portanto, se você estiver escrevendo serviços estritamente direcionados ao HTTP , a API da Web do ASP.NET é a opção lógica.

ii) Quando escolher o WCF:

A tecnologia WCF é útil quando você precisa oferecer suporte a vários pontos de extremidade de serviço com base em diferentes protocolos e formatos de mensagem. Produtos como o Microsoft BizTalk utilizam o WCF para criar serviços robustos que podem ser usados ​​na Web e também através de diferentes configurações de máquina para máquina.Se, no entanto, você precisar escrever um aplicativo que se comunique por TCP / IP quando conectado ao local rede e funciona sobre HTTP quando estiver fora da rede, o WCF é sua resposta .

Esteja avisado:

Os desenvolvedores da Web costumam ver o WCF como mais difícil e complexo de desenvolver. Portanto, se você não prever a necessidade de serviços multiprotocolo, provavelmente ficará com a API da Web do ASP.NET.

Muhammad Waqas Dilawar
fonte
1
Não adicione a mesma resposta a várias perguntas . Responda à melhor e sinalize o restante como duplicado, depois de ganhar reputação suficiente. Se não for uma duplicata, adapte a postagem à pergunta e sinalize a exclusão.
Bhargav Rao
12

Há uma comparação no MSDN sobre isso

API da Web do WCF e do ASP.NET

Para mim, a escolha foi sobre Quem são os clientes e onde eles estão localizados?

Dentro da empresa, os clientes baseados em rede e .NET: Use WCF com ligação TCP (comunicação rápida que HTTP)

Fora da rede da empresa e use diversas tecnologias como PHP, Python, etc : use API Web com REST

Arshad Mohammad
fonte
9

Falando de negócios, o WebApi não possui um WSDL, portanto os desenvolvedores devem documentar todos manualmente. E se, por exemplo, a operação WebApi retornar uma lista de objetos, o cliente deverá criar os objetos manualmente, ou seja, o WebAPI é realmente propenso a erros de definições.

O profissional do Webapi é mais leve que o WCF.

Magallanes
fonte
3
WCF == WS- *, webapi == REST
BozoJoe 23/06
7

Em relação à declaração "WebApi falta de WSDL", existem várias maneiras de gerar o cliente Rest. Uma abordagem popular é a Swagger UI / (Swashbukkle Nuget). Isso fornece uma interface rica para entender o esquema de entrada e saída do terminal REST e a ferramenta online para testar os terminais.

O JSON LD (Json Linked Documents) é outro padrão emergente que melhorará ainda mais a experiência do desenvolvedor REST baseado em JSON, expondo o esquema JSON com melhor semântica.

Venkatesh Muniyandi
fonte
1

Com o wcf, podemos configurar e expor o mesmo suporte de serviço para vários pontos de extremidade, como tcp, http.se você desejar que seu serviço seja baseado apenas em http, será melhor usar a API da web. A API da Web tem muito menos configuração quando comparada ao wcf e é um pouco mais rápida que o wcf. O Wcf também suporta serviços repousantes. Se você tiver uma limitação do .Net framework 3.5, sua opção será wcf.

Nayas Subramanian
fonte