Remote Controlled Windows Application






3.58/5 (14 votes)
Jul 2, 2004
1 min read

63959

2726
How to let your Windows application be remote controlled
Introduction
This small Windows application shows how to make your application or part of it be controlled from remote machines. The demo application just can flip an image and this is also what several remote clients can do.
Background
Since most of the samples I found on Internet about remoting do let the .Net
runtime create the marshalled object in the hidden background,
I had to find a way to create and marshal my objects
programmatically to provide
it with a reference to my applications interface.
This is just what my application demonstrates.
Using the code
The VS-Solution 'MyRemoteSampleApp.sln' holds the 3 projects: the application, the client and the remotable class.
- MyServerApplication
- MyClient
- MyRemoteInterface
After starting 'MyServerApplication.exe' you can start as many clients 'MyClient.exe' as you like, which all connect to the same 'MyService' object.
Points of Interest
Create and marshal the object on server side in the applications 'Main()
':
TcpChannel channel = new TcpChannel(8080);
ChannelServices.RegisterChannel(channel);
// Create a single marshalled object
MyServiceClass remService = new MyServiceClass();
ObjRef obj = RemotingServices.Marshal(remService,"TcpService");
// Create appllications MainForm
MainAppForm frmMain = new MainAppForm();
// provide the marshalled object with a reference to the Applications interface
remService.theMainForm = ( IAppRemote) frmMain;
// start application
Application.Run(frmMain);
Connect to the remote object on client side:
// Interface reference
IMyService remServive = null;
...
...
// Get a TCP channel and register required service
ChannelServices.RegisterChannel(new TcpChannel());
WellKnownClientTypeEntry remotetype = new WellKnownClientTypeEntry(
typeof(MyServiceClass),"tcp://localhost:8080/TcpService");
RemotingConfiguration.RegisterWellKnownClientType(remotetype);
// instantiates the proxy
remServive = new MyServiceClass();