WCF ve ASMX web servisleri arasındaki farklar nelerdir?


375

WCF ve ASMX web servisleri arasında tamamen kafam karıştı. Daha önceki aşamada birçok web hizmeti kullandım ve şimdi WCF adı verilen yeni bir şey var. Yine de bir web hizmeti olarak işlev gören WCF oluşturabilirim. WCF'de daha fazla şey olacağını düşünüyorum.

WCF ve Web hizmetleri arasındaki farklar nelerdir? Her biri ne zaman kullanılmalıdır?


5
Bunun bir öneri sorusu olmasının bir yolu yok. Ne ASMX ne de WCF bir ürün değildir. Bunlar Microsoft yığınındaki iki web hizmeti yinelemesidir. Soru şu: Farklılıklar nelerdir ve yenisini öğrenmek için zaman ayırmaya değer mi? Bu, "Telerik kontrollerini veya Infragistics'i kullanmalıyım." İle aynı şey değil.
John Saunders

Yanıtlar:


391

Keith Elder, ASMX'i WCF ile güzel bir şekilde karşılaştırıyor . Bunu kontrol et.

ASMX ve WCF'nin başka bir karşılaştırması burada bulunabilir -% 100 oradaki tüm noktalara katılmıyorum, ancak size bir fikir verebilir.

WCF temel olarak "stereoidlerde ASMX" dir - ASMX'in yapabileceği her şey olabilir - ve çok daha fazlası! .

ASMX:

  • kolay ve kolay yazma ve yapılandırma
  • yalnızca IIS'de kullanılabilir
  • sadece HTTP'den çağrılabilir

WCF olabilir:

  • IIS'de, bir Windows Hizmetinde, bir Winforms uygulamasında, bir konsol uygulamasında barındırılıyor - tam özgürlüğünüz var
  • HTTP (REST ve SOAP), TCP / IP, MSMQ ve daha birçok protokolle birlikte kullanılır

Kısacası: WCF, ASMX'in yerini tamamen alacaktır.

Check out MSDN'deki WCF Geliştirici Merkezini .

Güncelleme: bağlantı ölü gibi görünüyor - şunu deneyin: Windows İletişim Vakfı Nedir?


15
Visual studio 2010 .net 4.0 WCF ile ASMX kadar kolay yazılır, artık ASMX yazmak için hiçbir mazeret yoktur. WCF çok daha hızlı, daha esnek, daha güvenlidir. ASMX miras ve hala kimse yazmamalı.
Tom Stickel

13
"Çoğu geliştirici, ASMX'in IIS gerektirdiğini yanlış bir şekilde varsayar; sonuçta, şimdiye kadar gördükleri tek kullanım durumu. Ancak gerçek şu ki, ASMX'in IIS'ye herhangi bir teknik bağımlılığı yoktur." msdn.microsoft.com/en-us/magazine/cc163879.aspx
MrNick

2
@ MrNick: doğru. IIS yok, ancak yalnızca HTTP ve ASMX'i barındırma kodunu WCF hizmetini barındırma koduyla karşılaştırın.
John Saunders

1
Ne yazık ki keithelder.net/2008/10/17/wcf-vs-asmx-webservices bağlantısı koptu.
Robert

2
@codemonkeyliketab: yanıt 6 yaşından büyük - internet çağında ışık yılı! WCF Geliştirici Merkezi'nin yerini bulmaya çalıştım - güncellememe bakın
marc_s

37

ASMX Web servisleri yalnızca HTTP (.asmx içeren geleneksel web servisi) tarafından çağrılabilir. WCF Hizmeti veya WCF bileşeni herhangi bir protokol (http, tcp vb.) Ve herhangi bir taşıma türü tarafından çağrılabilir.

İkinci olarak, ASMX web servisleri esnek değildir. Ancak, WCF Hizmetleri esnektir. Hizmetin yeni bir sürümünü yaparsanız, sadece yeni bir son vermeniz gerekir. Bu nedenle, hizmetler çeviktir ve mevcut iş eğilimlerine bakarak çok pratik bir yaklaşımdır.

WCF'yi sözleşmeler, arayüz, operasyonlar ve veri sözleşmeleri olarak geliştiriyoruz. Geliştirici olarak iş mantığı hizmetlerine daha fazla odaklanıyoruz ve kanal yığını konusunda endişelenmemize gerek yok. WCF, her türlü hizmet için birleşik bir programlama API'sıdır, bu nedenle hizmeti oluşturuyoruz ve HTTP / TCP / MSMQ gibi iletişim mekanizmasını kurmak için yapılandırma bilgilerini kullanıyoruz.


11
Belki de sadece benim, ama 2. ve 3. paragraflar pazarlama BS'si olarak öne çıkıyor.
Neolisk

@Net Uzmanları u "Eğer hizmetin yeni bir sürümünü yaparsanız o zaman sadece yeni bir son ortaya çıkarmak gerekir" dedi u ne söylemeye çalışıyorsun?
Mou

@Mou, endpointsanırım yeni bir şey ortaya çıkarmak istiyordu . Beğen<endpoint address="http://api.microsofttranslator.com/V1/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService1" contract="TranslatorService.LanguageService" name="BasicHttpBinding_LanguageService3" />
AlexMelw

25

Bu çok eski bir soru, ama ASMX'in faydalarının oldukça tasvir edildiğini düşünmüyorum. Çok esnek olmasa da, ASMX web servislerinin kullanımı ve anlaşılması çok basittir. WCF daha esnek olmakla birlikte, ayağa kalkmak ve yapılandırmak da daha karmaşıktır.

ASMX web hizmetleri, dosyayı eklediğiniz anda ayağa kalkıp bir web hizmeti referansı olarak eklemeye hazırdır. (projenizin derlendiğini varsayarak)

create webservice-> run webservice-> basit geliştirme iş akışı için add webservice reference, bir ASMX web servisinin yanlış gidebilecek çok az şeyi vardır, yanlış konfigüre edebileceğiniz kadar çok şey yoktur ve gücü budur.

WCF'nin ASMX'in yerini aldığını iddia edenlere yanıt olarak, WCF'nin ASMX'i tamamen değiştirmek için aerodinamik bir KISS yapılandırma modu eklemesi gerekeceğini söyleyebilirim.

ASMX web hizmeti için örnek web.config:

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

WCF'nin asmx web hizmetleri kullanılarak yapılabilecek işler için daha fazla yapılandırmaya ihtiyacı olduğunu düşünmüyorum ve WCF hizmeti için istemci tarafınıza da bir referans ekleyebilirsiniz, WCF asmx'ten çok daha güçlüdür, asmx ne yapabilir yapar ve asmx kadar basit olacaktır
Coder1409

9
@ Coder1409 iyi kesinlikle daha fazla yapılandırma, çünkü bazı şeylerin yapılandırılması gerekiyor. Bağlanma, bulunabilirlik vb. Asmx'de gerekli değildir. Hizmet sözleşmeleri, işletme sözleşmeleri, veri sözleşmeleri, veri üyeleri. Asmx'de gerekli değildir. Elbette bu şeyler wcf'nin üstün ve daha güçlü olmasının nedenidir, ancak karmaşıklık kattığını inkar etmek sadece dürüst değildir. Hiçbir dezavantajı olmadığını söylemek ulaşıyor.
Andrew Hoffman

7
Birinci (ikinci, üçüncü ...) zaman bir wcf yarattı beni gerekli yapılandırma anlamaya yaş aldı. "Bunu neden yapmam gerekiyor?" kendime sormaya devam ettim. "Neden bu kadar karmaşık bir şeyle uğraşasın ki?" asmx hemen çalıştı. Yani bunun basit olduğunu söylemek doğru değil. Bir gün tamamen anlayacak ve görüşümü değiştireceğim - o güne kadar GRRRR !!!
tomjm

1
@ tomjm Yine, Visual Studio ve .NET'in modern bir sürümü ile deneyin. Diğer şeylerin yanı sıra, yapılandırma sistemi varsayılan daha fazla ayara değiştirildi. Özellikle, yalnızca http olan ve hiçbir özelliği olmayan basit bir web hizmeti almak için URL'yi belirtmekten daha fazlasını yapmanız gerekmez.
John Saunders

1
@tomjm Bunu bilmek güzel. Dürüst olmak gerekirse, wcf yapılandırma yöneticisi uygulamasını kullanmak mantıklıydı. Her şeyi yapabilir! (bazı iyi varsayılan ayarlarla kutunun dışında çalışmak dışında) Ancak günümüzde WEB hizmetleriyle ilgili daha basit düşünüyoruz. Wcf hala gelişmiş hizmet için harika, ama .. muhtemelen hizmet geliştirme çoğunluğu webservice geliştirme, ve webservice geliştirme imo için webapi2 yenmek zor.
Andrew Hoffman

10

WCF, ASMX web servislerinin yerini tamamen almaktadır. ASMX, web hizmetleri yapmanın eski yoludur ve WCF, web hizmetleri yapmanın geçerli yoludur. İstemci veya sunucudaki tüm yeni SOAP web hizmeti geliştirme işlemleri WCF kullanılarak yapılmalıdır.


32
Sorun şu ki, ASMX basit bir modelken (çok esnek olmayan), basit bir modeldi (en yaygın web hizmeti ihtiyaçları için kullanımı ve anlaşılması kolay). WCF çok fazla karmaşıklık katıyor. MS, ASMX'i WCF ile değiştirmek istese de, MS en yaygın senaryoları eski [Webmethod] yolu kadar basit hale getirene kadar buna biraz direnç var gibi görünüyor.
mattmc3

6
WCF hiç de karmaşık değil. Her ikisinde de basit bir "merhaba dünya" web hizmeti oluşturun ve her birine ne kadar kod yazdığınızı görün. Cevap: çok fazla değil ve sadece WCF'de biraz daha fazla. Ve ve ödeyecekleri ASMX zaten olan WCF tarafından değiştirilmiştir. Yapılan anlaşma.
John Saunders

