WCF çıtayı mı yoksa sadece karmaşıklık düzeyini mi yükseltiyor? [kapalı]


84

WCF tarafından sunulan üç bölümlü hizmet / ana bilgisayar / istemci modelinin değerini anlıyorum. Ama sadece ben miyim, yoksa WCF bir şeyi oldukça doğrudan ve anlaşılır bir şekilde (ASMX modeli) alıp ortalığı karıştırmış gibi mi görünüyor?

Proxy oluşturmak için SvcUtil'in komut satırı geri adımını kullanmanın bir alternatifi var mı? ASMX hizmetleri ile otomatik olarak bir test koşum takımı sağlandı; bugün WCF ile iyi bir alternatif var mı?

WS * şeylerinin WCF ile daha sıkı bir şekilde entegre olduğunu takdir ediyorum ve orada WCF için bir kazanç bulmayı umuyorum, ancak geeze, aksi takdirde kafam karışıyor.

Ayrıca, WCF için mevcut kitapların durumu en iyi ihtimalle berbattır. Mükemmel bir yazar olan Juval Lowy, O'Reilly'nin iyi bir referans kitabı olan "WCF Hizmetlerini Programlama" yazmıştır, ancak WCF'yi kullanmayı öğrenmek için (zaten benim için) pek bir şey yapmıyor. Bu kitabın öncüsü (ve öğretici olarak biraz daha iyi organize edilmiş ama çok değil) Michele Leroux Bustamante'nin Learning WCF'si. İyi noktaları var ama güncelliğini yitirmiş ve ilgili Web sitesi gitmiş.

Google'a her şeyin dışında kalmaya devam etmenin yanı sıra iyi WCF öğrenme referanslarınız var mı?


3
WCF hizmetleri için iyi bir test istemcisi arıyorsanız.
Msdn.microsoft.com/en-us/library/bb552364.aspx'den

Yanıtlar:


61

Tamam, başlıyoruz. İlk olarak, Michele Leroux Bustamante'nin kitabı VS2008 için güncellendi. Kitabın web sitesi gitmiş değil. Şu anda çalışıyor ve tonlarca harika WCF bilgisi var. Bu web sitesinde kitabındaki tüm örnekler için VS2008 ile uyumlu güncellenmiş kod sağlıyor. Amazon'dan sipariş verirseniz, güncellenen yeni baskıyı alacaksınız.

WCF, yalnızca ASMX'in yerini almaz . Elbette ASMX'in yerini alabilir (ve oldukça iyi yapar), ancak asıl faydası hizmetlerinizin kendi kendine barındırılmasına izin vermesidir. WSE'nin işlevselliğinin çoğu en başından itibaren pişirilmiştir. Çerçeve oldukça yapılandırılabilir ve birden çok protokol üzerinden birden çok uç noktaya hizmet etme yeteneği inanılmaz, IMO.

"Hizmet Referansı Ekle" seçeneğinden yine de proxy sınıfları oluşturabilirsiniz, ancak gerekli değildir. Tek yapmanız gereken, ServiceContract arayüzünüzü kopyalamak ve kodunuza hizmet için uç noktayı nerede bulacağınızı söylemektir, işte bu kadar. Çok az kodla servisten yöntemler çağırabilirsiniz. Bu yöntemi kullanarak, uygulama üzerinde tam kontrole sahip olursunuz. Bir proxy sınıfı oluşturmak için seçtiğiniz yöntem ne olursa olsun, Michele konuyla ilgili mükemmel web yayınları serisinde her ikisini de gösteriyor ve kullanıyor .

Michele'nin orada tonlarca harika materyali var ve web sitelerine göz atmanızı tavsiye ederim. İşte WCF'yi öğrenirken bana inanılmaz derecede yardımcı olan bazı bağlantılar. Umarım WCF'nin gerçekte ne kadar güçlü olduğunu ve uygulamanın ne kadar kolay olduğunu fark edeceksiniz. Öğrenme eğrisi biraz dik, ancak zaman yatırımınızın karşılığını almaya değer:

