Quais são as diferenças entre os serviços web WCF e ASMX?

375

Estou totalmente confuso entre os serviços Web WCF e ASMX. Eu usei muitos serviços da Web no meu estágio anterior e agora há uma novidade introduzida chamada WCF. Ainda posso criar o WCF que funciona como um serviço da web. Eu acho que haverá mais coisas no WCF.

Quais são as diferenças entre os serviços WCF e Web? Quando cada um deve ser usado?

shailesh
fonte
5
Não há como esta ser uma pergunta de recomendação. Nem o ASMX nem o WCF são produtos. São duas iterações de serviços da Web na pilha da Microsoft. A questão é quais são as diferenças e vale a pena aprender a nova? Esta não é a mesma coisa que "eu deveria usar controles Telerik ou Infragistics.
John Saunders

Respostas:

391

Keith Elder compara muito bem o ASMX ao WCF aqui. Confira.

Outra comparação do ASMX e do WCF pode ser encontrada aqui - não concordo 100% com todos os pontos, mas pode lhe dar uma idéia.

O WCF é basicamente "ASMX em estéreo" - pode ser tudo o que o ASMX poderia - e muito mais! .

ASMX é:

  • fácil e simples de escrever e configurar
  • disponível apenas no IIS
  • somente pode ser chamado de HTTP

O WCF pode ser:

  • hospedado no IIS, um serviço Windows, um aplicativo Winforms, um aplicativo de console - você tem total liberdade
  • usado com HTTP (REST e SOAP), TCP / IP, MSMQ e muitos mais protocolos

Em resumo: o WCF está aqui para substituir o ASMX completamente.

Confira o WCF Developer Center no MSDN .

Atualização: o link parece estar morto - tente o seguinte: O que é o Windows Communication Foundation?

marc_s
fonte
15
Com o visual studio 2010 .net 4.0 WCF é tão fácil de escrever quanto o ASMX, não há mais desculpa para escrever o ASMX. O WCF é muito mais rápido, mais flexível e mais seguro. O ASMX é legado e ninguém ainda deve escrever esse período.
21412 Tom Tomel
13
"A maioria dos desenvolvedores assume incorretamente que o ASMX requer o IIS; afinal, é o único caso de uso que eles já viram. Mas a verdade é que o ASMX não tem nenhuma dependência técnica no IIS." msdn.microsoft.com/en-us/magazine/cc163879.aspx
MrNick
2
@ MrNick: certo. No IIS, mas ainda apenas HTTP, e compare o código para hospedar o ASMX com o código para hospedar um serviço WCF.
John Saunders
11
Infelizmente o link keithelder.net/2008/10/17/wcf-vs-asmx-webservices está quebrado.
Robert
2
@codemonkeyliketab: a resposta tem mais de 6 anos - anos de idade na internet! Tentei encontrar um substituto para o WCF Developer Center - consulte a minha atualização
marc_s
37

Os serviços da Web ASMX podem ser invocados apenas por HTTP (serviço da web tradicional com .asmx). Enquanto o Serviço WCF ou um componente WCF pode ser chamado por qualquer protocolo (como http, tcp etc.) e qualquer tipo de transporte.

Segundo, os serviços web ASMX não são flexíveis. No entanto, os Serviços WCF são flexíveis. Se você criar uma nova versão do serviço, precisará expor apenas um novo final. Portanto, os serviços são ágeis e é uma abordagem muito prática, observando as tendências atuais dos negócios.

Desenvolvemos o WCF como contratos, interface, operações e contratos de dados. Como desenvolvedor, estamos mais focados nos serviços de lógica de negócios e não precisamos nos preocupar com a pilha de canais. O WCF é uma API de programação unificada para qualquer tipo de serviço, por isso criamos o serviço e usamos informações de configuração para configurar o mecanismo de comunicação como HTTP / TCP / MSMQ etc.

Especialistas da NET
fonte
11
Talvez seja só eu, mas os parágrafos 2 e 3 se destacam como BS de marketing.
Neolisk
@ Net Experts u disse: "Se você faz uma nova versão do serviço, precisa expor um novo fim", o que você está tentando dizer?
Mou
@ Mu, ele quis dizer expor um novo, endpointeu acho. Como<endpoint address="http://api.microsofttranslator.com/V1/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService1" contract="TranslatorService.LanguageService" name="BasicHttpBinding_LanguageService3" />
AlexMelw
25

