Friday, December 26, 2008

marshalling in .net

What is marshalling and what are different kinds of marshalling?
Marshaling is used when an object is converted so that it can be sent across the network or across
application domains. Unmarshaling creates an object from the marshaled data. There are two
ways to do marshalling:-
• Marshal-by-value (MBV):- In this, the object is serialized into the channel, and a
copy of the object is created on the other side of the network. The object to marshal
is stored into a stream, and the stream is used to build a copy of the object on the
other side with the unmarshalling sequence.
• Marshaling-by-reference (MBR):- Here it creates a proxy on the client that is
used to communicate with the remote object. The marshaling sequence of a remote
object creates an ObjRef instance that itself can be serialized across the network.
Objects that are derived from “MarshalByRefObject” are always marshaled by reference. All our
previous samples have classes inherited from “MarshalByRefObject”
To marshal a remote object the static method RemotingServices.Marshal () is
used.RemotingServices.Marshal () has following overloaded versions:-

Public static ObjRef Marshal (MarshalByRefObject obi)
Public static ObjRef Marshal (MarshalByRefObject obi, string objUri)
Public static ObjRef Marshal (MarshalByRefObject obi, string objUri,
Type requested Type)

The first argument obj specifies the object to marshal. The objUri is the path that is stored within
the marshaled object reference; it can be used to access the remote object. The requested Type
can be used to pass a different type of the object to the object reference. This is useful if the client
using the remote object should not use the object class but an interface that the remote object
class implements instead. In this scenario, the interface is the requested Type that should be used
for marshaling.

No comments: