Quali sono le differenze tra i servizi Web WCF e ASMX?


375

Sono totalmente confuso tra i servizi web WCF e ASMX. Ho usato molti servizi web nella mia prima fase, e ora c'è questa nuova cosa introdotta chiamata WCF. Posso ancora creare WCF che funzioni come un servizio web. Penso che ci saranno più cose in WCF.

Quali sono le differenze tra WCF e servizi Web? Quando dovrebbero essere usati tutti?


5
Non c'è modo che questa sia una domanda di raccomandazione. Né ASMX né WCF sono un prodotto. Sono due iterazioni di servizi Web nello stack di Microsoft. La domanda è: quali sono le differenze e vale la pena dedicare del tempo a imparare quello nuovo? Questa non è la stessa cosa di "dovrei usare i controlli di Telerik o Infragistics.
John Saunders,

Risposte:


391

Keith Elder confronta bene ASMX con WCF qui. Controlla.

Un altro confronto tra ASMX e WCF può essere trovato qui - Non sono d'accordo al 100% con tutti i punti lì, ma potrebbe darti un'idea.

WCF è fondamentalmente "ASMX su stereoidi" - può essere tutto ciò che ASMX potrebbe fare - e molto altro ancora!.

ASMX è:

  • facile e semplice da scrivere e configurare
  • disponibile solo in IIS
  • richiamabile solo da HTTP

WCF può essere:

  • ospitato in IIS, un servizio Windows, un'applicazione Winforms, un'app console: hai totale libertà
  • utilizzato con HTTP (REST e SOAP), TCP / IP, MSMQ e molti altri protocolli

In breve: WCF è qui per sostituire completamente ASMX.

Dai un'occhiata al Centro per sviluppatori WCF su MSDN .

Aggiornamento: il collegamento sembra essere morto - prova questo: cos'è Windows Communication Foundation?


15
Con Visual Studio 2010 .net 4.0 WCF è facile da scrivere come ASMX, non ci sono più scuse per scrivere ASMX. WCF è molto più veloce, più flessibile, più sicuro. ASMX è legacy e nessuno dovrebbe ancora scriverlo periodo.
Tom Stickel,

13
"La maggior parte degli sviluppatori presume erroneamente che ASMX richieda IIS; dopotutto, è l'unico caso d'uso che abbiano mai visto. Ma la verità è che ASMX non ha alcuna dipendenza tecnica da IIS." msdn.microsoft.com/en-us/magazine/cc163879.aspx
MrNick

2
@MrNick: giusto. No IIS, ma solo HTTP, e confronta il codice per l'hosting ASMX con il codice per l'hosting di un servizio WCF.
John Saunders,

1
Sfortunatamente il link keithelder.net/2008/10/17/wcf-vs-asmx-webservices è rotto.
Robert

2
@codemonkeyliketab: la risposta ha più di 6 anni - anni luce nell'era di Internet! Ho cercato di trovare un sostituto per il Centro per sviluppatori WCF - vedi il mio aggiornamento
marc_s,

37

I servizi Web ASMX possono essere richiamati solo tramite HTTP (servizio Web tradizionale con .asmx). Mentre il servizio WCF o un componente WCF può essere invocato da qualsiasi protocollo (come http, tcp ecc.) E qualsiasi tipo di trasporto.

In secondo luogo, i servizi Web ASMX non sono flessibili. Tuttavia, i servizi WCF sono flessibili. Se crei una nuova versione del servizio, devi solo esporre una nuova fine. Pertanto, i servizi sono agili e questo è un approccio molto pratico che guarda alle attuali tendenze di business.

Sviluppiamo WCF come contratti, interfaccia, operazioni e contratti dati. Come sviluppatore siamo più concentrati sui servizi di business logic e non dobbiamo preoccuparci dello stack di canali. WCF è un'API di programmazione unificata per qualsiasi tipo di servizio, quindi creiamo il servizio e utilizziamo le informazioni di configurazione per impostare il meccanismo di comunicazione come HTTP / TCP / MSMQ ecc.


11
Forse sono solo io, ma i paragrafi 2 e 3 si distinguono come marketing BS.
Neolisk,

@Net Experts hai detto "Se crei una nuova versione del servizio, devi solo esporre una nuova fine" che cosa stai cercando di dire?
Mou,

