public void StopListen()
 {
     if (mi_Service != null)
     {
         RemotingServices.Unmarshal(mi_Service);
     }
     if (mi_Transfer != null)
     {
         RemotingServices.Disconnect(mi_Transfer);
     }
     if (mi_Channel != null)
     {
         ChannelServices.UnregisterChannel(mi_Channel);
     }
     mi_Service  = null;
     mi_Transfer = null;
     mi_Channel  = null;
 }
 public void StartListen()
 {
     StopListen(); // if there is any channel still open --> close it
     try
     {
         int s32_Port = int.Parse(textBoxPort.Text);
         mi_Channel = new TcpChannel(s32_Port);
         ChannelServices.RegisterChannel(mi_Channel, false);
         mi_Transfer = new Remotе.cTransfer();
         mi_Service  = RemotingServices.Marshal(mi_Transfer, "TestService");
         mi_Transfer.ev_SlaveCall +=
             new Remotе.cTransfer.del_SlaveCall(OnMasterEvent);
     }
     catch (Exception Ex)
     {
         MessageBox.Show(this, "Error starting listening:\n" +
                         Ex.Message, "Slave");
         checkBoxListen.Checked = false; // calls StopListen()
     }
 }
        private void btnSend_Click(object sender, EventArgs e)
        {
            Remotе.kAction k_Action = new Remotе.kAction();
            k_Action.s_Command  = textBoxMessage.Text;
            k_Action.s_Computer = Environment.MachineName;
            this.Cursor         = Cursors.WaitCursor;
            string s_URL = string.Format("tcp://{0}:{1}/TestService", textBoxComputer.Text, textBoxPort.Text);

            try
            {
                mi_Transfer = (Remotе.cTransfer)Activator.GetObject(typeof(Remotе.cTransfer), s_URL);
                Remotе.kResponse k_Response = mi_Transfer.CallSlave(k_Action);
                textBoxAnswer.Text = "Answer from Slave:\r\n" + k_Response.s_Result;
            }
            catch (Exception Ex)
            {
                MessageBox.Show(this, "Error sending message to Slave:\n" +
                                Ex.Message, "Master Error");
            }

            this.Cursor = Cursors.Arrow;
            mi_EraseTextTimer.Start();
        }