Members

Technology Zones

IBM Learning Center

Articles

Hosted By

MaximumASP

Info

Rated
Read 39,555 times

Contents

Related Categories

Using Interfaces In .NET Remoting - Implementation & Server Object

David Talbot

Implementation & Server Object

Now that we have defined the interfaces we plan on using, we need to create an implementation of these interfaces that does something. In a real project, you would create another shared library with you implementation to aid code reuse and keep your project modular. In this simple example, we'll just create a console application that provides an inline implementation of our interfaces.

Go to File->New->Project and choose C# Console application, then click on OK.

Since we are making use of the System.Runtime.Remoting namespace, we will need to add a referance to the correct DLL. This is done by clicking Project->Add Referance, click on the ".NET" tab and chose System.Runtime.Remoting.dll.

We also need to add a referance to the interfaces DLL we created in Step 1. This is done by choosing Project->Add Referance, click "Browse" and choose the .DLL file in the bin/Debug directory of the RemotingExampleInterfaces project we created in Step 1.

public class Resume : MarshalByRefObject, IResume
public class RemotingExampleService : MarshalByRefObject, IRemotingExampleService

Take a look at these two class declarations. Each is a subclass of the MarshalByRefObject type. This is very important to the use of these objects in .NET remoting. Also, each of these objects is an implementation of the IResume and IRemotingExampleService interfaces we created in Step 1. Note that in these classes are methods that match the names of the methods we defined in our interface.

If you have questions about the TcpServerChannel or related topics, check out my article entitled, "Introduction to .NET Remoting" hosted on this site.

The complete code for the object is below.

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemotingExampleInterfaces;
using System.Runtime.Serialization;

namespace RemotingInterfaceServer
{
  public class EntryPoint
  {
    public static void Main(string[] args)
    {
      TcpServerChannel channel = new TcpServerChannel(9988);
      ChannelServices.RegisterChannel(channel);
      RemotingConfiguration.RegisterWellKnownServiceType(
          typeof(RemotingExampleService),
          "RemotingExampleService", WellKnownObjectMode.SingleCall);
      System.Console.WriteLine("Press Any Key");
      System.Console.ReadLine();
    }
  }

  public class RemotingExampleService : MarshalByRefObject, IRemotingExampleService
  {
    public RemotingExampleService() {}

    public IResume GetResume()
    {
      Resume resume = new Resume();
      resume.FirstName="David";
      resume.LastName="Talbot";
      resume.Title="Senior Software Architect";
      resume.Body="Did some cool stuff";
      return (IResume)resume;
    }

    public String GetFormattedResume()
    {
      return GetResume().GetFormattedResume();
    }
  }

  [Serializable]
  public class Resume : MarshalByRefObject, IResume
  {
    public String FirstName, LastName, Body, Title;

    public String GetFormattedResume()
    {
      System.Text.StringBuilder sb = new System.Text.StringBuilder();
      sb.Append("*"+ GetFormattedName() +"*\n");
      sb.Append("--"+ Title +"--\n");
      sb.Append("--------------------------\n");
      sb.Append(Body);
      return sb.ToString();
    }

    public String GetFormattedName()
    {
      return FirstName +" "+ LastName;
    }
  }//END OF Resume Object
}

Compile this program by going to Build->Build and note the location of the generated executable file found in the /bin/debug subdirectory of this project.

David Talbot is an experienced Software Architect with a diverse background including creating network applicances, working with television set top boxes, building Billing/CRM systems, Web Portals and more. He has also provided technical guidance in different capacities on two C# books. David is currently finishing up work on a real estate analytics application in C# for Pathfinder Technologies and seeking additional contract or permenet work.

Comments

  • Posted by PaulLeo on 24 May 2004

    Hi,

    I too have the same problem. Did you find any solution for that?

    Regards
    Paul

  • re:

    Posted by asafsn on 28 May 2003

    Thanks again but I'm sorry to say I'm still not even in the stage you described in your reply of using a method of the remote object. I'm getting this exception in the following line:

    -------------...

  • Posted by James Crowley on 28 May 2003

    You may well find that is due to the use of the "Optional" keyword in VB.NET with a default value, rather than overloading the methods. Default values are not supported in C#. (... there are a few cav...

  • Re: C# and VB remoting

    Posted by asafsn on 28 May 2003

    thanks for the reply.

    Its time for me to be more specific.

    I wrote a server client application in C# using remoting
    and it worked. Then I replaced the client with another
    clients written in...

  • Posted by James Crowley on 28 May 2003

    I can certainly say that it is possible - the great thing with .NET is its ability to not care what .NET language you write any components in.... but I haven't got any examples, I'm afraid.