I zostały próbuje uzyskać następujący kod do pracy (wszystko jest zdefiniowana w tym samym zespole):Jak przekazać referencje jako parametry metody w 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."
}
}
}
Co staram się zrobić, to przekazać referencję typu „A” przykład utworzony w najpierw AppDomena do domeny podrzędnej i niech domena podrzędna uruchomi metodę w pierwszej domenie. W pewnym punkcie kodu "B" zadzwonię do "remoteObj.GetSomeData()". Należy to zrobić, ponieważ "bajt []" z metody "GetSomeData" musi być "obliczony" na pierwszym appdomain. Co należy zrobić, aby uniknąć wyjątku lub co mogę zrobić, aby osiągnąć ten sam wynik?
Twój kod działa dla mnie. –
+1 Dla mnie też. Jakie wersje CLR, Visual Studio (jeśli istnieje), C#, itp? Jakieś inne okoliczności? –
Dziwne, mam zamiar ponownie sprawdzić –