Michele'nin web yayınlarından en az 1'ini izlemenizi tavsiye ederim. O çok etkili bir sunucu ve WCF konusunda inanılmaz derecede bilgili. WCF'nin iç işleyişini sıfırdan çözmek için harika bir iş çıkarıyor.


3
Harika kaynaklar. Rp'nin WCF'ye veya yazarlara vurduğunu söyleyecek kadar ileri gitmezdim. ASMX'te çok zaman geçirdikten sonra WCF'ye bakmaya çalışırken ben de biraz bunalmış hissettim. Bunun daha iyi olduğunu biliyorum ve bunu deneyimlemek istiyorum, ancak ASMX ile yapabileceğiniz gibi bir giriş noktası bulmak zor.
Chris Stewart

15

Bağlantılar için teşekkürler. Merak ediyorum, Buddhike'a ne olduğunu biliyor musun? Görünüşe göre yeryüzünden kaybolmuş. Blogs.thinktecture.com/buddhike adresinde bahsettiği yeni blog (artık) yok. Sanki bu ölümlü sarmaldan kopmuş gibi. (Hangi rüyalar gelebilir?) Teşekkürler.
Jim Raden


14

Ne zaman WCF kullanmam gerektiğini veya kullanacağımı anlamakta zorlanıyorum. Neden? Çünkü listemin başına üretkenlik ve basitlik koyuyorum. ASMX modeli neden bu kadar başarılıydı, çünkü işe yaradı ve hızlı çalışmasını sağlıyorsunuz. Ve VS 2005 ve .NET 2.0 ile wsdl.exe oldukça güzel ve uyumlu hizmetler veriyordu.

Gerçek hayatta mimarinizde çok az iletişim protokolüne sahip olmalısınız. Bu onu basit ve bakımı kolay tutar. Eski sistemlere erişmeniz gerekiyorsa, güzel, parlak ve güzel SOA dünyasında birlikte oynayabilmeleri için onlar için özel adaptörler yazın.


WCF, tüm bu protokoller için tek bir çerçeve olmayı amaçlamaktadır. SABUN, DİNLENME ve WSCF Adaptör SDK ile bu "eski sistem" bağlantılarını da WCF modeli içinde yapar.
Cheeso

3
"Üretkenliği" nasıl ölçtüğünüze bağlıdır. Bir geliştiricinin bunu şimdi çözmesi 2 - 3 gün sürmesini tercih ederim, çünkü 6 ay sonra söylenen faydalar. WCF, web hizmetlerinin yerini alır.
Christian Payne

1
% 100 katılıyorum. Sadece Web Hizmetlerini istiyorsanız ve hızlı bir şekilde göndermeniz gerekiyorsa (kim istemez ki), ASMX'i sonuna kadar bebeğim! WCF dev bir balyozdur - tek istediğiniz temel Web Servisleri ise tamamen aşırılık. Sırf parlak yeni şey olması, tüm senaryolar için her zaman her yönüyle daha iyi olduğunu varsaymanız gerektiği anlamına gelmez. Ve WCF'nin anlaşılması zor olduğu için, sizi onu seçmek için akıllı biri yapmaz. WCF çoğunluğuna atlamayı reddetme cesareti olanlara daha fazla güç!
00

13

WCF, ASMX'ten çok daha güçlüdür ve onu çeşitli şekillerde genişletir. ASMX yalnızca HTTP ile sınırlıdır, oysa WCF iletişimi için birkaç protokol kullanabilir (kabul edilirse, HTTP hala çoğu insanın, en azından birlikte çalışabilir olması gereken hizmetler için kullanacağı yoldur). WCF'nin genişletilmesi de daha kolaydır. En azından ASMX'in genişletilemeyeceği şekilde genişletmek mümkündür. "Kolay" esnetiyor olabilir. =)

WCF tarafından sunulan ek işlevsellik, bence eklediği karmaşıklıktan çok daha ağır basıyor. Ayrıca programlama modelinin daha kolay olduğunu hissediyorum. DataContracts, örneğin her şey için genel özelliklerle XML serileştirme kullanarak serileştirmek zorunda kalmaktan çok daha iyidir. Aynı zamanda doğası gereği çok daha açıklayıcı, ki bu da güzel.


