Tôi có một ứng dụng lớn sử dụng COM thông qua tính năng truy cập từ xa .net để thực hiện cuộc gọi từ cấp web đến cấp trung gian. Khởi động và chạy ở chế độ này rất chậm. Trên cả hai mặt của ranh giới COM là mã của chúng tôi.
Tôi muốn có thể (tùy chọn) chạy nó trong một quy trình duy nhất. Khá nhiều hành vi dựa vào các lệnh gọi tới ServicedComponents có tất cả các tham số của chúng được tuần tự hóa và các thay đổi được thực hiện đối với các đối tượng bên trong của thành phần không bị rò rỉ trừ khi tham số đó là tham số "ref".
Kế hoạch hiện tại của tôi là buộc ứng dụng quy trình kép này thành một quy trình mà không thay đổi quá nhiều mã bằng cách sử dụng ranh giới tầng giữa giả với tính năng điều khiển từ xa .net tùy chỉnh.
Nếu tôi thay đổi tất cả:
lớp BigComponent : ServiceComponent {
...
}
进入
[Thành phần giả]
lớp BigComponent : ContextBoundObject {
...
}
Sau đó, tôi có thể viết một ContextAttribution tùy chỉnh để giả mạo ranh giới quy trình và làm cho các tham số tự tuần tự hóa:
即
[AttributionUsage(AttributionTargets.Class)]
lớp công khai FakeComponentAttribution:
Thuộc tính bối cảnh,
IContributeServerContextSink
{
...có rất nhiều thứ ở đây
}
theo http://msdn.microsoft.com/en-us/magazine/cc164165.aspx
Bây giờ tất cả đều hoạt động tốt và cho đến nay tôi có thể chặn các cuộc gọi đến tất cả các phương thức của các lớp này. Tuy nhiên, tôi chỉ có thể thấy IMethodCallMessage.Args trong cuộc gọi IMessageSink.ProcessMessage - Tôi dường như không thể thay thế chúng bằng đối tượng mà tôi chọn.
Bất cứ khi nào tôi thay đổi một mục trong mảng IMethodCallMessage.Args, những thay đổi của tôi sẽ bị bỏ qua. Theo như tôi biết trong Reflector, giao diện này là một trình bao bọc xung quanh một đối tượng cục bộ trong chính thời gian chạy, tôi không thể ghi vào đối tượng này mà chỉ đọc nó.
Làm cách nào để sửa đổi các tham số của lệnh gọi phương thức trong điều khiển từ xa .net?
Tôi có cần triển khai kênh của riêng mình không? Có kênh hướng dẫn "địa phương" nào mà tôi có thể tham khảo không?
Mục tiêu của tôi là làm cho các thành phần này hoạt động giống như các đối tượng từ xa (trong đó tất cả các tham số của chúng được tuần tự hóa khi vào phương thức và các giá trị trả về của chúng được tuần tự hóa khi thoát), nhưng điểm cuối từ xa lại thực hiện cùng một quy trình.
Khi mảng tham số được truyền IMtin nhắnchìm
Tôi chưa tìm được cách chỉnh sửa mảng tham số.
Cuối cùng, tôi phải làm cho lớp đối tượng tham số nhận thức được vấn đề và triển khai một giao diện mớiIFakeRemotingAware
. Điều này cho phép các tham số đối tượng phức tạp thể hiện hành vi chuyển tiếp theo giá trị do tuần tự hóa/giải tuần tự hóa khi sử dụng tính năng từ xa, để mô phỏng hành vi khi sử dụng tính năng từ xa giả.
Giao diện này có hai phương thức:NhậpGiảTừ Xa
khiến đối tượng lưu vào bộ đệm một bản sao cục bộ về trạng thái của nó và Rời khỏigiảtừ xa
Làm cho đối tượng khôi phục trạng thái từ bộ đệm.
Tôi là một lập trình viên xuất sắc, rất giỏi!