[Mono-dev] TypeLoadException when remoting from Windows

Jacob Ilsø Christensen jacobilsoe at gmail.com
Thu Feb 8 10:59:30 EST 2007


Hi.

Ok, I finally managed to reproduce the issue. Attached are some test
files. The file named compile shows how to compile the stuff.

So, first launch TestImpl.exe and then Test.exe. What I experienced is
the following:

MS .NET -> MS.NET works
MS .NET -> Mono does not work (throws the exception I wrote about earlier)
Mono -> MS.NET works
Mono -> Mono works

If I comment out the event handler line in Test.cs all four cases
work. Can someone confirm this issue?

Thanks,
Jacob

On 2/8/07, Robert Jordan <robertj at gmx.net> wrote:
> Jacob Ilsø Christensen wrote:
> > On 2/8/07, Robert Jordan <robertj at gmx.net> wrote:
> >> Jacob Ilsø Christensen wrote:
> >>> On 2/7/07, "Andrés G. Aragoneses [ knocte ]" <knocte at gmail.com> wrote:
> >>>> Jacob Ilsø Christensen escribió:
> >>>>> Hi.
> >>>>>
> >>>>> I am trying to do a remote call from Windows to an application running
> >>>>> on Linux under Mono 1.2.2.1. When I try it, I get the exception below.
> >>>>> There is not much info as to what might be wrong. Is it a missing
> >>>>> assembly?
> >>>> Does it work with MS.NET vs MS.NET? If yes, then it's a bug in Mono. If
> >>>> not, it probably gives you a better error message and that could be a
> >>>> bug in Mono too because of the lack of info and you should report it.
> >>> Yep, it works perfectly from MS.NET to MS.NET. I filed a bug report
> >>> that mono should report a more meaningful error message
> >>> (http://bugzilla.ximian.com/show_bug.cgi?id=80761).
> >> Please attach a test case to this bug entry.
> >
> > I would like to, but it would be much less time consuming for me if
> > the TypeLoadException provided a better error message. That way I
> > could easier pinpoint the issue and write a test case.
>
> Hint: it's a MS corlib type that doesn't exist in Mono, maybe
> one of these: System.RuntimeType (the underlying type of
> System.Type => this basically means that you can't remote
> System.Type between the runtimes) or another System.Runtime* type,
> mostly used for Method/Property/Event/FieldInfo.
>
> Robert
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
-------------- next part --------------
gmcs ITest.cs /t:library
gmcs Test.cs /r:ITest.dll
gmcs TestImpl.cs /r:ITest.dll /r:System.Runtime.Remoting
-------------- next part --------------
public delegate void TestDelegate(object sender, System.EventArgs eventArgs);

public interface ITest
{
	void Test();
	event TestDelegate TestEvent;	
}
-------------- next part --------------
using System;
using System.IO;

public class Test
{
	public static void Main()
	{
		string service = "tcp://192.168.0.133:5000/";
		ITest test = (ITest)Activator.GetObject(typeof(ITest), service + "Test");		
		test.Test();
		test.TestEvent += new TestDelegate(TestHandler); // This causes problems
	}

	public static void TestHandler(object sender, EventArgs eventArgs)
	{
	}
}
-------------- next part --------------
using System;
using System.Collections;
using System.IO;
using System.Threading;
using System.Runtime.Remoting;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

public class MyTest : MarshalByRefObject, ITest
{
	public void Test()
	{
		Console.Out.WriteLine("Test");
	}

	public event TestDelegate TestEvent;
}

public class TestImpl
{	
	public static void Main()
	{
		BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
		provider.TypeFilterLevel = TypeFilterLevel.Full;

		IDictionary props = new Hashtable();
		props["port"] = 5000;
		props["name"] = "originalTcpChannel";

		TcpChannel channel = new TcpChannel(props, null, provider);
		ChannelServices.RegisterChannel(channel, false);

		RemotingServices.Marshal(new MyTest(), "Test");

		System.Console.WriteLine("Ready...");
		System.Console.ReadLine();		
	}
}















More information about the Mono-devel-list mailing list