Essa é uma pergunta muito antiga, mas não acho que os benefícios do ASMX tenham sido retratados de maneira justa. Embora não seja muito flexível, os serviços web ASMX são muito simples de usar e entender. Embora o WCF seja mais flexível, também é mais complexo se levantar e configurar.

Os serviços da Web ASMX estão prontos para se levantar e adicionar como referência de serviço da web assim que você adicionar o arquivo. (supondo que o seu projeto seja compilado)

Para o fluxo de trabalho de desenvolvimento simples de create webservice-> run webservice-> add webservice reference, um serviço da Web ASMX tem muito pouco que pode dar errado, não muito que você possa desconfigurar, e é isso que é forte.

Em resposta àqueles que afirmam que o WCF substitui o ASMX, eu responderia que o WCF precisaria adicionar um modo de configuração simplificado do KISS para substituir completamente o ASMX.

Exemplo web.config para um serviço da web ASMX:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings />
  <system.web>
    <compilation targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
</configuration>
Andrew Hoffman
fonte
Eu não acho que o WCF precise de mais configuração para o trabalho que pode ser feito usando serviços da Web asmx, e você também pode adicionar uma referência no seu cliente para o serviço WCF, o WCF é muito mais poderoso que o asmx, ele pode fazer o que asmx faz e ele vai ser tão simples como asmx
Coder1409
9
@ Coder1409 bem, certamente é mais configuração, porque algumas coisas precisam ser configuradas. Encadernação, descoberta, etc. Não é necessário em asmx. Contratos de serviço, contratos de operação, contratos de dados, membros de dados. Não é necessário em asmx. É claro que essas são as razões pelas quais o wcf é superior e mais poderoso, mas negar que acrescenta complexidade simplesmente não está sendo honesto. Está chegando ao ponto de dizer que não há desvantagens.
Andrew Hoffman
7
A primeira (segunda, terceira ...) vez em que criei um wcf, levei anos para descobrir a configuração necessária. "Por que eu preciso fazer isso?" eu ficava me perguntando. "Por que se preocupar com algo tão complexo?". o asmx funcionou instantaneamente. Dizer que é tão simples quanto isso não é verdade. Um dia eu vou entender e mudar completamente minha opinião - até aquele dia GRRRR !!!
tomjm
11
@tomjm Novamente, tente com uma versão moderna do Visual Studio e .NET. Entre outras coisas, o sistema de configuração mudou para o padrão de mais configurações. Em particular, você dificilmente precisará fazer mais do que especificar o URL para obter um serviço da Web simples, apenas http, sem recursos.
John Saunders
11
@ tomjm Bem, é bom saber. Honestamente, costumava ser tanta configuração que fazia sentido usar um aplicativo gerenciador de configuração wcf. Poderia fazer tudo! (exceto trabalhar fora da caixa com algumas boas configurações padrão) No entanto, hoje em dia pensamos mais simplesmente nos serviços WEB. O Wcf ainda é ótimo para serviços avançados, mas .. provavelmente a maioria do desenvolvimento de serviços é desenvolvimento de serviços da web, e é difícil vencer o webapi2 para o desenvolvimento de serviços da web.
Andrew Hoffman
10

O WCF substitui completamente os serviços web ASMX. O ASMX é a maneira antiga de executar serviços da Web e o WCF é a maneira atual de executar serviços da Web. Todo novo desenvolvimento de serviço da web SOAP, no cliente ou no servidor, deve ser feito usando o WCF.