58
"WCF hiç de karmaşık değil" Ha. Bunu abartılı web.config yoluma söyle.
mattmc3

26
(Bir downvoter değil, ama nedenini söyleyeceğim) - çünkü "bu yeni ve bu eski" kimsenin ilgilenmesi gereken önemli bir fark değil. Araçları sadece kaç yaşında olduklarına göre seçmiyoruz - çekiç gerçekten çok eski, ama yine de çoğu zaman çivi sürmek için en iyi araç. Yani, geçerli bir cevap verdiniz, o kadar da yararlı değil - eski "uçaktasınız" şakası gibi.
Yasemin

5
aşağı oy - referans yok. Bu bilgiyi nasıl biliyorsun? Görüş mü? Microsoft için mi çalışıyorsunuz? Bir referans ekleyin ve oy vereceğim.
tomjm

7

WCF üzerinden asmx web hizmetlerinin basitliği ile ilgili görüşmeler devam ediyor. Burada birkaç noktayı açıklığa kavuşturalım.

  • Acemi web hizmeti geliştiricilerinin asmx web servislerinde kolayca başlayacağı doğrudur. Visual Studio onlar için tüm işleri yapar ve kolayca bir Hello World projesi oluşturur.
  • Ancak WCF öğrenirseniz (ki bu ders dışı çok zaman almayacaktır), o zaman WCF'nin de oldukça basit olduğunu ve kolayca devam edebileceğinizi görebilirsiniz.
  • WCF'deki bu karmaşıklıkların aslında beraberinde getirdiği güzel özelliklere atfedildiğini hatırlamak önemlidir. Yapılandırma dosyasında belirtilen adresleme, ciltlemeler, sözleşmeler ve uç noktalar, hizmetler ve istemciler vardır. İş mantığınızın güzelliği ayrı tutulur ve güvenle korunur. Bağlamayı basicHttpBinding yerine netTcpBinding olarak değiştirmeniz gerekirse , yapılandırma dosyasında kolayca bir bağlayıcı oluşturabilir ve kullanabilirsiniz. Bu nedenle, müşteriler, iletişim kanalları, bağlamalar vb. İle ilgili tüm değişiklikler, iş mantığını güvenli ve sağlam bırakarak yapılandırmada yapılacaktır, bu da gerçekten mantıklıdır.
  • WCF "web hizmetleri", WCF aracılığıyla etkinleştirilen çok daha geniş bir uzaktan iletişim yelpazesinin parçasıdır. WCF'de işleri geleneksel ASMX'e göre yapmaktan çok daha fazla esneklik ve taşınabilirlik elde edersiniz, çünkü WCF sıfırdan Microsoft tarafından sunulan tüm farklı dağıtılmış programlama altyapılarını özetlemek üzere tasarlanmıştır. WCF'deki bir uç nokta, TCP / ikili üzerinden olabildiğince SOAP / XML üzerinden kolayca iletilebilir ve bu aracı değiştirmek basitçe bir yapılandırma dosyası modudur. Teorik olarak, bu, iş ihtiyaçlarını, hedeflerini vb. Taşırken veya değiştirirken gereken yeni kod miktarını azaltır.
  • Web Hizmetlerine yalnızca HTTP üzerinden erişilebilir ve WCF'nin esnek olduğu durumsuz ortamda çalışır, çünkü hizmetleri farklı uygulama türlerinde barındırılabilir. WCF hizmetlerinizi yine Visual Studio'da yeni projeler oluşturmanın farklı yolları olan Konsol, Windows Hizmetleri, IIS ve WAS'ta barındırabilirsiniz.
  • ASMX, WCF'den daha eskidir ve ASMX'in yapabileceği her şey WCF (ve daha fazlası) yapabilir. Temel olarak WCF'yi, iki uygulamanın Microsoft dünyasında iletişim kurmasını sağlamanın tüm farklı yollarını mantıksal olarak bir araya getirmeye çalıştığını görebilirsiniz; ASMX bu birçok yoldan sadece biriydi ve şimdi WCF yetenek şemsiyesi altında gruplandırılmıştır.
  • WCF hizmetleri oluştururken hayatı kolaylaştırdığı için NET 4.0 veya 4.5 için Visual Studio'yu her zaman kullanmak isteyeceksiniz.
  • En büyük fark Web Hizmetlerinin XmlSerializer kullanmasıdır. Ancak WCF, XmlSerializer ile karşılaştırıldığında Performansta daha iyi olan DataContractSerializer'ı kullanır. Bu nedenle WCF, asmx, .NET remoting vb.

WCF'den daha çok asmx hizmetlerini sevenlerden biri olduğumu unutmamak gerekir, ancak o zaman WCF hizmetlerinin ve yeteneklerinin farkında değildim. WCF konfigürasyonlarından korktum. Ama kendime ait birkaç WCF hizmeti yazmaya cesaret edip denedim ve WCF'den daha fazla şey öğrendiğimde, şimdi WCF hakkında hiçbir engelim yok ve bunları herkese ve herkese tavsiye ediyorum. Mutlu kodlama !!!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.