Hi
i stored class object in logical data(call context) ,when i try to access the logical data(call context) from different app domain,I'm getting system.runtime.serialization issue.
Following my code will reproduce my issue .
public static class Program
{
private const String c_CCDataName = "CCData";
private static void Main()
{
CallContext.LogicalSetData(c_CCDataName,new MyClass());
GetCallContext();
WaitCallback wc = na => GetCallContext();
wc.EndInvoke(wc.BeginInvoke(null, null, null));
AppDomain ad = AppDomain.CreateDomain("Other AppDomain");
ad.DoCallBack(GetCallContext);
AppDomain.Unload(ad);
GetCallContext();
Console.ReadLine();
}
private static void GetCallContext()
{
Console.WriteLine("AppDomain={0}, Thread ID={1}, Data={2}",
AppDomain.CurrentDomain.FriendlyName,
Thread.CurrentThread.ManagedThreadId,
CallContext.LogicalGetData(c_CCDataName));
}
class MyClass
{
public int id { get; set; }
}
}
Following code will fix the issue.But i'm not sure its best solution or not.Could you suggest me?
public static class Program
{
private const String c_CCDataName = "CCData";
private static void Main()
{
CallContext.LogicalSetData(c_CCDataName,new MyClass());
GetCallContext();
WaitCallback wc = na => GetCallContext();
wc.EndInvoke(wc.BeginInvoke(null, null, null));
AppDomain ad = AppDomain.CreateDomain("Other AppDomain");
ad.DoCallBack(GetCallContext);
AppDomain.Unload(ad);
GetCallContext();
Console.ReadLine();
}
private static void GetCallContext()
{
Console.WriteLine("AppDomain={0}, Thread ID={1}, Data={2}",
AppDomain.CurrentDomain.FriendlyName,
Thread.CurrentThread.ManagedThreadId,
CallContext.LogicalGetData(c_CCDataName));
}
class MyClass:MarshalByRefObject
{
public int id { get; set; }
}
}
i just used
MarshalByRefObject
it 's solved my issue.could you suggest me it's any impact will be applicable ,in case of using
<pre>MarshalByRefObject</pre>
.
thanks in advance
mani