.NET Remoting gerçekten kullanımdan kaldırıldı mı?


95

Herkes .NET Remoting'in WCF ile nasıl değiştirildiğini söylüyor, ancak bunun ne kadar doğru olduğunu merak ediyorum. Remoting'in kullanımdan kaldırıldığına dair resmi bir kelime görmedim ve bana öyle geliyor ki Remoting'in WCF'den daha anlamlı olduğu senaryolar var. Remoting ile ilgili nesnelerin veya yöntemlerin hiçbiri, çerçevenin 4.0 sürümünde bile kullanımdan kaldırılmadı. 3.5 ve 4.0 çerçevelerinde System.AddIn'in Remoting kullandığını da anlıyorum.

Aksine resmi bir sözü olan var mı?

Yazılarında, .NET İletişim Seçenekleri Belirleme (o yazının son versiyonu olarak, 3.0 için) belirtir:

8 Uygulamalar arası etki alanı iletişimleri

Aynı işlem içinde farklı uygulama etki alanlarındaki nesneler arasındaki iletişimi desteklemeniz gerekiyorsa, .NET uzaktan erişimini kullanmanız gerekir.

Şimdi, bu, elbette, doğru değil, çünkü WCF kesinlikle uygulama alanı sınırlarını aşmak için kullanılabilir, ancak bu senaryo için resmi bir öneri veriyor mu?

