2011-06-05 22 views
11

Tôi cần gọi phương thức đối tượng trong một miền ứng dụng khác (thông số truy cập và nhận kết quả). Ý tưởng?Cách đơn giản nhất để thực hiện cuộc gọi cross-appdomain?

UPD cả AppDomain được tạo không phải bởi mã của tôi (ứng dụng máy chủ tạo ra nó, và sau đó mã của tôi được gọi). Làm thế nào tôi có thể truy cập vào một AppDomain từ một AppDomain khác?

Trả lời

14

Nếu bạn đã tạo một đối tượng trong một miền khác, ví dụ: với AppDomain.CreateInstanceAndUnwrap, tất cả những gì bạn cần để gọi đối tượng trong miền khác là gọi phương thức của đối tượng. Cách đơn giản nhất để thực hiện cuộc gọi miền chéo ứng dụng là thực hiện cuộc gọi trực tiếp trên đối tượng đó, thực tế được hiển thị từ một tên miền khác thông qua proxy của nó, hiện có trong một tên miền khác.

UPD
Rất tiếc việc nhận miền máy chủ không dễ dàng như vậy. Bạn nên liệt kê các tên miền như this và tìm trong số đó là máy chủ lưu trữ. Tôi cho rằng tên miền lưu trữ của bạn là miền mà phương thức AppDomain.IsDefaultAppDomain trả về đúng.

+0

Tôi hoàn toàn quên về phương pháp đó. Trên thực tế khá thuận tiện hơn việc sử dụng DoCallBack;) –

+0

Rất tuyệt! Có thể gọi lại bằng cách này không? – user626528

+2

@ user626528 Có, nhưng không chỉ gọi lại cho một phương thức của một đối tượng. Nếu bạn tạo một đối tượng trong một miền khác, tất cả các phương thức của nó được gọi trong miền đó. Tôi cho rằng bạn nên tạo một số lớp có trách nhiệm gọi lại của bạn, sau đó tạo một thể hiện của lớp đó trong một tên miền khác thông qua 'AppDomain.CreateInstanceAndUnwrap' và, cuối cùng, gọi phương thức trên cá thể trong miền khác. – Centro

3

Điều này thường đạt được khi sử dụng AppDomain.DoCallBack. Bạn cần đảm bảo rằng nếu bạn muốn chuyển các tham số, bạn cần phải tạo một đối tượng có thể tuần tự, có phương thức mà bạn chuyển cho phương thức được mô tả ở trên. Trong phương thức gọi lại, bạn có thể thực hiện một cuộc gọi lại AppDomain khác để chuyển kết quả trở lại AppDomain ban đầu.

+0

Tôi không thấy, cách chuyển tham số/kết quả với nó. – user626528

+1

@ user626528 Bạn không thể chuyển tham số hoặc nhận kết quả trực tiếp. Những gì bạn có thể làm là bạn có thể sử dụng [SetData] (http://msdn.microsoft.com/en-us/library/system.appdomain.setdata.aspx) và [GetData] (http://msdn.microsoft.com /en-us/library/system.appdomain.getdata.aspx) phương pháp miền ứng dụng của bạn để làm như vậy. – Prasad

Các vấn đề liên quan