[Mono-list] A couple of Remoting Questions

Lluis Sanchez lluis@ximian.com
Tue, 11 May 2004 12:19:00 +0200


On dl, 2004-05-10 at 14:20, Jonathan Stowe wrote:
> I have been playing around with remoting and a couple of things have
> come up
> 
> I am trying a test based in the example in MS SDK:
> 
> Client:
> 
> using System;
> using System.Runtime.Remoting;
> using System.Runtime.Remoting.Channels;
> using System.Runtime.Remoting.Channels.Http;
> 
> namespace RemotingTest
> {
>   public class Client
>   {
>     public static void Main(string [] args)
>     {
>       RemotingConfiguration.Configure("remoting.config");
>       HelloServer obj =
> (HelloServer)Activator.GetObject(typeof(RemotingTest.HelloServer),
> "http://localhost:8085/Hello");
>       if (obj == null)
>       {
>          System.Console.WriteLine("Could not locate server");
>       }
>       else
>       {
>          string name = "blah";
>          if ( args.Length > 0 )
>          {
>             name = args[0];
>          }
>          Console.WriteLine(obj.Hello(name));
>       }
>     }
>   }
> }
> 
> 
> Server:
> 
> using System;
> using System.Runtime.Remoting;
> using System.Runtime.Remoting.Channels;
> using System.Runtime.Remoting.Channels.Http;
> 
> namespace RemotingTest
> {
>   public class Server
>   {
> 
>     public static void Main(string [] args) {
> 
>       HttpChannel chan = new HttpChannel(8085);
>       ChannelServices.RegisterChannel(chan);
>      
> RemotingConfiguration.RegisterWellKnownServiceType(Type.GetType("RemotingTest.HelloServer,Object"), "Hello", WellKnownObjectMode.SingleCall);
>       System.Console.WriteLine("Hit <enter> to exit...");
>       System.Console.ReadLine();
>     }
>   }
> }
> 
> Test Class:
> 
> using System;
> using System.Runtime.Remoting;
> using System.Runtime.Remoting.Channels;
> using System.Runtime.Remoting.Channels.Http;
> using System.Reflection;
> 
> namespace RemotingTest
> {
>   public class HelloServer : MarshalByRefObject
>   {
> 
>     public HelloServer()
>     {
>       Console.WriteLine(this.ToString() + " activated");
>     }
> 
>     public String Hello(String name)
>     {
>       Console.WriteLine("HelloServer.Hello : {0}", name);
>       return String.Format("Hi there {0}", name);
>     }
>   }
> }
> 
> 
> Firstly, unlike using the MS.NET SDK it will not work unless one loads
> the configuration like:
> 
> <configuration>
>    <system.runtime.remoting>
>       <application>
>          <client>
>          </client>
>          <channels>
>             <channel
>                ref="http"
>                port="0"
>             />
>          </channels>
>       </application>
>    </system.runtime.remoting>
> </configuration>
> 
> I was wondering why the difference in behaviour

This looks like a bug. Can you please file a bug report in
bugzilla.ximian.com (including the test case)?

>  - does windows have the
> http channels already registered in some default configuration which
> mono doesn't have or is there a difference in behaviour of
> ChannelServices.RegisterChannel() in the mono library - I notice that
> the registered channels are stored in a static array in the
> ChannelServices class so it strikes me that another program is not going
> to have access to this - or am I missing something here?  It would be
> nice to have an example that worked the same with both mono and the MS
> SDK.
> 
> Secondly I am getting weird intermittent behaviour from both server and
> client code - every once in a while I am getting:
> 
> ** (process:5787): ERROR (recursed) **: file class.c: line 1272
> (mono_class_init): assertion failed: (class)
> aborting...
> 
> from the client code, which appears to hang afterwards - the server
> however behaves as expected.  I am unable to reproduce this at will
> however.
> 
> I also am occasionally getting:
> 
>  
> ** (server.exe:12805): WARNING **: : unref on 38 called when ref was
> already 0
>  
> >From the server after the remote method has been called - again this is
> intermittent and not reproducible at will.

Can you also file a bug for this? Thanks.

> 
> It also appears that neither the client or the server are cleaning up
> properly as there are parentless processes left behind (which I take to
> be threads - but I never found out how to distinguish processes and
> threads with 'ps' on Linux).  This is with Beta 1 on Mandrake 9.2 x86.

This may be related to the previous warnings.

> 
> Finally does anyone know of any documentation regarding the SOAP
> messages involved in http remoting or am I going to have to use a proxy
> to dump the exchanges?
> 
> Thanks.
> 
> 
> _______________________________________________
> Mono-list maillist  -  Mono-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list