Güncelleme: Şu soruyu (Remoting ve WCF'nin sahibi olan ekipte bulunan) Clemens Vasters'a gönderdim:

Clemens, anladığım kadarıyla hem remoting hem de wcf'ye sahip olan bir takımdasın ve kaynağa gitmem gerektiğini düşündüğüm birkaç sorum var.

Öncelikle, uzaktan kumandanın ortadan kalkıp kalkmayacağıyla ilgili bir sorum var. Spesifik olarak, süreç içi uygulamalar arası iletişim için kapsamlı bir şekilde uzaktan erişim kullanan oldukça büyük bir uygulamamız var ve bu uzaktan erişim kullanımının "eski" kabul edilip edilmediğini merak ediyordum. Eğer öyleyse, AppDomain.CreateInstance ve arkadaşlar başka bir şeyle değiştirilecek mi?

Cevabı şu:

Uzaktan erişim, .Net Framework'ün bir parçasıdır ve bu nedenle ortadan kalkmaz. COM, Windows NT 3.5 / Windows 95'ten beri Windows içindedir ve ortadan kalkmadı ve bunun da yakın zamanda ortadan kalkacağını düşünmüyorum.

Bununla birlikte, Remoting'e giden çok az geliştirme yatırımı var. WCF, Remoting'in halefidir ve yönetilen kod için COM / DCOM'un yerini alır.

Süreç içi, uygulama alanları arası iletişim için Uzaktan erişim, CLR'nin doğal iletişim yöntemidir. Kısa sürede büyük miktarda veriyi veya çok fazla mesajı pompalayan performans sorunları görüyorsanız, WCF ve NetNamedPipeBinding'e ciddi bir göz atmalısınız.


1
Benim özel durumumda WCF'nin neden Remoting'den çok daha yavaş olduğu hakkında bir soru için stackoverflow.com/questions/1295353/… sayfasına bakın .
Mark

1
Uzaktan erişim, .NET'e özgüdür ve oynadığı rolün ve nasıl çalıştığının ayrıntıları Essential .NET'te Don Box ve Chris Sells tarafından bulunabilir . Bununla birlikte, bileşenler arası iletişim güvenilir olmadığında veya yavaş olduğunda ve pratik olarak tüm aktarımlar - bir gigabit LAN bile - güvenilmez ve süreç içi mesajlaşmaya kıyasla yavaş olduğunda dağılır. İnsanlar WCF'nin yavaş olduğunu konuştuklarında, genellikle web hizmetlerini düşünürler. Web hizmetleri şunlardır işlemdeki Haberleşme için bunları kullanmaya çalışırsanız çok yavaş. Ancak, yavaş ve güvenilmez bağlantılara tolerans gösterecek ve bu koşullarda iyi hizmet verecek şekilde tasarlanmıştır.
Peter Wone

3
@Peter: Bilgi için teşekkürler, ancak birkaç varsayımınız tamamen yanlış. Birincisi, bu uzaklaşma yavaş veya güvenilmezdir. Değil. Çok hızlı ve çok güvenilir (tabii ki güvenilir kanallar üzerinden). Bir diğeri, "web servislerinin" (ne anlama gelirse gelsin) yavaş olmasıdır. Onlar değil. Elbette, işlemdeki herhangi bir şey, ağ üzerindeki herhangi bir şeyden çok daha hızlı olacak, ancak bu soru hiç de bununla ilgili değil ...
Mark

Yanıtlar:


54

Buna eski teknoloji demek daha doğru bir tanımdır.

http://msdn.microsoft.com/en-us/library/72x4h507%28VS.85%29.aspx

Bu konu, mevcut uygulamalarla geriye dönük uyumluluk için tutulan eski bir teknolojiye özeldir ve yeni geliştirme için önerilmez. Dağıtılmış uygulamalar artık Windows Communication Foundation (WCF) kullanılarak geliştirilmelidir.

Güncelleme: WCF, inter / intra / process / inter / intra-appdomain arasında ayrım yapmaz. WCF'de tek makine iletişimi kullanıyorsanız, adlandırılmış kanallar kullanıyorsanız, bunu kullanmak neredeyse tüm gerçekçi senaryolarda iyi performans sağlamalıdır.

Çeşitli dağıtılmış iletişim teknolojilerinin performans karşılaştırması için buraya bakın .


Bu makale özellikle süreçler arası iletişimde uzaktan erişimin kullanılmasına atıfta bulunan değil mi? Bana öyle geliyor ki, uzaktan erişim, uygulamalar arası iletişimde hala bir yere sahip (AppDomain.CreateInstanceFromAndUnwrap ve arkadaşlar).
Mark

Evet öyle. Bu sınıflar "kullanımdan kaldırılmış" olsaydı, onlara ObsoleteAttribute uygulanacaktı - msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx .
RichardOD

2
@Mark, @RichardOD: Makale, .NET Remoting hakkındaki ana makaledir. Sadece süreçler arası iletişime atıfta bulunmaz. Ayrıca, Remoting'i (ve ASMX web hizmetlerini) "miras" olarak ilan etme kararı .NET 3.5 RTM'den sonra verildiğinden, ObsoleteAttribute'un .NET 3.5'te bunlar üzerinde olmaması hiçbir şey ifade etmiyor.
John Saunders

@John: 4.0'da da [Eski] olarak işaretlenmemişler (en azından henüz değil).
Mark

@Mark: 4.0 beta 1 demek istiyorsun .
John Saunders

11

Evet. Uzaktan erişim kullanımdan kaldırıldı ... ve Microsoft'tan resmi. İşte bağlantı:

.NET Uzaktan Erişim

Makalenin ilk satırında kalın yazıyor:

Bu konu, mevcut uygulamalarla geriye dönük uyumluluk için tutulan eski bir teknolojiye özeldir ve yeni geliştirme için önerilmez. Dağıtılmış uygulamalar artık Windows Communication Foundation (WCF) kullanılarak geliştirilmelidir.

Kelimenin 'kullanımdan kaldırıldığını' sanıyordum ama görünüşe göre buna 'miras' diyorlar


21
IMO "kullanımdan kaldırıldı", "eski" den daha güçlüdür: "eski", "başlama" anlamına gelir ve kullanımdan kaldırılan, "zaten başladıysanız, şimdi durdurun, çünkü gelecekteki sürümlerde tamamen kaldırılabilir" anlamına gelir.
ChrisW

1
@Mark: O şekilde okumuyorum. WCF, Remoting gibi süreç içi iletişim için uygulanabilir görünmektedir (WCF'de NetNamedPipeBinding'e bakın).
Michael Petrotta

1
@Mark: Ne olursa olsun, Remoting kullanımdan kaldırıldı. @ChrisW: Yakın vadede Remoting'in kaldırılacağından şüpheliyim, ancak varsa daha az hata düzeltmesi ve varsa daha az destek bekleyebilirsiniz.
John Saunders

1
@Mark - gerçek sorunuz nedir? Uzaktan erişim, eski teknoloji olarak kabul edilir. Bunun doğru olmasını istemiyor gibisin. İyi nedenleriniz olabilir, ancak bu gerçekten Microsoft'un mevcut önerileriyle konuşmuyor.
Michael Petrotta

1
@John: Sanırım öyleyim. Özellikle işlem içi uygulamalar arası iletişim (AppDomain.CreateInstanceFromAndUnwrap ve arkadaşları kullanarak) yapıyorum ve bunu WCF kullanarak bu kadar temiz (veya yüksek performanslı) yapmanın bir yolunu görmüyorum. Bunun yerine WCF'yi kullanmaktan mutluyum (diğer senaryolarda çok kullanıyorum), ancak bunun için istediğim şekilde çalıştırmakta sorun yaşıyorum. Bu özel senaryo hakkında başka bir soru yayınlayacağım.
Mark

6

NET Core'a geçiş yapmak isterseniz, yine de Remoting için başka bir çözüm bulmanız gerekir:

.NET Remoting, sorunlu bir mimari olarak tanımlandı. Artık desteklenmeyen AppDomain'ler arası iletişim için kullanılır. Ayrıca, Remoting, bakımı pahalı olan çalışma zamanı desteği gerektirir. Bu nedenlerden dolayı, .NET Remoting, .NET Core'da desteklenmez ve gelecekte bunun için destek eklemeyi planlamıyoruz.

Kaynak: https://docs.microsoft.com/en-us/dotnet/core/porting/libraries#remoting


1
Burada, .NET Core'da hangi alternatiflerin mevcut olduğu hakkında bir tartışma bulabilirsiniz: github.com/dotnet/corefx/issues/18394
Jean-Claude


2

Microsoft .NET Servis Veri Yolu'nun Teknik Lideri Clemens Vasters (bu, hem Uzaktan hem de WCF anlamına gelir) bu forum gönderisinde WCF ve Uzaktan Erişim hakkında konuşuyor . Gönderiyi özetlemek gerekirse, Remoting yerine WCF'yi öneriyor.

NET 4.0'ın dahili olarak uzaktan erişim kullanıp kullanmadığından emin değilim, ancak soruyu Clemens'e göndermeyi deneyebilirsiniz ... Eminim cevabı biliyordur.


11
Herhangi bir standardın yerine yeni parlak-yeni-her şeyle-uyumsuz-yönteminin kullanılmasını öneren bir Microsoft çalışanı Şok edici.
quillbreaker

14
WCF diğer her şeyle ne şekilde uyumlu değildir? Ve Uzaktan Kumanda neyle uyumluydu?
John Saunders

2
Uyumluluk arıyorsanız, WCF tek seçenektir (tabii ki asmx dışında, ama bu da "eski"). Uzaktan erişim, uyumluluğun bir gereklilik olduğu senaryolar için hiçbir zaman uygun değildi.
Mark

3
Önerinizi aldım ve Clemens'e sordum. Yanıtı: "Uzaktan erişim, .Net Çerçevesinin bir parçasıdır ve bu nedenle ortadan kalkmaz ... İşlem içi, uygulamalar arası iletişim için Uzaktan erişim, CLR'nin yerel iletişim yöntemidir."
Mark

1
"WCF ve NetNamedPipeBinding'e ciddi bir şekilde bakmanız" gerektiğini söylemeye devam ediyor.
John Saunders

2

Şimdi (2015) uygulamalar arası etki alanları için bile oldukça net olduğunu düşünüyorum: https://msdn.microsoft.com/en-us/library/vstudio/ms180984(v=vs.100).aspx

Uzaktan Uygulama Alanları Arası Bu konu, mevcut uygulamalarla geriye dönük uyumluluk için tutulan ve yeni geliştirme için tavsiye edilmeyen eski bir teknolojiye özeldir. Dağıtılmış uygulamalar artık Windows Communication Foundation (WCF) kullanılarak geliştirilmelidir.

Daha sonra WCF, uygulamalar arası etki alanları için de kullanılmalıdır.

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.