1

.Net Activator.GetObject(Type type, string url, object data) では、プロキシをオブジェクトに返します。プロキシは MarshalByRefObject から継承され、AppDomains 間で送信できると思います。私は正しいですか?

私のアプリでは、appdomain A でオブジェクトを作成し、それを appdomain B で使用しています。オブジェクトのメンバーは、Activator.GetObject () を使用して作成された proxyobjects です。そのため、AppDomain B にいるときは、appdomain A で作成されたオブジェクトへの透過プロキシがあります。プロキシ オブジェクトでメソッドの呼び出しを実行しようとすると、エラーが発生します。

たとえば、App Domain B に Connection オブジェクトを作成します。App Domain A に Connection オブジェクトの透過プロキシがあります。AppDomain A からこのような呼び出しを行おうとすると、エラーが発生します。 ConnectionObject.SecurityProxy.GetSecurityAccount ( )。問題のように見えますが、上記のような呼び出しを行うと、呼び出しを AppDomain B に転送するのではなく、AppDomain A で SecurityProxy を再度作成しようとしています。オブジェクトが作成されました。

私が間違っていることを理解するのを手伝ってもらえますか?

よろしく、アニル。

4

1 に答える 1

1

SecurityProxy が ConnectionObject のプロパティであると仮定すると...

ドメイン A で ConnectionObject プロキシを扱っています。メソッド呼び出しはドメイン B に転送され、そこで実行され、結果がドメイン A に返されます。

プロパティはコンパイラのトリックです。これにより、get_X と set_X の 2 つのメソッドがフィールドのように見えます。

したがって、「ConnectionObject.SecurityProxy」を呼び出すと、appdomain の境界を越えて SecurityProxy のインスタンスを返すメソッドが呼び出されます。

次の 2 つのいずれかを行う必要があります: SecurityProxy のインスタンスを作成してアンラップし、それを ConnectionObject に渡すか、ConnectionObject を、メソッドのみを公開し、appdomain の境界を越えても安全であることが絶対にわかっている型/引数のみを返すファサードに変換します。

于 2010-06-19T15:46:57.263 に答える