การใช้ MarshalByRefObject ที่สำคัญคืออะไร?


คำตอบ:


109

ระยะไกล; หมายความว่าระหว่าง AppDomains หรือเครื่องแทนที่จะทำให้เป็นอนุกรมและถ่ายโอนวัตถุวัตถุจะอยู่ที่ปลายด้านหนึ่งและมีการสร้างพร็อกซีที่อีกด้านหนึ่ง การเรียกใช้เมธอดทั้งหมดไปยังพร็อกซีจะถูกดักฟังและการโทรจะถูกส่งเป็น RPC wiki , msdnทำให้เมธอดดำเนินการกับเครื่องอื่น (โดยทั่วไปจะเป็นอนุกรมของอาร์กิวเมนต์และค่าส่งคืน)

หมายเหตุ: สิ่งนี้อาจนำไปสู่อินเทอร์เฟซ "ช่างพูด" โดยไม่คาดคิด ขณะนี้วิธี object / proxy / RPC ไม่นิยมใช้กับวิธีการที่มีขอบเขตการให้บริการที่ชัดเจน ตอนนี้ Microsoft แนะนำ WCF wiki , msdnแทนการรีโมท


5
@ pavel - ค่อนข้างซับซ้อน แต่อย่างน้อยเราก็ชัดเจนว่าค่าโทรแพงอยู่ที่ไหน หากคุณหมายถึงแบนด์วิดท์มีหลายวิธีในการลดขนาดนั้น
Marc Gravell

1
บางครั้งคุณไม่ต้องการขอบเขตที่ชัดเจนเช่นในสถานการณ์ที่ระบุไว้สำหรับprocessdomain.codeplex.comแต่คุณต้องการความโปร่งใส
Andrew Savinykh

1
ใน c # ประเภทการอ้างอิงทั้งหมดเป็นจอมพลโดยค่าเริ่มต้นอ้างอิงหรือจะรู้ได้อย่างไรถ้าเป็นคำถามโง่ ๆ ใหม่กับแนวคิดนี้ @MarcGravell
Ehsan Sajjad

1
@Ehsan ไม่พวกเขาเป็น marshal-by-val โดยค่าเริ่มต้น Marshalling ใช้เฉพาะเมื่อข้ามขอบเขตโดเมนแอปเท่านั้นดังนั้นจึงไม่ค่อยมีความเกี่ยวข้องกัน ในการเป็น marshal-by-ref จะต้องสืบทอด MashalByRefObject
Marc Gravell

28

การใช้งานที่สำคัญอีกประการหนึ่งMarshalByRefObjectคือการใช้ AOP ผ่านการควบคุมโซ่จม

หากคุณมีอ็อบเจ็กต์ที่มาจากContextBoundObject(ซึ่งมาจากตัวมันเองMarshalByRefObject) คุณสามารถสร้างอินสแตนซ์ได้ในบริบทที่แยกจากกันภายใน AppDomain เดียวกันและมีการสื่อสารระหว่างอ็อบเจ็กต์โดยอัตโนมัติผ่านระบบพร็อกซี Remoting - ช่วยให้คุณสามารถเสียบซิงก์ที่กำหนดเองเข้ากับ Remoting sink- เชื่อมต่อ.

ในที่สุดสิ่งนี้จะช่วยให้คุณสามารถเรียกเมธอด 'ตกแต่ง' ไปยังวัตถุของคุณและใช้บริการการตัดขวางเช่นการบันทึกและการรักษาความปลอดภัยเป็นต้น


แค่คิดถึงสิ่งเหล่านี้ - เราจะตกแต่งวิธีการเรียกใช้วัตถุ MBR ได้อย่างไร? การตกแต่งเหล่านั้นมีค่าใช้จ่ายในแง่ของประสิทธิภาพหรือไม่?
SO19

9

การใช้งานขั้นพื้นฐานคือการสนับสนุนการเข้าถึงวัตถุระหว่างสองแอปโดเมนและโดเมนแอปเหล่านี้สามารถอยู่บนคอมพิวเตอร์เครื่องเดียวกันหรือในคอมพิวเตอร์เครื่องอื่นผ่านการรีบูต

ดูที่นี่


5

อ็อบเจ็กต์ใด ๆ ที่อยู่นอกโดเมนแอปพลิเคชันของแอปพลิเคชันผู้โทรควรถือเป็นวัตถุระยะไกล วัตถุระยะไกลที่ควรได้รับจากMarshalByRefObjectคลาส วัตถุใด ๆ MarshalByRefObjectที่สามารถเปลี่ยนเป็นวัตถุระยะไกลโดยสืบมาได้จาก ออบเจ็กต์ที่ไม่มีการสืบทอดจากMarshalByRefObjectเรียกว่าออบเจ็กต์ที่ไม่สามารถรีโมตได้

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