6

Bekle .... hiç .NET Uzaktan Kumandasını kullandın mı, çünkü gerçek şey bu. .NET Remoting kendi başına oldukça karmaşıktır. WCF'yi daha kolay ve daha iyi düzenlenmiş buluyorum.


4

Ben yeterince sık söz görmüyorum, ama olabilir hala ASMX hizmetlerine çok benzer WCF ile oldukça basit servislerini gerçekleştirmek. Örneğin:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SimpleService
{
    [OperationContract]
    public string HelloWorld()
    {
        return "Hello World";
    }

}

Yine de web.config dosyanıza bitiş noktasını kaydetmeniz gerekiyor, ancak bu o kadar da kötü değil.

Ayrılmış verilerin, hizmetlerin ve operasyon sözleşmelerinin ayrıntı düzeyini ortadan kaldırmak, WCF'yi benim için daha yönetilebilir hale getirme yolunda uzun bir yol kat ediyor.


AspNetCompatibilityRequirements, birçok geliştiricinin şu anda iyi çalışan ASMX hizmetlerinden geçiş yapacak olması durumunda gerekli bir kötülüktür.
Dave Ward

@dan neden olmasın AspNetCompatibilityRequirements ?
PreguntonCojoneroCabrón

@DaveWard AspNetCompatibilityRequirements gerekli bir kötülük mü?
PreguntonCojoneroCabrón

4

VS2008, perde arkasında sizin için proxy oluşturacak "Hizmet Referansı Ekle" bağlam menüsü öğesini içerir.

Daha önce de belirtildiği gibi, WCF yalnızca ASMX web hizmeti türlerinin yerini alması değil, HTTP, tcp, adlandırılmış kanallar veya MSMQ aktarımları üzerinden tüm birlikte çalışabilir hizmetler için tutarlı, güvenli ve ölçeklenebilir bir metodoloji sağlamayı amaçlamaktadır.

