\r
try \r
{\r
- // Serialize the request message\r
- MemoryStream reqMsgStream = CADSerializer.SerializeMessage(msgRequest);\r
-\r
// Time to transit into the "our" domain\r
byte [] arrResponse = null;\r
- byte [] arrRequest = reqMsgStream.GetBuffer();\r
-
- // TODO: Enable again when we have support in the runtime
- //AppDomain currentDomain = AppDomain.EnterDomain ( _domainID );
+ byte [] arrRequest = null; \r
+ \r
+ CADMethodReturnMessage cadMrm = null;\r
+ CADMethodCallMessage cadMsg;\r
+ \r
+ cadMsg = CADMethodCallMessage.Create (msgRequest);\r
+ if (null == cadMsg) {\r
+ // Serialize the request message\r
+ MemoryStream reqMsgStream = CADSerializer.SerializeMessage(msgRequest);\r
+ arrRequest = reqMsgStream.GetBuffer();\r
+ }\r
+\r
+ // TODO: Use Contexts instead of domain id only\r
+ AppDomain currentDomain = AppDomain.InternalSetDomainByID ( _domainID );
try
{
- IMessage reqDomMsg = CADSerializer.DeserializeMessage (new MemoryStream(arrRequest), null);
+ IMessage reqDomMsg;
+
+ if (null != arrRequest)
+ reqDomMsg = CADSerializer.DeserializeMessage (new MemoryStream(arrRequest), null);
+ else
+ reqDomMsg = new MethodCall (cadMsg);
IMessage retDomMsg = ChannelServices.SyncDispatchMessage (reqDomMsg);
+
+ cadMrm = CADMethodReturnMessage.Create (retDomMsg);
+ if (null == cadMrm) {
+ arrResponse = CADSerializer.SerializeMessage (retDomMsg).GetBuffer();
+ } else
+ arrResponse = null;
\r
- arrResponse = CADSerializer.SerializeMessage (retDomMsg).GetBuffer();
}
catch (Exception e)
{
- IMessage errorMsg = new ReturnMessage (e, new ErrorMessage());
+ IMessage errorMsg = new MethodResponse (e, new ErrorMessage());
arrResponse = CADSerializer.SerializeMessage (errorMsg).GetBuffer(); \r
}
finally
{
- // TODO: Enable again when we have support in the runtime
- // AppDomain.EnterDomain (AppDomain.getIDFromDomain (currentDomain));
+ AppDomain.InternalSetDomain (currentDomain);
}\r
-\r
- if (null != arrResponse) \r
- {\r
+ \r
+ if (null != arrResponse) {\r
// Time to deserialize the message\r
MemoryStream respMsgStream = new MemoryStream(arrResponse);\r
\r
// Deserialize the response message\r
retMessage = CADSerializer.DeserializeMessage(respMsgStream, msgRequest as IMethodCallMessage);\r
- }\r
+ } else\r
+ retMessage = new MethodResponse (msgRequest as IMethodCallMessage, cadMrm);\r
}\r
catch (Exception e) \r
{\r
try\r
{\r
+ Console.WriteLine("Exception in base domain");
retMessage = new ReturnMessage (e, msgRequest as IMethodCallMessage);
}\r
catch (Exception)\r
}\r
}\r
\r
- return retMessage;\r
+ return retMessage;\r
}
public virtual IMessageCtrl AsyncProcessMessage(IMessage reqMsg, IMessageSink replySink) \r
serializer.SurrogateSelector = null;\r
mem.Position = 0;\r
\r
- return (IMessage) serializer.Deserialize(mem);\r
+ return (IMessage) serializer.Deserialize(mem, null);\r
}\r
\r
internal static MemoryStream SerializeMessage(IMessage msg)\r
{\r
- MemoryStream mem = new MemoryStream();\r
- BinaryFormatter serializer = new BinaryFormatter(); \r
+ MemoryStream mem = new MemoryStream ();\r
+ BinaryFormatter serializer = new BinaryFormatter (); \r
\r
- serializer.SurrogateSelector = new RemotingSurrogateSelector();\r
- serializer.Serialize(mem, msg);\r
+ serializer.SurrogateSelector = new RemotingSurrogateSelector ();\r
+ serializer.Serialize (mem, msg);\r
\r
mem.Position = 0;\r
\r
return mem;\r
}
+
+ internal static MemoryStream SerializeObject(object obj)\r
+ {\r
+ MemoryStream mem = new MemoryStream ();\r
+ BinaryFormatter serializer = new BinaryFormatter (); \r
+\r
+ serializer.SurrogateSelector = new RemotingSurrogateSelector ();\r
+ serializer.Serialize (mem, obj);\r
+\r
+ mem.Position = 0;\r
+\r
+ return mem;\r
+ }
+\r
+ internal static object DeserializeObject(MemoryStream mem)\r
+ {\r
+ BinaryFormatter serializer = new BinaryFormatter(); \r
+\r
+ serializer.SurrogateSelector = null;\r
+ mem.Position = 0;\r
+\r
+ return serializer.Deserialize (mem);\r
+ }
}
}