Apakah .NET Remoting benar-benar usang?

95

Semua orang mengatakan bagaimana .NET Remoting digantikan oleh WCF, tapi saya bertanya-tanya seberapa akurat itu. Saya belum melihat kata resmi bahwa Remoting tidak digunakan lagi, dan menurut saya pasti ada skenario di mana Remoting lebih masuk akal daripada WCF. Tak satu pun dari objek atau metode terkait jauh telah dihentikan, bahkan dalam versi 4.0 kerangka kerja. Ini juga pemahaman saya bahwa System.AddIn dalam kerangka kerja 3.5 dan 4.0 menggunakan Remoting.

Apakah ada yang punya kata resmi yang bertentangan?

Dalam artikel, Memilih Opsi Komunikasi di .NET (untuk 3.0, karena itu adalah versi terbaru dari artikel itu), itu menyatakan:

8 Komunikasi domain lintas aplikasi

Jika Anda perlu mendukung komunikasi antara objek di domain aplikasi yang berbeda dalam proses yang sama, Anda harus menggunakan jarak jauh .NET.

Sekarang, tentu saja, itu tidak akurat, karena WCF tentu saja dapat digunakan untuk melintasi batas domain aplikasi, tetapi apakah itu memberikan rekomendasi resmi untuk skenario itu?

Pembaruan: Saya mengirim Clemens Vasters (yang berada di tim yang memiliki Remoting dan WCF) pertanyaan ini:

Clemens, saya mengerti Anda berada di tim yang memiliki remoting dan wcf, dan saya punya beberapa pertanyaan yang saya yakin perlu saya tanyakan ke sumbernya.

Pertama, saya memiliki pertanyaan tentang apakah remoting akan dihentikan. Secara khusus, kami memiliki aplikasi yang agak besar yang menggunakan remote secara ekstensif untuk komunikasi lintas-appdomain dalam proses, dan saya bertanya-tanya apakah penggunaan remote ini dianggap "warisan". Jika demikian, apakah AppDomain.CreateInstance dan teman-teman akan diganti dengan yang lain?

Ini jawabannya:

Remoting adalah bagian dari .Net Framework dan karenanya tidak akan hilang. COM telah ada di Windows sejak Windows NT 3.5 / Windows 95 dan belum hilang dan saya juga tidak melihat itu akan hilang dalam waktu dekat.

Meskipun demikian, investasi pembangunan yang masuk ke Remoting sangat minim. WCF adalah penerus dari Remoting dan menggantikan COM / DCOM untuk kode yang dikelola.

Untuk komunikasi lintas-domain dalam proses, Remote adalah cara komunikasi asli CLR. Jika Anda melihat masalah kinerja yang memompa data dalam jumlah besar atau sangat banyak pesan dalam waktu singkat, Anda harus memperhatikan WCF dan NetNamedPipeBinding dengan serius.

Menandai
sumber
1
Lihat stackoverflow.com/questions/1295353/… untuk pertanyaan tentang mengapa WCF jauh lebih lambat daripada Remoting dalam situasi khusus saya.
Tandai
1
Remoting adalah hakiki bagi .NET, dan detail peran yang dimainkannya serta cara kerjanya dapat ditemukan di Essential .NET oleh Don Box dan Chris Sells. Namun, itu berantakan ketika komunikasi antar-komponen tidak dapat diandalkan atau lambat, dan praktis semua transportasi - bahkan LAN gigabit - tidak dapat diandalkan dan lambat dibandingkan dengan pengiriman pesan dalam proses. Ketika orang berbicara tentang WCF yang lambat, mereka biasanya memikirkan layanan web. Layanan web yang terlalu lambat jika Anda mencoba untuk menggunakannya untuk comms dalam proses. Namun, mereka dirancang untuk mentolerir koneksi yang lambat dan tidak dapat diandalkan serta berfungsi dengan baik dalam kondisi ini.
Peter Wone
3
@ Peter: terima kasih atas informasinya, tetapi beberapa asumsi Anda benar-benar salah. Satu, remoting itu lambat atau tidak bisa diandalkan. Ini bukan. Ini sangat cepat, dan sangat andal (melalui saluran yang andal, tentu saja). Lain adalah bahwa "layanan web" (apa pun artinya) lambat. Mereka tidak. Tentu saja, apa pun yang sedang diproses akan menjadi lebih cepat daripada apa pun melalui jaringan, tetapi pertanyaan ini bukanlah tentang ...
Mark

