What is an application domain?
Previously “PROCESS” where used as security boundaries. One process has its own
virtual memory and does not over lap the other process virtual memory; due to this
one process can not crash the other process. So any problem or error in one process
does not affect the other process. In .NET they went one step ahead introducing
application domains. In application domains multiple applications can run in same
process with out influencing each other. If one of the application domains throws
error it does not affect the other application domains. To invoke method in a object
running in different application domain .NET remoting is used.
What is .NET Remoting?
.NET remoting is replacement of DCOM. Using .NET remoting you can make remote object
calls which lie in different Application Domains. As the remote objects run in different
process client calling the remote object can not call it directly. So the client
uses a proxy which looks like a real object.
When client wants to make method call on the remote object it uses proxy for it.
These method calls are called as “Messages”. Messages are serialized using “formatter”
class and sent to client “channel”. Client Channel communicates with Server Channel.
Server Channel uses as formatter to deserialize the message and sends to the remote
Which class does the remote object has to inherit?
All remote objects should inherit from System.MarshalbyRefObject.
What are two different types of remote object creation mode in .NET?SAO (Server Activated Objects) also called as Well-Known call mode.
CAO (Client Activated Objects)
There are two different ways in which object can be created using Remoting :-
SAO has two modes “Single Call” and “Singleton”. With Single Call object the object
is created with every method call thus making the object stateless. With Singleton
the object is created only once and the object is shared with all clients.
CAO are stateful as compared to SAO. In CAO the creation request is sent from client
side. Client holds a proxy to the server object created on server.
Describe in detail Basic of SAO architecture of Remoting?Common Interface which will be shared between them.
Remoting has at least three sections :-
First important section is the common interface between Server and Client.”InterFaceRemoting”
project has the interface code. For sample project interface is very simple with
only two methods :- SetValue and GetValue.
Public Interface InterFaceRemoting
Second important section is the server.In this sample server is using HTTP channel
and the server object is singleton.
Sub SetValue(ByVal value As String)
Function GetValue() As String
Following is detail explanation :-
Channel object is created and registered.
Public Class RemotingServer
Private strData As String
Public Function GetValue() As String Implements
strData = “testing..”
Public Sub SetValue(ByVal value As String) Implements
strData = value
Dim objHttpChannel As HttpChannel
objHttpChannel = New HttpChannel(1234)
Console.WriteLine(“Server registered and listening waiting
Following is the code.
Dim objHttpChannel As HttpChannel
Server then hosts the object so that client can connect to it. This is the time
when we specify what mode the server object will be created i.e. Singleton or SingleCall.
This is done by the following below given code. Note in sample we are hosting the
server object in singleton mode that means that the same object will be shared between
all clients. Also note the server object is implementing “InterFaceRemoting” and
inheriting from “MarshalByRefObject”.
objHttpChannel = New HttpChannel(1234)
Now comes the final section that is third section the client which will connect
to this hosted remoting object.
Following is a detail explanation of client code :-
First we create the channel i.e. HTTP. Note whatever channel the server is using
same will be used by the client.
As said before the common interface i.e.“InterFaceRemoting” will be used to communicate
After that we can get the server object reference using following code
objRemoting = CType(Activator.GetObject(GetType(InterFaceRemoting.
Then the client can make method call as if the object is local. But actually the
object is a proxy.
Console.WriteLine(“Value on server:-“&objRemoting.GetValue.ToString())
You an run the program and see the output. For running the program run the server
program which is in server directory. Run “Server.exe” from BIN directory. If the
EXE runs properly following will be the screen as shown below.
Dim objHttpChannel As New HttpChannel
Dim objRemoting As InterFaceRemoting.InterFaceRemoting
objRemoting = CType(
Console.WriteLine(“Referenced the main object.... Now
Console.WriteLine(“Value on server :- “ &
Console.WriteLine(“Press enter to Terminate”)
Now run “Client.exe” from client folder in BIN directory.Following will be the output
seen.This means that the client connected to the server program and displayed the
data in the server object. In the server object we have initialized value “testing......”.
In constructor of class “RemotingServer” same value is displayed at the client side.
What are the situations you will use singleton architecture in remoting?
If all remoting clients have to share the same data singleton architecture will
What is fundamental of published or precreated objects in Remoting?
In scenarios of singleton or single call the objects are created dynamically. But
in situations where you want to precreate object and publish it you will use published
Dim obj as new objRemote
As shown in above sample following changes will be needed on server side. RemotingConfiguration.RegisterWellKnownServiceType
is replaced by RemotingServices.Marshal(obj,”RemoteObject”) where “obj” is the precreated
objected on the server whose value is initialized to 100.
obj.Initvalue = 100
What are the ways in which client can create object on server in CAO model?Activator.CreateInstance().
By Keyword “New”.
There are two ways by which you can create Client objects on remoting server :-
Are CAO stateful in nature?
Yes. In CAO remoting model client creates a instance on server and instance variable
set by client on server can be retrieved again with correct value.
In CAO model when we want client objects to be created by “NEW” keyword is there
any precautions to be taken?
Remoting Clients and Remoting Server can communicate because they share a common
contract by implementing Shared Interface or Base Class (As seen in previous examples).
But according to OOP’s concept we can not create a object of interface or Base Classes
(Abstract Class). Shipping the server object to client is not a good design practice.
In CAO model we can use SOAPSUDS utility to generate Metadata DLL from server which
can be shipped to client, clients can then use this DLL for creating object on server.
Run the SOAPSUDS utility from visual studio command prompt for syntax see below
soapsuds -ia:RemotingServer -nowp -oa:ClientMetaData.dll
Server code will change as follows :-
Where RemotingServer is your server class name.
ClientMetaData.dll is the DLL name by which you will
want to create the metadll.
Note :- We have to provide applicationname and register the object as ActivatedServiceType.
RemotingConfiguration.ApplicationName = “RemoteObject”
On client side we have to reference the generated ClientMetaData.dll from SOAPSUDS
utility. Below are changes which are needed to be incorporated at the Remoting Client
RemoteObject is class which is obtained from ClientMetaData.dll which we created
using SOAPSUDS utility. Now you can reference the object as normal object.
Dim objRemoteObject as new RemoteObject().
Is it a good design practice to distribute the implementation to Remoting Client?Any one can use ILDASM and decrypt your logic.
It’s a bad architecture move to have full implementation as client side as any changes
in implementation on server side you have to redistribute it again.
It’s never advisable to distribute complete implementation at client, due to following
So the best way is to have a interface or SOAPSUDS generated meta-data DLL at client
side rather than having full implementation.
What are LeaseTime, SponsorshipTime, RenewonCallTime and LeaseManagerPollTime?
In normal .NET environment objects lifetime is managed by garbage collector. But
in remoting environment remote clients can access objects which are out of control
of garbage collector. Garbage collector boundary is limited to a single PC on which
framework is running; any remote client across physical PC is out of control of
GC (Garbage Collector).
This constraint of garbage collector leads to a new way of handling lifetime for
remoting objects, by using concept called as “LeaseTime”. Every server side object
is assigned by default a “LeaseTime” of five minutes. This leasetime is decreased
at certain intervals. Again for every method call a default of two minutes is assigned.
When i say method call means every call made from client. This is called as “RenewalOnCallTime”.
Let’s put the whole thing in equation to make the concept more clear.
When total object lifetime is reduced to zero, it queries the sponsor that should
the object be destroyed. Sponsor is an object which decides should object Lifetime
be renewed. So it queries any registered sponsors with the object, if does not find
any then the object is marked for garbage collection. After this garbage collection
has whole control on the object lifetime. If we do not foresee how long a object
will be needed specify the “SponsorShipTimeOut” value. SponsorShipTimeOut is time
unit a call to a sponsor is timed out.
Total Remoting object life time = LeaseTime +
(Number of method calls) X (RenewalTime).
If we take NumberOfMethodCalls as one.
Then default Remote Object Life Time = 5 + (1) X 2 = 10 minutes
(Everything is in minutes)
“LeaseManagerPollTime” defines the time the sponsor has to return a lease time extension.
Which config file has all the supported channels/protocol?
Machine.config file has all the supported channels and formatter supported by .NET
remoting.Machine.config file can be found at “C:\WINDOWS\Microsoft.NET\Framework\vXXXXX\CONFIG”
element in the Machine.config file which has the channels and the formatters. Below
is a figure shown which can give a clear idea of how the file looks like.
How can you specify remoting parameters using Config files?
Both remoting server and remoting client parameters can be provided through config
files. Below is a sample of server config file which provides all remoting parameter
values which we where providing through code.
Later this config file can be loaded using the following code.
<channel ref=”tcp server” port=”9000" />
Same way we also have client.config file for loading the client remoting parameters.
client remoting can then load the configuration file by using :-
url = “tcp://localhost:9000/Server/RemoteObject”/>
<channel ref=”tcp client” />
Dim IobjCommon As CommonInterFace.Icommon
Dim StrData As String
Dim objServiceEntries As WellKnownClientTypeEntry()
SetupInformation.ApplicationBase & “Client.config”)
IobjCommon = Activator.GetObject(GetType(Icommon),
StrData = IobjCommon.GetValue()
Console.WriteLine(“ Serve side Data is “ & StrData)
Can Non-Default constructors be used with Single Call SAO?
Twist :- What are the limitation of constructors for Single call SAO?
Non-Default constructors can not be used with single call objects as object is created
with every method call, there is no way to define Non-default constructors in method
It’s possible to use Non-Default constructor with Client activated objects as both
“NEW” keyword and “Activator.CreateInstance” provide a way to specify Non-Default
How can we call methods in remoting Asynchronously?
All previous examples are a synchronous method calls that means client has to wait
until the method completes the process. By using Delegates we can make Asynchronous
What is Asynchronous One-Way Calls?
One-way calls are a different from asynchronous calls from execution angle that
the .NET Framework does not guarantee their execution. In addition, the methods
used in this kind of call cannot have return values or out parameters. One-way calls
are defined by using [OneWay()] attribute in class.
What is marshalling and what are different kinds of 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.
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 :-
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 obj)
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 requestedType 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 shouldn't
use the object class but an interface that the remote object class implements instead.
In this scenario the interface is the requestedType that should be used for marshaling.
public static ObjRef Marshal(MarshalByRefObject obj, string objUri)
public static ObjRef Marshal(MarshalByRefObject obj, string objUri,
What is ObjRef object in remoting?location of the remote object
All Marshal() methods return ObjRef object.The ObjRef is serializable because it
implements the interface ISerializable, and can be marshaled by value. The ObjRef
knows about :-
What is a Web Service?
Web Services are business logic components which provide functionality via the Internet
using standard protocols such as HTTP.
Web Services uses Simple Object Access Protocol (SOAP) in order to expose the business
functionality.SOAP defines a standardized format in XML which can be exchanged between
two entities over standard protocols such as HTTP. SOAP is platform independent
so the consumer of a Web Service is therefore completely shielded from any implementation
details about the platform exposing the Web Service. For the consumer it is simply
a black box of send and receive XML over HTTP. So any web service hosted on windows
can also be consumed by UNIX and LINUX platform.
What is UDDI?
Full form of UDDI is Universal Description, Discovery and Integration. It is a directory
that can be used to publish and discover public Web Services. If you want to see
more details you can visit the http://www.UDDI.org.
What is DISCO?
DISCO is the abbreviated form of Discovery. It is basically used to club or group
common services together on a server and provides links to the schema documents
of the services it describes may require.
What is WSDL?Where we can find the Web Service (its URI)?
What are the methods and properties that service supports?
Data type support.
Web Service Description Language (WSDL)is a W3C specification which defines XML
grammar for describing Web Services.XML grammar describes details such as:-
In short its a bible of what the webservice can do.Clients can consume this WSDL
and build proxy objects that clients use to communicate with the Web Services. Full
WSDL specification is available at http://www.w3.org/TR/wsdl.
What the different phase/steps of acquiring a proxy object in Webservice?Client communicates to UDI node for WebService either through browser or UDDI's
public web service.
UDII responds with a list of webservice.
Every service listed by webservice has a URI pointing to DISCO or WSDL document.
After parsing the DISCO document, we follow the URI for the WSDL document related
to the webservice which we need.
Client then parses the WSDL document and builds a proxy object which can communicate
Following are the different steps needed to get a proxy object of a webservice at
the client side :-
What is file extension of Webservices?
.ASMX is extension for Webservices.
Which attribute is used in order that the method can be used as WebService?
WebMethod attribute has to be specified in order that the method and property can
be treated as WebService.
What are the steps to create a webservice and consume it?First create a website by clicking on File -- New WebSite.
From “Visual Studio Installed Templates” click on “Asp.NET Web Service”.
By default the .NET editor has made a default webservice method called as "HelloWord"
which returns a string datatype. Let's rename "Service.vb" to "Maths.vb" and "Service.asmx"
to "Maths.asmx". Let’s replace the “HelloWorld” with following code below :-
This webservice will add two numbers and give to the calling client.All the below
steps are according to VS2005 beta editor :-
After the webservice is done click on add Webreference. Normally for components
we do a “Add Reference” and for Webservices we do “Add Web Reference”.
You will be shown with a list of webservices which are known to the solutions. As
we are looking for our “Maths” webservice which exist in the same solution, we click
“Webservices in this solution”.
Your editor has located the “Maths” webservice.Select the webservice.
After you have clicked on “Maths” webservice you will see a search progress bar
as shown in figure below. This process will start the webservice, reference it and
create a proxy for the client, so that using it client can absorb the webservice.
Finally you are able to see your webservice which is ready for use. Click on Add
Reference and you will see a “Localhost” reference in your .NET solution.
We need to make a client who will absorb this “Maths Webservice”. Add “WebserviceClient.aspx”
and create a UI as shown below. In the button click put in the following code. “LocalHost.ClsMaths”
is the proxy object by which you can make calls to the webservice.
Public Function AddTwoNumbers(ByVal Number1 As Integer, ByVal
Number2 As Integer) As Integer
Return Number1 + Number2
Sub cmdCalculate_Click(ByVal sender As Object, ByVal e As
Dim pobjMaths As New localhost.ClsMaths
lblResultDisplay.Text = Convert.ToString(
Do webservice have state?
Twist :- How can we maintain State in Webservices?
Webservices as such do not have any mechanism by which they can maintain state.
Webservices can access ASP.NET intrinsic objects like Session, application and so
on if they inherit from “WebService” base class.
<%@ Webservice class="TestWebServiceClass" %>
Above is a sample code which sets as session object called as “val”. TestWebserviceClass
is inheriting from WebService to access the session and application objects.
Public class TestWebServiceClass
Public Sub SetSession(value As String)
session("Val") = Value