NET Remoting เลิกใช้งานจริงหรือไม่


95

ทุกคนพูดว่า. NET Remoting ถูกแทนที่ด้วย WCF ได้อย่างไร แต่ฉันสงสัยว่ามันถูกต้องแค่ไหน ฉันไม่เห็นคำที่เป็นทางการว่า Remoting กำลังเลิกใช้งานและดูเหมือนว่าสำหรับฉันแล้วมีสถานการณ์ที่ Remoting เหมาะสมกว่า WCF ไม่มีการเลิกใช้งานอ็อบเจ็กต์หรือเมธอดที่เกี่ยวข้องกับ Remoting แม้แต่ในเวอร์ชัน 4.0 ของเฟรมเวิร์ก ฉันเข้าใจเช่นกันว่า System.AddIn ในกรอบงาน 3.5 และ 4.0 ใช้ Remoting

ใครมีคำพูดที่เป็นทางการในทางตรงกันข้าม?

ในบทความการเลือกตัวเลือกการสื่อสารใน. NET (สำหรับ 3.0 ซึ่งเป็นเวอร์ชันล่าสุดของบทความนั้น) ระบุว่า:

8 การสื่อสารข้ามแอปพลิเคชันโดเมน

หากคุณต้องการสนับสนุนการสื่อสารระหว่างออบเจ็กต์ในโดเมนแอปพลิเคชันต่างๆภายในกระบวนการเดียวกันคุณต้องใช้. NET remoting

แน่นอนว่าตอนนี้ไม่ถูกต้องเนื่องจาก WCF สามารถใช้เพื่อข้ามขอบเขตของโดเมนแอปได้อย่างแน่นอน แต่จะให้คำแนะนำอย่างเป็นทางการสำหรับสถานการณ์นั้นหรือไม่?

อัปเดต: ฉันส่ง Clemens Vasters (ซึ่งอยู่ในทีมที่เป็นเจ้าของ Remoting และ WCF) คำถามนี้:

Clemens ฉันเข้าใจว่าคุณอยู่ในทีมที่เป็นเจ้าของทั้ง remoting และ wcf และฉันมีคำถามสองสามข้อที่ฉันเชื่อว่าฉันต้องไปที่แหล่งข้อมูล

ก่อนอื่นฉันมีคำถามว่าการรีบูตจะหายไปหรือไม่ โดยเฉพาะอย่างยิ่งเรามีแอปพลิเคชันที่ค่อนข้างใหญ่ซึ่งใช้ระยะไกลอย่างกว้างขวางสำหรับการสื่อสารข้ามแอปโดเมนในกระบวนการและฉันสงสัยว่าการใช้งานระยะไกลนี้ถือเป็น "มรดก" ถ้าเป็นเช่นนั้น AppDomain.CreateInstance และเพื่อน ๆ จะถูกแทนที่ด้วยสิ่งอื่นหรือไม่?

นี่คือคำตอบของเขา:

ระยะไกลเป็นส่วนหนึ่งของ. Net Framework และด้วยเหตุนี้จึงไม่หายไป COM อยู่ใน Windows ตั้งแต่ Windows NT 3.5 / Windows 95 และไม่ได้หายไปไหนและฉันก็ไม่เห็นว่าจะหายไปในเร็ว ๆ นี้ด้วย

ที่กล่าวว่ามีการลงทุนในการพัฒนาที่น้อยมากใน Remoting WCF เป็นผู้สืบทอดของ Remoting และแทนที่ COM / DCOM สำหรับโค้ดที่มีการจัดการ

สำหรับในกระบวนการการสื่อสารข้ามแอปโดเมน Remoting เป็นวิธีการสื่อสารดั้งเดิมของ CLR หากคุณพบปัญหาด้านประสิทธิภาพการสูบข้อมูลจำนวนมากหรือข้อความจำนวนมากในเวลาอันสั้นคุณควรพิจารณาอย่างจริงจังที่ WCF และ NetNamedPipeBinding


1
ดูstackoverflow.com/questions/1295353/…สำหรับคำถามเกี่ยวกับสาเหตุที่ WCF ช้ากว่า Remoting ในสถานการณ์เฉพาะของฉันมาก
มาร์ค

1
การรีบูตเป็นสิ่งที่อยู่ภายในของ. NET และรายละเอียดของบทบาทที่เล่นและวิธีการทำงานสามารถพบได้ในEssential .NETโดย Don Box และ Chris Sells อย่างไรก็ตามการสื่อสารระหว่างองค์ประกอบไม่น่าเชื่อถือหรือช้าและในทางปฏิบัติแล้วการขนส่งทั้งหมดแม้กระทั่ง LAN แบบกิกะบิตก็ไม่น่าเชื่อถือและช้าเมื่อเทียบกับการส่งข้อความในกระบวนการ เมื่อผู้คนพูดถึง WCF ช้าพวกเขามักจะนึกถึงบริการบนเว็บ บริการเว็บมีช้าเกินไปถ้าคุณพยายามที่จะใช้พวกเขาสำหรับ Comms ในกระบวนการ อย่างไรก็ตามได้รับการออกแบบมาเพื่อทนต่อการเชื่อมต่อที่ช้าและไม่น่าเชื่อถือและให้บริการได้ดีในเงื่อนไขเหล่านี้
Peter Wone

3
@Peter: ขอบคุณสำหรับข้อมูล แต่ข้อสันนิษฐานของคุณสองสามข้อผิดพลาดอย่างสิ้นเชิง หนึ่งคือการรีบูตช้าหรือไม่น่าเชื่อถือ มันไม่ใช่. เร็วมากและเชื่อถือได้มาก (แน่นอนว่ามีช่องทางที่เชื่อถือได้) อีกประการหนึ่งคือ "บริการเว็บ" (อะไรก็ได้) ที่ช้า พวกเขาไม่. แน่นอนว่าอะไรก็ตามที่อยู่ในกระบวนการจะเร็วกว่าสิ่งใด ๆ บนเครือข่าย แต่นั่นไม่ใช่สิ่งที่คำถามนี้เกี่ยวกับ ...
มาร์ค

คำตอบ:


54

การเรียกมันว่าเทคโนโลยีเดิมเป็นคำอธิบายที่ถูกต้องกว่า

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

หัวข้อนี้เฉพาะสำหรับเทคโนโลยีเดิมที่ยังคงไว้สำหรับความเข้ากันได้แบบย้อนหลังกับแอปพลิเคชันที่มีอยู่และไม่แนะนำสำหรับการพัฒนาใหม่ ขณะนี้ควรพัฒนาแอปพลิเคชันแบบกระจายโดยใช้ Windows Communication Foundation (WCF)

อัปเดต: WCF ไม่แยกความแตกต่างระหว่าง inter / intra / process / inter / intra-appdomain หากคุณใช้การสื่อสารด้วยเครื่องเดียวใน WCF คุณใช้ไปป์ที่มีชื่อการใช้งานควรให้ประสิทธิภาพที่ดีในสถานการณ์จริงแทบทั้งหมด

สำหรับการเปรียบเทียบประสิทธิภาพการทำงานของเทคโนโลยีการสื่อสารกระจายต่างๆดูที่นี่


บทความนั้นไม่ได้อ้างถึงการใช้รีโมตในการสื่อสารระหว่างกระบวนการโดยเฉพาะหรือไม่? สำหรับฉันแล้วดูเหมือนว่าการควบคุมระยะไกลยังคงมีอยู่ในการสื่อสารข้ามแอปโดเมน (AppDomain.CreateInstanceFromAndUnwrap และเพื่อน ๆ )
มาร์ค

ใช่แล้ว. หากชั้นเรียนเหล่านี้ได้รับการ "เลิก" พวกเขาจะมี ObsoleteAttribute นำไปใช้กับ them- msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx
RichardOD

