Ich habe versucht, den folgenden Code zu arbeiten (alles in derselben Baugruppe definiert ist):Wie übergebe ich Referenzen als Methodenparameter über AppDomains?
namespace SomeApp{
public class A : MarshalByRefObject
{
public byte[] GetSomeData() { // }
}
public class B : MarshalByRefObject
{
private A remoteObj;
public void SetA(A remoteObj)
{
this.remoteObj = remoteObj;
}
}
public class C
{
A someA = new A();
public void Init()
{
AppDomain domain = AppDomain.CreateDomain("ChildDomain");
string currentAssemblyPath = Assembly.GetExecutingAssembly().Location;
B remoteB = domain.domain.CreateInstanceFromAndUnwrap(currentAssemblyPath,"SomeApp.B") as B;
remoteB.SetA(someA); // this throws an ArgumentException "Object type cannot be converted to target type."
}
}
}
Was ich versuche zu tun, um eine Referenz einer ‚A‘ Instanz in dem erstellt passieren erste AppDomain für die untergeordnete Domäne und die untergeordnete Domäne führt eine Methode für die erste Domäne aus. Irgendwo auf 'B' Code werde ich 'remoteObj.GetSomeData()' aufrufen. Dies muss getan werden, weil das 'Byte []' von 'GetSomeData' Methode auf der ersten appdomain 'berechnet' werden muss. Was muss ich tun, um die Ausnahme zu vermeiden, oder was kann ich tun, um dasselbe Ergebnis zu erzielen?
Ihr Code funktioniert für mich. –
+1 Für mich auch. Welche Versionen von CLR, Visual Studio (falls vorhanden), C#, etc? Irgendwelche anderen Umstände? –
seltsam, ich werde wieder überprüfen –