Jawaban:

54

Menyebutnya sebagai teknologi warisan adalah deskripsi yang lebih akurat.

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

Topik ini khusus untuk teknologi lama yang dipertahankan untuk kompatibilitas mundur dengan aplikasi yang sudah ada dan tidak disarankan untuk pengembangan baru. Aplikasi yang didistribusikan sekarang harus dikembangkan menggunakan Windows Communication Foundation (WCF).

Pembaruan: WCF tidak membedakan antara inter / intra / proses / inter / intra-appdomain. Jika Anda menggunakan komunikasi mesin tunggal di WCF, Anda menggunakan pipa bernama - menggunakannya akan memberikan kinerja yang baik di hampir semua skenario realistis.

Untuk perbandingan kinerja berbagai teknologi komunikasi terdistribusi, lihat di sini .

RichardOD
sumber
Bukankah artikel itu secara khusus mengacu pada penggunaan remoting dalam komunikasi antarproses? Bagi saya, remoting masih memiliki tempat dalam komunikasi lintas-appdomain (AppDomain.CreateInstanceFromAndUnwrap dan teman-teman).
Tandai
Ya itu. Jika kelas ini telah "tidak digunakan lagi", mereka akan menerapkan ObsoleteAttribute ke kelas tersebut- msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx .
RichardOD
2
@ Mark, @RichardOD: Artikel ini adalah artikel utama di .NET Remoting. Ini tidak hanya mengacu pada komunikasi antar proses. Juga, fakta bahwa ObsoleteAttribute tidak ada pada mereka di .NET 3.5 tidak ada artinya, karena keputusan untuk mengumumkan Remoting (dan layanan web ASMX) sebagai "warisan" dibuat posting .NET 3.5 RTM.
John Saunders
@ John: Mereka tidak ditandai [Usang] di 4.0 baik (setidaknya belum).
Tandai
@ Mark: maksud Anda 4.0 beta 1.
John Saunders
11

Iya. Remoting tidak digunakan lagi ... dan ini resmi dari Microsoft. Berikut tautannya:

.NET Remoting

Baris pertama dalam artikel tersebut bertuliskan cetak tebal:

Topik ini khusus untuk teknologi lama yang dipertahankan untuk kompatibilitas mundur dengan aplikasi yang sudah ada dan tidak disarankan untuk pengembangan baru. Aplikasi yang didistribusikan sekarang harus dikembangkan menggunakan Windows Communication Foundation (WCF).

Saya pikir verbiage itu 'deprecated' tapi ternyata mereka menyebutnya sebagai 'legacy'

Justin Niessner
sumber
21
IMO 'deprecated' lebih kuat dari 'legacy': 'legacy' berarti "jangan mulai", dan deprecated berarti "jika Anda sudah memulai, hentikan sekarang, karena mungkin akan dihapus seluruhnya dalam versi mendatang".
ChrisW
1
@ Mark: Saya tidak membacanya seperti itu. WCF tampaknya berlaku untuk komunikasi intra-proses seperti Remoting (lihat NetNamedPipeBinding di WCF).
Michael Petrotta
1
@Mark: Terlepas dari itu, Remoting tidak digunakan lagi. @ChrisW: Saya ragu Remoting akan dihapus dalam waktu dekat, tetapi Anda dapat mengharapkan lebih sedikit perbaikan bug, jika ada, dan lebih sedikit dukungan, jika ada.
John Saunders
1
@ Mark - apa pertanyaan Anda yang sebenarnya? Remoting dianggap sebagai teknologi warisan. Kedengarannya Anda tidak ingin itu menjadi kenyataan. Anda mungkin memiliki alasan bagus, tetapi itu tidak benar-benar berbicara dengan rekomendasi Microsoft saat ini.
Michael Petrotta
1
@ John: Saya rasa saya. Saya secara khusus melakukan komunikasi lintas-appdomain dalam proses (menggunakan AppDomain.CreateInstanceFromAndUnwrap dan teman-teman), dan saya tidak melihat cara untuk melakukan ini dengan bersih (atau berkinerja tinggi) menggunakan WCF. Saya senang menggunakan WCF sebagai gantinya (saya sering menggunakannya dalam skenario lain), tetapi untuk ini saya kesulitan membuatnya berfungsi seperti yang saya inginkan. Saya akan memposting pertanyaan lain tentang skenario khusus itu.
Tandai
6

Jika Anda ingin bermigrasi ke .NET Core, Anda harus mencari solusi lain untuk Remoting:

.NET Remoting diidentifikasi sebagai arsitektur bermasalah. Ini digunakan untuk komunikasi lintas-AppDomain, yang tidak lagi didukung. Selain itu, Remoting memerlukan dukungan waktu proses, yang pemeliharaannya mahal. Untuk alasan ini, .NET Remoting tidak didukung di .NET Core, dan kami tidak berencana menambahkan dukungan untuk itu di masa mendatang.

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

Jean-Claude
sumber
1
Di sini Anda dapat menemukan diskusi tentang alternatif apa yang tersedia di .NET Core: github.com/dotnet/corefx/issues/18394
Jean-Claude
Disebutkan juga di sini: docs.microsoft.com/en-us/dotnet/core/porting/…
Jean-Claude
2

Clemens Vasters, Pimpinan Teknis untuk Microsoft .NET Service Bus (yang berarti baik Remoting maupun WCF) berbicara tentang WCF vs. Remoting di posting forum ini . Untuk meringkas posting, dia akhirnya merekomendasikan WCF daripada Remoting.

Saya tidak yakin apakah .NET 4.0 menggunakan remoting secara internal tetapi Anda dapat mencoba mengirimkan pertanyaan kepada Clemens ... Saya yakin dia tahu jawabannya.

JohannesH
sumber
11
Seorang karyawan Microsoft merekomendasikan penggunaan metode baru yang mengkilap-baru-tidak kompatibel-dengan-segalanya-lain-lain dalam bentuk standar apa pun? Mengejutkan.
quillbreaker
14
Dalam hal apa WCF tidak kompatibel dengan yang lainnya? Dan Remoting kompatibel dengan apa?
John Saunders
2
Jika Anda mencari kompatibilitas, WCF adalah pilihan-satunya- (kecuali asmx, tentu saja, tapi itu juga "warisan"). Remoting -tidak pernah- cocok untuk skenario di mana kompatibilitas adalah persyaratan.
Tandai
3
Saya menerima saran Anda dan bertanya pada Clemens. Jawabannya: "Remoting adalah bagian dari .Net Framework dan karenanya tidak akan hilang ... Untuk komunikasi lintas-appdomain dalam proses Remoting adalah cara asli CLR untuk berkomunikasi."
Tandai
1
Dia melanjutkan dengan mengatakan bahwa Anda harus "memperhatikan WCF dan NetNamedPipeBinding dengan serius."
John Saunders
2

Menurut saya sekarang (2015) sudah cukup jelas bahkan untuk domain lintas aplikasi: https://msdn.microsoft.com/en-us/library/vstudio/ms180984(v=vs.100).aspx

Remoting Cross AppDomains Topik ini khusus untuk teknologi lama yang dipertahankan untuk kompatibilitas dengan aplikasi yang sudah ada dan tidak disarankan untuk pengembangan baru. Aplikasi yang didistribusikan sekarang harus dikembangkan menggunakan Windows Communication Foundation (WCF).

Kemudian WCF juga harus digunakan untuk domain lintas aplikasi.

Armando
sumber