John Saunders
fonte
32
O problema é que, embora o ASMX fosse um modelo simplista (não muito flexível), era um modelo simples (fácil de usar e entender para as necessidades mais comuns de serviços da Web). O WCF adiciona muita complexidade extra. Embora a MS queira substituir o ASMX pelo WCF, parece haver um pouco de resistência até que o MS torne os cenários mais comuns tão simples quanto o antigo modo [Webmethod].
mattmc3
6
O WCF não é nada complexo. Crie um serviço da web simples "olá mundo" nos dois e veja quanto código você escreve em cada um. A resposta: não muito em ambos, e apenas um pouco mais no WCF. E, BTW, ASMX já tenha sido substituído por WCF. Negócio feito.
John Saunders
58
"O WCF não é nada complexo" Ha. Diga isso do meu jeito, exagerou no web.config.
mattmc3
26
(Não é um defensor negativo, mas eu vou lhe dizer o porquê) - porque "isso é novo e é velho" não é uma diferença significativa com a qual alguém deveria se preocupar. Não escolhemos ferramentas baseadas apenas na idade - o martelo é muito, muito antigo, mas ainda é a melhor ferramenta para pregos na maioria das vezes. Então, você deu uma resposta válida, simplesmente não é tão útil - como a velha piada "você está em um avião".
Jasmine
5
votado para baixo - nenhuma referência. Como você conhece essas informações? É opinião? Você trabalha para a microsoft? Adicione uma referência e eu votarei.
tomjm
7

Há muitas conversas sobre a simplicidade dos serviços da web asmx sobre o WCF. Deixe-me esclarecer alguns pontos aqui.

  • É verdade que os desenvolvedores iniciantes de serviços da Web começarão facilmente nos serviços da Web asmx. O Visual Studio faz todo o trabalho para eles e cria prontamente um projeto Hello World.
  • Mas se você pode aprender o WCF (que obviamente não levará muito tempo), poderá ver que o WCF também é bastante simples e pode prosseguir com facilidade.
  • É importante lembrar que essas complexidades mencionadas no WCF são realmente atribuídas aos belos recursos que ele traz consigo. Existem endereçamento, ligações, contratos e terminais, serviços e clientes, todos mencionados no arquivo de configuração. A beleza é que a lógica do seu negócio é segregada e mantida com segurança. Amanhã, se você precisa mudar a ligação de basicHttpBinding para netTcpBinding você pode facilmente criar um arquivo obrigatório em configuração e usá-lo. Portanto, todas as alterações relacionadas a clientes, canais de comunicação, ligações etc. devem ser feitas na configuração, deixando a lógica de negócios segura e intacta, o que faz muito sentido.
  • Os "serviços da web" do WCF fazem parte de um espectro muito mais amplo de comunicação remota habilitada pelo WCF. Você obterá um grau muito maior de flexibilidade e portabilidade ao realizar as tarefas no WCF do que no ASMX tradicional porque o WCF foi projetado, desde o início, para resumir todas as diferentes infraestruturas de programação distribuída oferecidas pela Microsoft. Um terminal no WCF pode ser comunicado com a mesma facilidade pelo SOAP / XML do TCP / binário e alterar esse meio é simplesmente um mod de arquivo de configuração. Em teoria, isso reduz a quantidade de novo código necessário ao portar ou alterar as necessidades, metas, etc.
  • Os Serviços da Web podem ser acessados ​​apenas por HTTP e funcionam em ambiente sem estado, onde o WCF é flexível porque seus serviços podem ser hospedados em diferentes tipos de aplicativos. Você pode hospedar seus serviços WCF no Console, Windows Services, IIS e WAS, que são novamente maneiras diferentes de criar novos projetos no Visual Studio.
  • O ASMX é mais antigo que o WCF e qualquer coisa que o ASMX possa fazer, o WCF (e mais). Basicamente, você pode ver o WCF tentando agrupar logicamente todas as maneiras diferentes de fazer com que dois aplicativos se comuniquem no mundo da Microsoft; O ASMX era apenas uma dessas muitas maneiras e agora está agrupado sob o guarda-chuva de recursos do WCF.
  • Você sempre gostará de usar o Visual Studio for NET 4.0 ou 4.5, pois facilita a vida ao criar serviços WCF.
  • A principal diferença é que os serviços da Web usam o XmlSerializer. Mas o WCF usa o DataContractSerializer, que é melhor no desempenho em comparação com o XmlSerializer. É por isso que o WCF se sai muito melhor do que outras tecnologias de comunicação do .NET, como asmx, .NET remoting etc.

Para não esquecer que eu era um daqueles caras que gostava mais de serviços asmx do que o WCF, mas naquela época eu não estava bem ciente dos serviços e de seus recursos. Eu estava com medo das configurações do WCF. Mas ousei e tentei escrever alguns serviços do WCF por conta própria e, quando aprendi mais sobre o WCF, agora não tenho inibições sobre o WCF e recomendo a todos e a todos. Feliz codificação !!!

Sagnik Majumder
fonte