Click here to Skip to main content
11,577,643 members (53,996 online)
Click here to Skip to main content

Inter-process communication via Remoting

, 14 Oct 2007 CPOL 27.4K 721 34
Rate this:
Please Sign up or sign in to vote.
Inter-process communication by using Remoting.

Introduction

Different technologies can be used for communication with a client and a server application. We can program our applications by using sockets, or we can use some helper classes from the System.Net namespace that makes it easier to deal with protocols, IP addresses, and port numbers. .NET applications work within an application domain. An application domain can be seen as a subprocess within a process. Traditionally, processes are used as an isolation boundary. An application running in one process cannot access and destroy memory in another process. Cross-process communication is needed for applications to communicate with each other. With .NET, the application domain is the new safety boundary inside a process, because the MSIL code is type-safe and verifiable.

Screenshot - a3.jpg

Remoting communication library

public class DataEventRepeator:MarshalByRefObject
{
   public event DataReceiveHandler ReceiveData;
   public void OnReceiveData(object sender, ReceiveDataEventArgs e)
   {
       if (this.ReceiveData!=null)
       {
           ReceiveData(this, e);
       }
   }
   
}
public class DataEventRepeators : List<DataEventRepeator>
{ }

DataServer communication library

public class DataServer:MarshalByRefObject ,IDataReceiver
{
    public event DataReceiveHandler ReceiveData;
    private static DataEventRepeators reapters;
    public static DataEventRepeators Reapters
    {
        get
        {
            if (reapters==null)
            {
                reapters = new DataEventRepeators();
            }
            return DataServer.reapters; 
        }
    }
    public void SendData(string rec_data)
    {
        ReceiveDataEventArgs e = new ReceiveDataEventArgs();
        e.Data = rec_data;
        try
        {
            OnReceiveData(e);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
      
    }
    private void OnReceiveData(ReceiveDataEventArgs e)
    {
        if (ReceiveData!=null)
        {
            ReceiveData(null, e);
        }
    }
    public void AddEventRepeater(DataEventRepeator repeater)
    {
        Reapters.Add(repeater);
        this.ReceiveData += new DataReceiveHandler(repeater.OnReceiveData);
      
    }
   
}

Initial communication when first starting application via ProcessComLib.dll

public void InitCommunication()
{
    BinaryServerFormatterSinkProvider provider = 
            new BinaryServerFormatterSinkProvider();
    provider.TypeFilterLevel = TypeFilterLevel.Full;
    IDictionary props = new Hashtable();
    props["port"] = 0;
    //Reg Tcp channel 
    TcpChannel chn = new TcpChannel(props, null, provider);
    ChannelServices.RegisterChannel(chn, false);
    repeater.ReceiveData += new DataReceiveHandler(repeater_ReceiveData);
    try
    {
        IDictionary prop = new Hashtable();
        prop["port"] = 2007;
        TcpChannel chnn = new TcpChannel(prop,null,provider);
        ChannelServices.UnregisterChannel(chn);
        ChannelServices.RegisterChannel(chnn, false);
        RemotingConfiguration.RegisterWellKnownServiceType
        (
        typeof(DataComServer.DataServer),
        "DataServer.rem",
        WellKnownObjectMode.Singleton
        );
     
    }
    catch
    {
        //tcp port has been registered
    }
    Connection();
}
private void Connection()
{
    //connect server
    dataServer = (IDataReceiver)Activator.GetObject(typeof(IDataReceiver), 
                  "tcp://localhost:2007/DataServer.rem");
    //add repter to EventRepeaterList
    dataServer.AddEventRepeater(repeater);
}

OK. That is all. More details can be found in the downloadable source code.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

miotan
Web Developer
China China
No Biography provided

You may also be interested in...

Comments and Discussions

 
GeneralNot working after 5 minuts Pin
LeMoustique4-Jun-10 20:24
memberLeMoustique4-Jun-10 20:24 
GeneralInteresting code, decent example, does what it's supposed to... Pin
Roger Venable15-Jun-09 5:37
memberRoger Venable15-Jun-09 5:37 
GeneralGood article Pin
Golllli11-May-09 7:30
memberGolllli11-May-09 7:30 
Generalre:zip file does not open Pin
SimHook15-Oct-07 14:53
memberSimHook15-Oct-07 14:53 
QuestionAttached zip not working [modified] Pin
Jon_Nichols15-Oct-07 6:54
memberJon_Nichols15-Oct-07 6:54 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150603.1 | Last Updated 14 Oct 2007
Article Copyright 2007 by miotan
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid