WCF ve ASP.NET Web API'sı [kapalı]


484

WCF'nin arkasındaki kavramları anlamaya çalışmak için birkaç ay geçirdim ve son zamanlarda ilk WCF servis uygulamamı geliştirdim.

Yapılandırma dosyasındaki tüm ayarları anlamak için biraz uğraştım.
Çevre konusunda ikna olmadım ama onunla inanılmaz şeyler yapabileceğiniz anlaşılıyor.

Geçen gün Microsoft'un ASP.NET Web API adlı yeni bir şey çıkardığını öğrendim .

Okuduğum şey için, kullanımı ve uygulaması çok kolay olan RESTful bir çerçeve .

Şimdi, 2 çerçeve arasındaki temel farkların ne olduğunu anlamaya çalışıyorum ve eski WCF servis uygulamamı yeni API ile dönüştürmem gerekiyorsa .

Birisi, her birinin farklılıklarını ve kullanımını anlamama yardımcı olabilir mi?


12
+1 ilginç soru. belki de iyi cevaplar alırsınız programmers.stackexchange.com
Mithir

1
"Eski" WCF'nin hangi özelliklerini kullanıyorsunuz? RESTful API oluşturmaya mı çalışıyorsunuz? Veya RPC veya SABUN?
marcind

1
@marcind: Cevabınız için teşekkürler. Çoğunlukla RESTful çağrılar. RPC yok.
LeftyX

4
Başka bir iyi yanıt stackoverflow.com/a/9859981/456814

1
her ikisi de bir ve aynı şey ama bir karşılaşabilirsiniz eski fark wcf temelde intranet ve internet için Webapi için, evet kesinlikle biz de wcf dinlendirici yapabilirsiniz! temel olarak her ikisi de http protokolü web.http üzerinde çalıştı
LostCoder

Yanıtlar:


185

Yeni ASP.NET Web API , önceki WCF Web API projesinin devamıdır (bazı kavramlar değişmiş olsa da ).

WCF başlangıçta SOAP tabanlı hizmetleri etkinleştirmek için oluşturuldu. Daha basit RESTful veya RPCish hizmetleri için (jQuery gibi istemcileri düşünün) ASP.NET Web API iyi bir seçim olmalıdır.


36
Ayrıca: WCF, REST tarzı hizmetler yazmak için bazı destek sağlamasına rağmen, ASP.NET Web API'sinde REST desteği daha eksiksizdir ve gelecekteki tüm REST özelliği iyileştirmeleri ASP.NET Web API'sinde msdn.microsoft.com/tr- us / library / jj823172.aspx
Ohad Schneider

6
Aslında WCF başlangıçta bir SOAP veya RPC hizmeti ile istemci arasında bir soyutlama katmanı uygulamak için oluşturuldu. Mesele, bu çok farklı çağrıların etrafında tek bir mimari (ABC) oluşturmak ve tesisat dosyalarını yapılandırma dosyaları aracılığıyla ele almaktı.
Scott Marcus

4
ASP.NET Web API ile gerçek dezavantajı, istemci aracı olmasıdır. Visual Studio, kesintisiz WCF hizmeti istemci varlıklarını ve hizmet üretimini desteklemek için entegre araçları destekler. Web API'sında destek yok. HttpClientHangisinin harika olduğunu biliyorum , ancak varlık üretimi ve serileştirme / serileştirme ile ilgilenmiyor.
Shimmy Weitzhandler

1
@Shimmy Peki ya swagger kullanarak servis üretimi?
Alex78191

1
@ Alex78191 Yanıtınız için teşekkürler. Oluşturulan varlıklar INotifyPropertyChangedistemci varlıkları yayabilir mi? Doğrulamaya ne dersiniz?
Shimmy Weitzhandler

250

Bizim için WCF, REST için SOAP ve Web API için kullanılır. Ben de Web API destekli SOAP diliyorum. WCF'nin gelişmiş özelliklerini kullanmıyoruz. İşte MSDN'den karşılaştırma :

resim açıklamasını buraya girin


1
Ve Web API, CSOM için bir Godsend olan OData'yı destekler .
abbaf33f

12
Bu kadar çok MS'nin gerçekten değerli bir şey söylemesi şaşırtıcı. Örneğin, WCF JSON'u destekler, ancak bu bilgiler bu "karşılaştırmada" gizlidir, metin olarak WebApi'nin JSON'u bir kez değil iki kez desteklediğini söyler.
Magallanes

1
bu tablo anlamsız. "JQuery" (başkent J için korkutmak tırnak) bir protokol ve / veya biçimidir?
hyankov