@Mou, intendeva esporre un nuovo endpointcredo. Come<endpoint address="http://api.microsofttranslator.com/V1/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService1" contract="TranslatorService.LanguageService" name="BasicHttpBinding_LanguageService3" />
AlexMelw,

25

Questa è una domanda molto antica, ma non credo che i benefici di ASMX siano stati descritti in modo equo. Sebbene non estremamente flessibili, i servizi Web ASMX sono molto semplici da usare e da capire. Mentre WCF è più flessibile, è anche più complesso alzarsi e configurare.

I servizi Web ASMX sono pronti per alzarsi e aggiungere come riferimento al servizio Web non appena si aggiunge il file. (supponendo che il tuo progetto sia compilato)

Per il semplice flusso di lavoro di sviluppo di create webservice-> run webservice-> add webservice reference, un servizio web ASMX ha ben poco che può andare storto, non molto da poter configurare in modo errato, e questa è la sua forza.

In risposta a quelli che affermano che WCF sostituisce ASMX, risponderei che WCF avrebbe bisogno di aggiungere una modalità di configurazione KISS semplificata per sostituire completamente ASMX.

Esempio web.config per un servizio web ASMX:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings />
  <system.web>
    <compilation targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
</configuration>

Non credo che WCF abbia bisogno di più configurazione per il lavoro che può essere fatto usando i servizi web asmx e puoi anche aggiungere un riferimento nel tuo client per il servizio WCF, WCF è molto più potente di asmx, può fare ciò che asmx fa e sarà semplice come asmx
Coder1409

9
@ Coder1409 beh è sicuramente più configurazione, perché alcune cose devono essere configurate. Rilegatura, rilevabilità, ecc. Non necessario in asmx. Contratti di servizio, contratti operativi, contratti dati, membri dati. Non necessario in Asmx. Naturalmente queste cose sono il motivo per cui wcf è superiore e più potente, ma negare che aggiunga complessità non è semplicemente onesto. Sta arrivando a dire che non ci sono aspetti negativi.
Andrew Hoffman,

7
La prima (seconda, terza ...) volta che ho creato un wcf mi ci sono voluti anni per capire la configurazione richiesta. "Perché devo farlo?" continuavo a chiedermi. "Perché preoccuparsi di qualcosa di così complesso?". asmx ha funzionato all'istante. Quindi dire che è altrettanto semplice non è vero. Un giorno capirò e cambierò completamente il mio punto di vista - fino a quel giorno GRRRR !!!
tomjm,

1
@tomjm Ancora una volta, provalo con una versione moderna di Visual Studio e .NET. Tra le altre cose, il sistema di configurazione ha cambiato di default altre impostazioni. In particolare, difficilmente dovrai fare di più che specificare l'URL per ottenere un semplice servizio Web, solo http, senza funzionalità.
John Saunders,

1
@tomjm Bene, questo è buono a sapersi. Onestamente, era così tanta configurazione che aveva senso usare un'app wcf config manager. Potrebbe fare tutto! (eccetto il lavoro immediato con alcune buone impostazioni predefinite) Tuttavia al giorno d'oggi pensiamo più semplicemente ai servizi WEB. Wcf è ancora ottimo per il servizio avanzato, ma .. probabilmente la maggior parte dello sviluppo del servizio è lo sviluppo di servizi Web, ed è difficile battere webapi2 per lo sviluppo di servizi Web imo.
Andrew Hoffman,

10

WCF sostituisce completamente i servizi Web ASMX. ASMX è il vecchio modo di fare servizi web e WCF è il modo attuale di fare servizi web. Tutto lo sviluppo di nuovi servizi Web SOAP, sul client o sul server, deve essere eseguito utilizzando WCF.


32
Il problema è che, mentre ASMX era un modello semplicistico (che significa non estremamente flessibile), era un modello semplice (che significa facile da usare e capire per le esigenze del servizio web più comuni). WCF aggiunge molta ulteriore complessità. Mentre MS vuole sostituire ASMX con WCF, sembra esserci un po 'di resistenza fino a quando MS renderà gli scenari più comuni semplici come il vecchio metodo [Webmethod].
mattmc3,

6
WCF non è affatto complesso. Crea un semplice servizio web "ciao mondo" in entrambi e vedi quanto codice scrivi in ​​ciascuno. La risposta: non molto in entrambi, e solo leggermente più in WCF. E, BTW, ASMX già è stato sostituito da WCF. Affare fatto.
John Saunders,

58
"WCF non è affatto complesso" Ha. Dillo a modo mio Web.config.
mattmc3,

26
(Non un downvoter, ma ti dirò perché) - perché "questo è nuovo e quello vecchio" non è una differenza significativa di cui qualcuno dovrebbe preoccuparsi. Non scegliamo strumenti basati esclusivamente sulla loro età: il martello è molto, molto vecchio, ma è ancora lo strumento migliore per guidare le unghie la maggior parte del tempo. Quindi, hai dato una risposta valida, non è poi così utile - come il vecchio scherzo "sei in aereo".
Jasmine,

5
giù votato - nessun riferimento. Come conosci queste informazioni? È opinione? Lavori in Microsoft? Aggiungi un riferimento e voterò.
tomjm,

7

Ci sono molte discussioni in corso sulla semplicità dei servizi web asmx su WCF. Vorrei chiarire alcuni punti qui.

  • È vero che gli sviluppatori di servizi web per principianti inizieranno facilmente nei servizi web asmx. Visual Studio fa tutto il lavoro per loro e crea prontamente un progetto Hello World.
  • Ma se riesci a imparare WCF (che ovviamente non richiederà molto tempo) allora puoi vedere che WCF è anche abbastanza semplice e puoi andare avanti facilmente.
  • È importante ricordare che queste dette complessità in WCF sono in realtà attribuite alle belle caratteristiche che ne derivano. Esistono indirizzi, collegamenti, contratti ed endpoint, servizi e client tutti menzionati nel file di configurazione. Il bello è che la tua logica aziendale è separata e mantenuta in sicurezza. Domani, se è necessario modificare l'associazione da basicHttpBinding a netTcpBinding si può facilmente creare un file di configurazione vincolante e utilizzarlo. Quindi tutte le modifiche relative a client, canali di comunicazione, collegamenti ecc. Devono essere fatte nella configurazione lasciando la logica di business sicura e intatta, il che ha davvero senso.
  • I "servizi web" WCF fanno parte di uno spettro molto più ampio di comunicazione remota abilitato tramite WCF. Otterrai un livello molto più alto di flessibilità e portabilità nel fare le cose in WCF rispetto a ASMX tradizionale perché WCF è progettato, da zero, per riassumere tutte le diverse infrastrutture di programmazione distribuita offerte da Microsoft. Un endpoint in WCF può essere comunicato con la stessa facilità su SOAP / XML come su TCP / binario e cambiare questo supporto è semplicemente una mod del file di configurazione. In teoria, ciò riduce la quantità di nuovo codice necessario quando si effettua il porting o si modificano esigenze aziendali, obiettivi, ecc.
  • I servizi Web sono accessibili solo tramite HTTP e funzionano in un ambiente senza stato, dove WCF è flessibile perché i suoi servizi possono essere ospitati in diversi tipi di applicazioni. Puoi ospitare i tuoi servizi WCF in Console, Servizi Windows, IIS e WAS, che sono di nuovo modi diversi di creare nuovi progetti in Visual Studio.
  • ASMX è più vecchio di WCF e qualsiasi cosa ASMX possa fare, WCF (e altro). Fondamentalmente puoi vedere WCF come cercare di raggruppare logicamente tutti i diversi modi di far comunicare due app nel mondo di Microsoft; ASMX era solo uno di questi molti modi e quindi è ora raggruppato sotto l'ombrello delle capacità WCF.
  • Ti piacerà sempre usare Visual Studio per NET 4.0 o 4.5 in quanto semplifica la vita durante la creazione di servizi WCF.
  • La differenza principale è che i servizi Web utilizzano XmlSerializer. Ma WCF utilizza DataContractSerializer, che è migliore in termini di prestazioni rispetto a XmlSerializer. Ecco perché WCF ha prestazioni migliori rispetto ad altre controparti della tecnologia di comunicazione di .NET come asmx, .NET remoting ecc.

Per non dimenticare che ero uno di quei ragazzi a cui piacevano i servizi asmx più di WCF, ma quella volta non ero ben consapevole dei servizi WCF e delle sue capacità. Avevo paura delle configurazioni WCF. Ma ho osato e ho provato a scrivere alcuni servizi WCF per conto mio, e quando ho imparato di più su WCF, ora non ho inibizioni su WCF e li consiglio a tutti. Buona codifica !!!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.