3

アプリドメインから参照されているオブジェクトのローカルインスタンスを作成する方法があるかどうかを調べようとしています. そのため、常にリモート オブジェクトを呼び出す必要はなく、メソッド内で作成されたローカル インスタンスを呼び出すだけで済みます。

RemotingServices Marshal および GetObjectData メソッドを見てきましたが、それらが機能するかどうかを判断できず、Google も役に立ちませんでした

したがって、クラス定義は次のようになります

[XmlRoot("SI")]
public class SI : MarshalByRefObject, IXmlSerializable

そして、実行時のクラスのインスタンスは次のようになります。

Name: Service   
Value: {System.Runtime.Remoting.Proxies.__TransparentProxy} 
Type: SI {System.Runtime.Remoting.Proxies.__TransparentProxy}

次の行に沿って必要なことを達成したいと思っていました

var uri =RemotingServices.GetObjectUri(Service);
var serv = RemotingServices.Marshal(Service, uri, typeof(SI)); //Service is the object I described above

SerializationInfo info = new SerializationInfo(typeof(SI), new FormatterConverter());
StreamingContext context = new StreamingContext(StreamingContextStates.All);
serv.GetObjectData(info, context);

var t2 = serv.GetRealObject(context);

GetRealObject を呼び出すと、 「保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。」というエラーが表示されます。

私はまだこれを実装する方法を見つけていません。誰か提案がありますか?

4

1 に答える 1