1
İlginç. MSDN, HTTP'yi bir aktarım protokolü olarak belirtmekte yanlıştır. HTTP bir uygulama katmanı protokolüdür.
RayLoveless

80

ASP.net Web API tamamen HTTP ve REST tabanlı GET, POST, PUT, DELETE iyi ASP.net MVC programlama tarzı ve JSON iade ile biliyorum; web API tüm hafif süreçler ve saf HTTP tabanlı bileşenler içindir. Biri basit veya en basit tek web hizmeti için bile WCF ile devam etmek için tüm ekstra bagaj getirecektir. Ajax veya dinamik aramalar için hafif hizmet için WebApi her zaman ihtiyacı karşılar. Bu düzgün bir şekilde tamamlar veya ASP.net MVC paralel olarak yardımcı olur.

Podcast'e göz atın : Hanselminutes Podcast 264 - Bu babanızın WCF'si değil - Daha fazla bilgi için Scott Hanselman'dan Glenn Block ile WebAPI hakkında her şey .


67

Aşağıda listelenen senaryolarda WCF için gitmelisiniz:

  1. TCP, MSMQ veya MIME gibi protokoller hakkında veri göndermeniz gerekiyorsa
  2. Tüketici istemci SOAP mesajlarının nasıl kullanılacağını biliyorsa

WEB API, RESTful / HTTP hizmetleri geliştirmek için bir çerçevedir.

Tarayıcılar, HTML5 gibi SOAP'ı anlamayan birçok istemci var, bu durumlarda WEB API'leri iyi bir seçimdir.

HTTP hizmetleri üstbilgisi, hizmetin nasıl güvenliğini, bilginin nasıl önbelleğe alınacağını, ileti gövdesinin türünü ve HTTP gövdesi, HTML gibi herhangi bir içerik türünü yalnızca XML değil SOAP hizmetleri olarak belirtebilir.


7
Bu, WCF'nin sadece SOAP mesajlarını işlediği varsayımını yapar, yanlış bir varsayım. WCF hizmetlerinde REST uç noktalarını da açığa çıkarabilirsiniz. WCF (tridy'nin mesajına bakın) özelliklerini kullanmayacaksanız, Web API'nin mantıklı olduğunu söylemek için değiştiririm.
Mike

3
Yep WCF de dinleniyor .. Temel olarak Web api, basit CRUD tarzı veri uygulamaları yapıyorsanız uygun olan WCF'lerin işlevselliğinin bir alt kümesidir.
user1496062

41

Her ikisini de şimdiye kadar kullandığımdan beri, WCF ve Web API arasında birçok fark buldum. Her iki teknoloji yığını da farklı senaryolara çok uygundur, bu yüzden hangisinin daha iyi olduğunu söylemek mümkün değildir, bu yapılandırma ve senaryoya bağlıdır.

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

Not: Veriler sadece benim görüşüm değil, aynı zamanda diğer resmi web sitelerinden de toplanmaktadır.


12
Web Hizmeti API'sı da kendi kendine barındırılabilir (Owin / Katana) ve bir Windows hizmetinde olabilir
Monis Iqbal

eksi 1, HTML yerine bir görüntü kullanarak tablo oluşturmak için eksi 1.
Ahsan Ahmed

34

WCF size kutudan çok fazla şey verecek, hiçbir şeyle karşılaştırılamaz. Kimlik doğrulama, yetkilendirme, şifreleme, kuyruğa alma, azaltma, güvenilir mesajlaşma, günlük tutma, oturumlar vb. WCF [sadece] web servisleri değildir; WCF, SOA için bir geliştirme platformudur.


11
Yanılmıyorsam, WEB API'sının da listelediğiniz işlevlerin çoğunu sağladığını düşünüyorum.
Alex

4
Hiçbir Web api bu şeyleri sağlamaz veya çok basit sürümleri sağlamaz.
user1496062

3
Peki nedir - onları sağlıyor mu, sağmıyor mu?

5
Kimlik doğrulama ve yetkilendirme için asp.net/web-api/overview/security/… adresini ziyaret edin . tl; dr: Kesinlikle IIS'de destekliyor. Şifreleme için muhtemelen SSL kullanmanız gerekecektir, ASP.NET doğal olarak kuyruğa alma işlemlerini gerçekleştirir (ancak bu, gelen isteklere karşı mevcut çalışan iş parçacıklarına dayanır). Oturumlar var (ancak asla doğrudan Oturumları kullanmanızı önermem). Günlüğe kaydetme, kurulumu gereken kadar kolaydır (ActionFilters veya benzeri). Güvenilir mesajlaşmaya bir alternatif SignalR kullanmaktır (tam olarak olmasa da).
James Haug

7
"Hiçbir şeyle karşılaştırılamaz" ?? Olası olmayan.
bbsimonbb

16

Neden cevaplıyorum:

Bu iki teknoloji arasındaki farkı anlamak için çok zaman aldım. "Bu yanıtı ararken merak ettiğim zamanlarda bu noktalara sahip olsaydım, gerekli teknolojimi seçmeye daha önce karar verdim" diye düşündüğüm tüm noktaları buraya koyacağım.

Bilgi kaynağı:

Microsoft® Visual Studio® 2015 Çıktı

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

Neden ASP.NET Web API ve WCF:

ASP.NET Web API ve WCF teknolojilerini karşılaştırmadan önce, aslında web hizmetleri oluşturmak için iki stil / standart olduğunu anlamak önemlidir: REST (Temsili Durum Transferi) ve SOAP / WSDL. SOAP / WSDL, web hizmetlerinin oluşturulduğu orijinal standarttı. Ancak, kullanımı zordu ve performansı düşüren hantal mesaj biçimlerine (XML gibi) sahipti. REST tabanlı hizmetler hızla alternatif oldu. Yazmak daha kolaydır, çünkü HTTP'nin temel yapılarından (GET, POST, PUT, DELETE) yararlanırlar ve genellikle daha küçük mesaj formatları (JSON gibi) kullanırlar. Sonuç olarak, REST tabanlı HTTP hizmetleri artık kesinlikle Web'i hedefleyen hizmetler yazmak için standarttır.

ASP.NET Web API'nin amacını tanımlayalım

ASP.NET Web API, Microsoft'un REST tabanlı HTTP web hizmetleri geliştirme teknolojisidir. (Uzun zaman önce Microsoft'un SOAP / WSDL tabanlı ASMX'in yerini aldı.) Web API, tüm tarayıcıların ve yerel aygıtların anladığı HTTP protokollerine dayalı sağlam hizmetler yazmayı kolaylaştırıyor. Bu, uygulamanızı destekleyecek hizmetler oluşturmanıza ve bunları diğer web uygulamalarından, tabletlerden, cep telefonlarından, PC'lerden ve oyun konsollarından aramanızı sağlar. Mevcut Web bağlantısından yararlanmak için bugün yazılan uygulamaların çoğu HTTP hizmetlerini bir şekilde kullanır.

Şimdi WCF'nin amacını tanımlayalım:

İnternet üzerinden iletişim kurmak her zaman en etkili yöntem değildir. Örneğin, hem istemci hem de hizmet aynı teknolojide (hatta aynı makinede) mevcutsa, iletişim için daha verimli bir yöntemle (TCP / IP gibi) genellikle müzakere edebilirler. Hizmet geliştiriciler kendilerini kaçınmaya çalıştıkları aynı seçimleri yaparken buldular. Artık verimli dahili hizmetler oluşturma ve İnternet üzerinden geniş erişime sahip olma arasında seçim yapmak zorunda kalacaklardı. Her ikisini de desteklemeleri gerekiyorsa, hizmetlerinin birden çok sürümünü veya hizmetlerine erişmek için en azından ayrı proxy'leri oluşturmak zorunda kalabilirler. Microsoft'un WCF ile çözdüğü sorun budur .

WCF ile sınırsız endişe duymadan hizmetinizi oluşturabilirsiniz. Ardından, WCF'nin arayan istemciye bağlı olarak hizmetinizi en verimli şekilde çalıştırma konusunda endişelenmesine izin verebilirsiniz. Bu görevi yönetmek için WCF uç noktalar kavramını kullanır. Hizmetinizin birden fazla uç noktası olabilir (tasarım zamanında veya dağıtımdan sonra yapılandırılmış). Her uç nokta, hizmetin arayan bir istemciyi nasıl destekleyebileceğini belirtir: uzaktan, Microsoft Message Queuing (MSMQ) ve daha fazlası aracılığıyla. WCF, servis işlevselliğinizi yaratmaya odaklanmanızı sağlar. Arayan müşterilerle en verimli şekilde nasıl konuşulacağı konusunda endişelenir. Bu şekilde, tek bir WCF hizmeti birçok farklı istemci türünü etkili bir şekilde destekleyebilir.

WCF örneği:

Örneği düşünün:

Müşteri verileri uygulamalar arasında paylaşılır. Her uygulama farklı bir platformda yazılabilir ve farklı bir konumda bulunabilir. Müşteri arayüzünü, paylaşılan müşteri verilerine ortak erişim sağlayan bir WCF hizmetine çıkarabilirsiniz. Bu, verileri merkezileştirir, çoğaltmayı azaltır, senkronizasyonu ortadan kaldırır ve yönetimi basitleştirir. Buna ek olarak, WCF'yi kullanarak, hizmet uç noktalarını arayan istemciye anlamlı olacak şekilde yapılandırabilirsiniz. Şekil, bir WCF hizmetindeki müşteri verilerine merkezi erişim ile önceki örneği göstermektedir.

WCF farklı müşterilere bu şekilde hizmet eder

Sonuç:

i) Web API'si ne zaman seçilir:

ASP.NET Web API kullanılarak oluşturulanlar gibi REST tabanlı HTTP hizmetlerinin web hizmetleri oluşturmak için standart haline geldiği inkar edilemez. Bu hizmetler, web geliştiricilerinin bina hizmetleri için kolay ve anlaşılır bir yaklaşım sunar. Web geliştiricileri HTTP GET ve POST'u anlar ve bu tür hizmetlere iyi uyum sağlar. Bu nedenle, kesinlikle HTTP'yi hedefleyen hizmetler yazıyorsanız , mantıklı seçim ASP.NET Web API'sidir.

ii) WCF ne zaman seçilir:

WCF teknolojisi, farklı protokollere ve mesaj formatlarına dayalı olarak birden fazla servis uç noktasını desteklemeniz gerektiğinde kullanışlıdır. Bununla birlikte, farklı makineden makineye configurations.If aracılığıyla hem Web üzerinden kullanılabilen sağlam hizmetler oluşturmak için Microsoft BizTalk kaldıraç WCF gibi ürünler, TCP / IP üzerinden iletişim kurduğu yerel bağlıyken bu uygulamayı yazma gereğini yapmak ağ ve ağ dışında olduğunda HTTP üzerinden çalışır, WCF cevabınızdır .

Uyarı alın:

Web geliştiricileri genellikle WCF'yi geliştirmesi daha zor ve karmaşık olarak görür. Bu nedenle, çok protokollü hizmetlere olan ihtiyacı öngörmezseniz, büyük olasılıkla ASP.NET Web API'sine bağlı kalabilirsiniz.


1
Lütfen aynı cevabı birden fazla soruya eklemeyin . Yeterince itibar kazandığınızda, en iyisini yanıtlayın ve gerisini kopya olarak işaretleyin. Yinelenen bir öğe değilse, gönderiyi soruya uyarlayın ve silme işlemini kaldırmak için işaretleyin.
Bhargav Rao

12

MSDN'de bununla ilgili bir karşılaştırma var

WCF ve ASP.NET Web API'sı

Benim için seçim, müşterilerin kimler olduğu ve nerededir?

Şirket içinde Ağ ve .NET tabanlı istemciler: TCP bağlama ile WCF kullanın (HTTP'den daha hızlı iletişim)

Şirket Ağı dışında, PHP, Python vb.Gibi çeşitli teknolojileri kullanın: REST ile Web API kullanın


9

İş konuşmasıyla, WebApi bir WSDL'den yoksundur, bu nedenle geliştiricilerin tümünü el ile belgelemesi gerekir. Örneğin, WebApi işlemi bir nesne listesi döndürürse, istemci nesneleri el ile oluşturmalıdır, yani WebAPI tanım hatalarına gerçekten yatkındır.

Webapi yanlısı WCF'den daha hafif.


3
WCF == WS- *, webapi == REST
BozoJoe

7

"WSDL'nin WebApi eksikleri" ifadesi ile ilgili olarak, Rest istemcisi oluşturmanın birkaç yolu vardır. Popüler bir yaklaşım Swagger UI / (Swashbukkle Nuget). Bu, REST bitiş noktasının giriş ve çıkış şemasını ve bitiş noktalarını test etmek için çevrimiçi aracı anlamak için zengin bir arayüz sağlar.

JSON LD (Json Bağlantılı Belgeler), JSON şemasını daha iyi anlambilimsel olarak ortaya çıkararak JSON tabanlı REST geliştirici deneyimini daha da geliştirecek olan bir başka gelişmekte olan standarttır.


1

Wcf ile, tcp, http gibi birden çok uç nokta için aynı servis desteğini yapılandırabilir ve ortaya koyabiliriz. Web API, wcf ile karşılaştırıldığında çok daha az yapılandırmaya sahiptir ve wcf'den biraz daha hızlıdır. WCF ayrıca dinlendirici hizmetleri de desteklemektedir. Net framework 3.5 sınırlaması varsa, seçenek wcf olduğunu.

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.