WCF ile ilgili başka sorunlarım olduğunu itiraf edeceğim (örneğin, basicHTTP üzerinden bir hizmeti ifşa ederken yöntem imzalarını yeniden yazmak - buraya bakın , ancak genel olarak bunun kesin bir gelişme olduğunu düşünüyorum


3

VS2008 kullanıyorsanız ve bir WCF projesi oluşturuyorsanız, çalıştır / hata ayıklama düğmesine bastığınızda otomatik olarak bir test koşum takımı alırsınız ve svcutil'i kullanmak zorunda kalmadan bir referans ekleyebilirsiniz.


2

İlk WCF düşüncelerim tamamen aynıydı! İşte bazı çözümler:

  1. Jenerikleri kullanarak kendi proxy / istemci katmanınızı programlayın ( ClientBase , Binding sınıflarına bakın ). Çalışmayı kolay buldum ama mükemmelleştirmesi zor.
  2. 1'in üçüncü taraf uygulamasını kullan ( SoftwareIsHardwork şu anki favorim)

2

WCF , Microsoft'un önceki tüm web hizmeti teknolojilerinin yerini almıştır. Ayrıca, geleneksel olarak "web hizmetleri" olarak kabul edilenden çok daha fazlasını yapar.

WCF "web hizmetleri", WCF aracılığıyla etkinleştirilen çok daha geniş bir uzaktan iletişim yelpazesinin parçasıdır. WCF'de bir şeyler yaparken geleneksel ASMX'e göre çok daha yüksek derecede esneklik ve taşınabilirlik elde edeceksiniz çünkü WCF, Microsoft tarafından sunulan tüm farklı dağıtılmış programlama altyapılarını özetlemek için sıfırdan tasarlanmıştır. WCF'deki bir uç nokta, TCP / ikili üzerinden olduğu gibi, SOAP / XML üzerinden de kolaylıkla iletişim kurabilir ve bu ortamı 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 ihtiyaç duyulan yeni kod miktarını azaltır.

ASMX is older than WCF, and anything ASMX can do so can WCF (and more). Temel olarak, WCF'nin Microsoft dünyasında iletişim kurmak için iki uygulamayı elde etmenin tüm farklı yollarını mantıksal olarak gruplamaya çalıştığını görebilirsiniz; ASMX bu pek çok yoldan sadece biriydi ve artık WCF yetenekler çatısı altında gruplandırılıyor.

Web Hizmetlerine yalnızca HTTP üzerinden erişilebilir ve WCF'nin esnek olduğu durumsuz ortamda çalışır, çünkü hizmetleri farklı türden uygulamalarda barındırılabilir. WCF hizmetlerini barındırmaya yönelik yaygın senaryolar IIS, WAS, Kendi kendine barındırma, Yönetilen Windows Hizmeti'dir.

En büyük fark, Web Hizmetlerinin XmlSerializer kullanmasıdır. Ancak WCF, XmlSerializer ile karşılaştırıldığında Performans açısından daha iyi olan DataContractSerializer'ı kullanır.

Hangi senaryolarda WCF kullanılmalıdır?

  • Ticari işlemleri işlemek için güvenli bir hizmet. Bir hizmet
  • trafik raporu veya diğer gibi güncel verileri başkalarına sağlar
  • izleme hizmeti. İki kişinin sohbet etmesine olanak tanıyan bir sohbet hizmeti
  • gerçek zamanlı iletişim veya veri alışverişi. Bir kontrol paneli uygulaması
  • veri için bir veya daha fazla hizmeti sorgulayan ve bunları mantıksal olarak sunan
  • sunum. Windows Workflow kullanılarak uygulanan bir iş akışını açığa çıkarma
  • WCF hizmeti olarak temel. Anket yapmak için Silverlight uygulaması
  • en son veri beslemeleri için hizmet.

WCF'nin Özellikleri

  • Hizmet Odaklılık
  • Birlikte çalışabilirlik
  • Çoklu Mesaj Modelleri
  • Hizmet Meta Verileri
  • Veri Sözleşmeleri
  • Güvenlik
  • Çoklu Taşıma ve Kodlama
  • Güvenilir ve Sıraya Alınmış Mesajlar
  • Dayanıklı Mesajlar
  • İşlemler
  • AJAX ve REST Desteği
  • Genişletilebilirlik

kaynak: ana metin kaynağı


Şimdi, WCF veya REST mi kullanıyorsunuz? veya WebAPI? veya MicroService?
PreguntonCojoneroCabrón

1

MSDN? Genelde Kütüphane referansının kendisiyle oldukça iyi anlaşırım ve genellikle orada değerli makaleler bulmayı umuyorum.


1

Sundukları açısından, cevabın uyumluluk olduğunu düşünüyorum. ASMX hizmetleri oldukça Microsofty idi. Diğer tüketicilerle uyumlu olmaya çalışmadıklarını söylememek; ancak model ASP.NET web sayfalarına ve diğer bazı özel Microsoft tüketicilerine pek uyacak şekilde yapılmadı. Oysa WCF, mimarisi nedeniyle servisinizin normal SOAP'a ek olarak REST, JSON, vb. Gibi çok açık standart tabanlı uç noktalara sahip olmasına izin verir. Diğer insanlar, muhtemelen ASMX'inizden çok daha kolay WCF hizmetinizi tüketeceklerdir.

(Bu, temelde karşılaştırmalı MSDN okumasından çıkarılmıştır, bu nedenle daha fazlasını bilen biri beni düzeltmekte özgür hissetmelidir.)


Çapraz platform ASMX hizmetleriyle hiç sorun yaşamadım - XML ​​burada oldukça iyi işliyor. WCF = remoting + ASMX + MSMQ + WSE olduğunu anlıyorum. Benim sığır etim, MS'in WCF'yi daha kolay ulaşılabilir kılmak için biraz "ilerleyen geliştirme" kullanması gerektiğidir ve benim sorum nasıl olacağıdır! Teşekkürler, rp
rp.

ASMX birlikte çalışabilirliği çok iyiydi, ancak WS-Security söz konusu olduğunda çaba daha da arttı.
Cheeso

1

WCF, ASMX'in yerini alacak şekilde düşünülmemelidir. Nasıl konumlandırıldığına ve Microsoft tarafından dahili olarak nasıl kullanıldığına bakılırsa, gerçekten her tür sınır ötesi iletişim için kullanılan temel bir mimari parçasıdır.


evet ... ve temel bir iletişim çerçevesi olarak ASMX ve ASP.NET odaklı web hizmetlerinin yerini almalıdır. Hayır?
Cheeso

1

WCF'nin ASMX web hizmetleri uygulamasını birçok yönden gerçekten ilerlettiğine inanıyorum. Her şeyden önce, dağıtılmış uygulamaların içsel karmaşıklığını gizlemeye yardımcı olan çok güzel bir katmanlı nesne modeli sağlar. İkinci olarak, sunucudan istemciye zaman uyumsuz bildirimler (saf HTTP ile imkansız) ve üçüncü olarak temel aktarım protokolünü XML mesajlaşmadan soyutlayarak ve böylece HTTP, HTTPS, TCP ve diğerlerini zarif bir şekilde destekleyen istek-tekrar mesajlaşma modellerinden daha fazlasına sahip olabilirsiniz. "1. nesil" web servisleriyle geriye dönük uyumluluk da bir artıdır. WCF, dahili gösterim biçimi olarak XML standardını kullanır. Bu, özellikle JSON gibi "XML'e yağsız alternatifler" giderek artan popülaritesi ile avantaj veya dezavantaj olarak algılanabilir.


1

WCF ile bulduğum zor şeyler, istemciler ve sunucular için yapılandırmaları yönetmek ve çok hoş olmayan hatalı durum istisnalarını gidermek.

Herhangi birinin bunlar için herhangi bir kestirme yolu veya ipucu olması harika olurdu.


1

Bunun bir acı olduğunu görüyorum; her iki uçta da .NET var, her iki ucunda da aynı "sözleşme" dll'leri yüklüyüm vs. Ama o zaman "KnownType" öznitelikleri gibi birçok ayrıntıyla uğraşmam gerekiyor.

WCF ayrıca varsayılan olarak, birçok yapılandırmayı değiştirene kadar yalnızca 1 veya 2 istemcinin bir hizmete bağlanmasına izin verir. Yapılandırmayı koddan değiştirmek kolay değildir, çok sayıda comfig dosyası göndermek bir seçenek değildir, çünkü değişikliklerimizi bir müşterinin yükseltme sırasında yapmış olabileceği değişikliklerle birleştirmek çok zordur (ayrıca müşteri istemiyoruz WCF ayarlarıyla oynamak!)

.NET remoting çoğu zaman çalışma eğilimindeydi.

Ben çalışıyorum düşünüyorum taklit NET nesnesi tabanlı iletişim olduğunu .NET bilinmeyen bir sisteme Metin (xml) kadar bit gönderme aynıdır, çok uzak bir adımdı.

(Bir Java sistemiyle konuşmak için WCF'yi birkaç kez kullandığımızda, java sisteminin verdiği XSD'nin yine de istediği XML ile eşleşmediğini gördük, bu nedenle birçok XML eşlemesini elle kodlamak zorunda kaldık.)


Bence insanlar, WCF'nin uzaktan kumandanın yerine geçtiğini söylediklerinde biraz hedef dışı kalıyorlar. Remoting, gerçek .Net'ten .Net'e nesne tabanlı aramalar yapmak istediğinizde ve her iki uçta da işlerin nasıl kurulacağı üzerinde bol miktarda kontrole sahip olduğunuzda hala iyi bir seçenektir. Öte yandan WCF, herkesin istediği şekilde tüketmesi için Hizmetler yayınlamaya yöneliktir .
Tim Lovell-Smith

@Tim, Microsoft şimdi her şey için WCF kullanmayı ve Remoting'in yerini aldığını söylüyor. Uzaktan erişim, .net dünyasının unutulmuş çocuğu gibi görünüyor.
Ian Ringrose
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.