Our applicaiton must register itself as a client for our remotable object and invoke the object as if it were part of the clients app domain. Because we will register the remotable object the .NET remoting system will intercept all calls and forward them to the remote object and then recieve the results.
Create another console application project called RemotingClient add a reference to our RemotableType class and add the following class:
using System;
using System.Runtime.Remoting;
public class Client
{
public static void Main()
{
RemotingConfiguration.Configure("RemotingClient.exe.config");
RemotableType remoteObject = new RemotableType();
Console.WriteLine( remoteObject.RemotableMethod() );
Console.ReadLine();
}
}
NOTE: We are using a reference to our remotable type class here and hence copying the assembly to the client because we need the type metadata. When the types methods are being invoked it will be the code on the remote server that is executed NOT the local code. A way round this is to use abstact classes or interfaces and deploy these on the client rather than the full implemented code. A simple example of this is included in the download .zip file.
Add an app.config file to the project and ensure the following entries are present:
<configuration>
<system.runtime.remoting>
<application>
<client>
<wellknown
type="RemotableType, RemotableType"
url="http://localhost:8989/RemotableType.rem"
/>
</client>
</application>
</system.runtime.remoting>
</configuration>
This is registering our "RemotableType" class with .NET's remoting system. When a RemotableType is invoked the system will forward the calls onto the remote object.
Comments