Công dụng chính của MarshalByRefObject là gì?


Câu trả lời:


107

Rời khỏi; nó có nghĩa là giữa AppDomains hoặc máy, thay vì tuần tự hóa và chuyển đối tượng , đối tượng sẽ ở một đầu và một proxy được tạo ở đầu kia. Tất cả các lệnh gọi phương thức tới proxy đều bị chặn và cuộc gọi được truyền dưới dạng RPC wiki , msdn , khiến phương thức thực thi trên máy khác (thường là tuần tự các đối số và giá trị trả về).

Lưu ý: điều này có thể dẫn đến giao diện "chát" không mong muốn. Phương pháp tiếp cận đối tượng / proxy / RPC hiện nay ít thích hợp hơn so với các phương pháp có ranh giới dịch vụ rõ ràng ; Microsoft hiện khuyến nghị WCF wiki , msdn thay vì xóa.


5
@pavel - nó khá phức tạp, nhưng ít nhất chúng ta cũng hiểu rõ đâu là những cuộc gọi đắt tiền. Nếu bạn muốn nói đến băng thông , có nhiều cách để giảm thiểu điều đó.
— Marc Gravell

1
Đôi khi bạn không muốn ranh giới rõ ràng, chẳng hạn như trong các tình huống được liệt kê cho processdomain.codeplex.com Thay vào đó bạn muốn minh bạch.
— Andrew Savinykh

1
trong c # tất cả các loại tài liệu tham khảo là soái bởi ref mặc định hoặc làm thế nào để biết điều đó, soory nếu câu hỏi ngớ ngẩn của nó, chỉ mới với khái niệm này @MarcGravell
— Ehsan Sajjad

1
@Ehsan không, họ là soái ca theo mặc định. Tuy nhiên, Marshalling chỉ áp dụng khi vượt qua ranh giới miền ứng dụng, vì vậy hiếm khi nó thậm chí có liên quan. Để trở thành soái ca, nó phải kế thừa MashalByRefObject
— Marc Gravell

28

Một cách sử dụng quan trọng khác của MarshalByRefObjectnó là triển khai AOP thông qua loại bỏ chuỗi chìm.

Nếu bạn có một đối tượng có nguồn gốc từ ContextBoundObject(mà chính nó bắt nguồn từ MarshalByRefObject), bạn có thể khởi tạo nó trong một Ngữ cảnh riêng trong cùng một AppDomain và liên lạc giữa các đối tượng tự động đi qua hệ thống proxy Remoting - cho phép bạn cắm các bộ chìm tùy chỉnh vào bộ phận Remoting- chuỗi.

Điều này cuối cùng cho phép bạn 'trang trí' các cuộc gọi phương thức tới các đối tượng của mình và triển khai các dịch vụ xuyên suốt, chẳng hạn như ghi nhật ký và bảo mật, v.v.


Chỉ cần suy nghĩ về những điều này -Làm thế nào chúng ta có thể trang trí các lời gọi phương thức như vậy cho các đối tượng MBR? Những đồ trang trí đó sẽ tốn kém về mặt hiệu suất?
— SO19

9

nó sử dụng cơ bản để hỗ trợ truy cập các đối tượng giữa hai tên miền ứng dụng và các tên miền ứng dụng này có thể nằm trên cùng một máy tính hoặc trong các máy tính khác nhau thông qua quá trình xóa.

Xem tại đây


5

Bất kỳ đối tượng nào bên ngoài miền ứng dụng của ứng dụng người gọi nên được coi là Đối tượng Từ xa. Một Đối tượng Từ xa phải được dẫn xuất từ MarshalByRefObjectLớp. Bất kỳ đối tượng nào cũng có thể được thay đổi thành Đối tượng từ xa bằng cách lấy từ đó MarshalByRefObject. Các đối tượng mà không kế thừa từ MarshalByRefObjectđược gọi là Đối tượng không thể điều khiển từ xa .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.