Click to See Complete Forum and Search --> : remoting ?


apfelsaft
January 27th, 2004, 10:54 AM
hi i have some problems to realize remoting in C#
i have an application A on pc1 and i have a application B on pc2
app A sould start app B (but this is not so important for the beginning)
app B should sometimes performes the function write(string text) (<- this should be a function from the marshaled class, isn't it?)
then in app B this text should be added in a textbox

i tried this the whole day but i wont get it work
i also tried to realize it only on one machine first and starting A and B manuell, but i get it work neither

can someone can help plz how to realize this?

apfelsaft
January 28th, 2004, 04:04 PM
hi again
i get it almost but i still have a problem
i dont know how how to access in the remoteclass the richtextbox in the dialog
i tried a few ways but i dont get it
perhaps i realized the whole thing in the wrong way?!
here is my code - it would be nice if someone can take it look at it

this is my shared dll:

namespace LoggerLib
{
public interface ILogger
{
void Write(string message);
}
}




my remote object (used in the logger (app B)):

namespace Logger
{
public class Logger : MarshalByRefObject, ILogger
{
public Logger()
{
}

public RichTextBox rtb = new RichTextBox();

public void SetRTB(ref RichTextBox rtb)
{
this.rtb = rtb;
}

public void Write(string message)
{
rtb.Text+=message+"\n";
}
}
}



the dialog of the logger:

namespace Logger
public class DlgLogger : System.Windows.Forms.Form
{
private System.Windows.Forms.RichTextBox richTextBox1;
private System.ComponentModel.Container components = null;

public DlgLogger()
{
InitializeComponent();

TcpServerChannel channel = new TcpServerChannel(1234);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType
(typeof(Logger), "logging.rem", WellKnownObjectMode.SingleCall);
logger = new Logger();
logger.SetRTB(ref this.richTextBox1);
}

Logger logger;

... generated code ...

public void AddRichText(string text)
{
this.richTextBox1.Text += text+"\n";
}
}
}




and my app A that "sends" the log text:

namespace App
public class DlgApp : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.ComponentModel.Container components = null;

public DlgApp()
{
InitializeComponent();

ilogger = (ILogger) Activator.GetObject(typeof(ILogger), "tcp://localhost:1234/logging.rem");
}

ILogger ilogger;

... some code ...

private void button1_Click(object sender, System.EventArgs e)
{
ilogger.Write("Test");
}
}