2
@ Mark, @RichardOD: บทความนี้เป็นบทความหลักใน. NET Remoting ไม่ได้หมายถึงการสื่อสารระหว่างกระบวนการเท่านั้น นอกจากนี้ความจริงที่ว่า ObsoleteAttribute ไม่ได้อยู่ใน. NET 3.5 นั้นไม่มีความหมายใด ๆ เลยเนื่องจากการตัดสินใจที่จะประกาศ Remoting (และบริการเว็บ ASMX) เป็น "แบบดั้งเดิม" นั้นได้โพสต์. NET 3.5 RTM
John Saunders

@ จอห์น: พวกเขาไม่ได้ถูกระบุว่า [ล้าสมัย] ใน 4.0 (อย่างน้อยก็ยังไม่)
มาร์ค

@Mark: คุณหมายถึง 4.0 beta 1
John Saunders

11

ใช่. Remoting เลิกใช้งานแล้ว ... และเป็นทางการจาก Microsoft นี่คือลิงค์:

.NET Remoting

บรรทัดแรกในบทความระบุเป็นตัวหนา:

หัวข้อนี้เฉพาะสำหรับเทคโนโลยีเดิมที่ยังคงไว้สำหรับความเข้ากันได้แบบย้อนหลังกับแอปพลิเคชันที่มีอยู่และไม่แนะนำสำหรับการพัฒนาใหม่ ขณะนี้ควรพัฒนาแอปพลิเคชันแบบกระจายโดยใช้ Windows Communication Foundation (WCF)

ฉันคิดว่าคำฟุ่มเฟือยนั้น 'เลิกใช้แล้ว' แต่เห็นได้ชัดว่าพวกเขาอ้างว่าเป็น 'มรดก'


21
IMO "เลิกใช้แล้ว" แข็งแกร่งกว่า "แบบเดิม": "แบบเดิม" หมายถึง "ไม่เริ่ม" และเลิกใช้งานหมายความว่า "หากคุณได้เริ่มแล้วให้หยุดเดี๋ยวนี้เพราะอาจถูกลบทั้งหมดในเวอร์ชันอนาคต"
ChrisW

1
@ มาร์ค: ฉันไม่ได้อ่านแบบนั้น WCF ดูเหมือนจะใช้ได้กับการสื่อสารภายในกระบวนการเช่นเดียวกับ Remoting (ดู NetNamedPipeBinding ใน WCF)
Michael Petrotta

1
@ มาร์ค: ไม่ว่า Remoting จะเลิกใช้งาน @ChrisW: ฉันสงสัยว่า Remoting จะถูกลบในระยะเวลาอันใกล้นี้ แต่คุณสามารถคาดหวังการแก้ไขข้อบกพร่องน้อยลงหากมีและการสนับสนุนน้อยลงถ้ามี
John Saunders

1
@ มาร์ค - คำถามที่แท้จริงของคุณคืออะไร? ระยะไกลถือเป็นเทคโนโลยีเดิม ดูเหมือนว่าคุณไม่ต้องการให้เป็นจริง คุณอาจมีเหตุผลที่ดี แต่นั่นไม่ได้พูดถึงคำแนะนำในปัจจุบันของ Microsoft
Michael Petrotta

1
@ จอห์น: ฉันคิดว่าฉันเป็น ฉันกำลังทำการสื่อสารข้ามแอปโดเมนในกระบวนการโดยเฉพาะ (โดยใช้ AppDomain.CreateInstanceFromAndUnwrap และเพื่อน ๆ ) และฉันไม่เห็นวิธีที่จะทำสิ่งนี้ได้อย่างหมดจด (หรือมีประสิทธิภาพสูง) โดยใช้ WCF ฉันยินดีที่จะใช้ WCF แทน (ฉันใช้มันบ่อยมากในสถานการณ์อื่น ๆ ) แต่สำหรับสิ่งนี้ฉันมีปัญหาในการทำให้มันทำงานในแบบที่ฉันต้องการ ฉันจะโพสต์คำถามอื่นเกี่ยวกับสถานการณ์เฉพาะนั้น
มาร์ค

6

หากคุณต้องการย้ายไปที่. NET Core คุณต้องหาวิธีอื่นสำหรับ Remoting อยู่ดี:

.NET Remoting ถูกระบุว่าเป็นสถาปัตยกรรมที่มีปัญหา ใช้สำหรับการสื่อสารข้าม AppDomain ซึ่งไม่รองรับอีกต่อไป นอกจากนี้ Remoting ยังต้องการการสนับสนุนรันไทม์ซึ่งมีราคาแพงในการดูแลรักษา ด้วยเหตุผลเหล่านี้การรีบูต. NET จึงไม่รองรับ. NET Core และเราไม่ได้วางแผนที่จะเพิ่มการรองรับในอนาคต

ที่มา: https://docs.microsoft.com/en-us/dotnet/core/porting/libraries#remoting


1
คุณสามารถดูการอภิปรายเกี่ยวกับทางเลือกที่มีอยู่ใน. NET Core ได้ที่นี่: github.com/dotnet/corefx/issues/18394
Jean-Claude

ยังกล่าวถึงที่นี่: docs.microsoft.com/en-us/dotnet/core/porting/…
Jean-Claude

2

Clemens Vasters หัวหน้าฝ่ายเทคนิคของ Microsoft .NET Service Bus (ซึ่งหมายถึงทั้ง Remoting และ WCF) พูดถึง WCF กับ Remoting ในโพสต์ฟอรัมนี้ เพื่อสรุปโพสต์เขาแนะนำ WCF ผ่าน Remoting

ฉันไม่แน่ใจว่า. NET 4.0 ใช้การรีบูตภายในหรือไม่ แต่คุณสามารถลองส่งคำถามให้ Clemens ... ฉันแน่ใจว่าเขารู้คำตอบ


11
พนักงานของ Microsoft แนะนำให้ใช้วิธีการใหม่ที่ไม่เข้ากันไม่ได้กับทุกสิ่งในรูปแบบมาตรฐานใด ๆ ? น่าตกใจ.
quillbreaker

14
WCF เข้ากันไม่ได้กับอย่างอื่นในทางใด? และ Remoting เข้ากันได้กับอะไร?
John Saunders

2
หากคุณกำลังมองหาความเข้ากันได้ WCF เป็นตัวเลือก -only- (แน่นอนว่ายกเว้น asmx แต่นั่นคือ "มรดก" เช่นกัน) ระยะไกล - ไม่เคย - เหมาะสำหรับสถานการณ์ที่ต้องการความเข้ากันได้
มาร์ค

3
ฉันรับข้อเสนอแนะของคุณและถามคลีเมนส์ คำตอบของเขา: "Remoting เป็นส่วนหนึ่งของ. Net Framework และด้วยเหตุนี้จึงไม่หายไป ... สำหรับในกระบวนการการสื่อสารข้ามแอปโดเมนการ Remoting เป็นวิธีการสื่อสารดั้งเดิมของ CLR"
มาร์ค

1
เขากล่าวต่อไปว่าคุณควร "ดูอย่างจริงจังที่ WCF และ NetNamedPipeBinding"
John Saunders

2

ฉันคิดว่าตอนนี้ (2015) มันค่อนข้างชัดเจนแม้จะข้ามโดเมนแอปพลิเคชัน: https://msdn.microsoft.com/en-us/library/vstudio/ms180984(v=vs.100).aspx

การรีบูตข้าม AppDomains หัวข้อนี้เฉพาะสำหรับเทคโนโลยีเดิมที่เก็บรักษาไว้เพื่อความเข้ากันได้ย้อนหลังกับแอปพลิเคชันที่มีอยู่และไม่แนะนำสำหรับการพัฒนาใหม่ ขณะนี้ควรพัฒนาแอปพลิเคชันแบบกระจายโดยใช้ Windows Communication Foundation (WCF)

จากนั้นควรใช้ WCF สำหรับโดเมนข้ามแอปพลิเคชันด้วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.