Remoting is the process through which we can access any remote object from one application domain to another application domain.
For creating a remote object the class object must be inherited by MarshalByRefObject class.
An application domain is the runtime environment of the application, For MicrosoftWord, the domain is MS Office, and For the .NET program, the .NET runtime environment.
Terms Used in Remoting
- Proxy: To avoid conjunction in networking. The main work is task Distributing. There are two types of proxy.
- Transparent proxy (There is no physical existence, Created by IIS server)
- Real Proxy (Physical Existence)
- Channel: Channel provides the medium for transferring data from one location to another location. There are two types of channels.
- TCP(work with Predefined root Connection oriented)
- HTTP (No need predefined root)
- Formatters: Change the data in an appropriate format that it can traverse through channels. There are two types of formatters.
- Binary
- SOAP(Simple Object Access Protocol)
- Sink: The sink is used from a security point of view. Before sending the data, the Data will be encrypted. Some additional bits will be added to the data to secure the data. There are two types of sinks.
- Envoy sink
- Server Context Sink
Object Mode On Server
- Two Types of Object Mode
- For creating Remoting we have to create 3 applications
- class Library (Of which Remote Object will be created)
- Server Application (Console Application)
- Client Application (Window Application)
RemoteClass
using System;
using System.Collections.Generic;
using System.Text;
namespace remoteclass
{
public class xx : MarshalByRefObject
{
public int sum(int a, int b)
{
return a + b;
}
}
}
Remote Server
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace remoteserver
{
class Program
{
static void Main(string[] args)
{
TcpChannel ch = new TcpChannel(8085);
ChannelServices.RegisterChannel(ch);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(remoteclass.xx), "rahul", WellKnownObjectMode.Singleton);
Console.Write("Server is Ready........");
Console.Read();
}
}
}
When the user runs this Remote Server application.
Figure 1: Server Application
Remote Client
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace remoteclient
{
public partial class Form1 : Form
{
//TcpChannel ch = new TcpChannel();
remoteclass.xx obj = new remoteclass.xx();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, System.EventArgs e)
{
//ChannelServices.RegisterChannel(ch);
obj = (remoteclass.xx)Activator.GetObject(typeof(remoteclass.xx),
"tcp://localhost:8085/rahul");
int x = Int32.Parse(textBox1.Text);
int y = Int32.Parse(textBox2.Text);
textBox3.Text = (obj.sum(x, y)).ToString();
}
}
}
When the user runs the application.
Figure 2: Client Application