VisualwebGUI 6.0.4, Framework 2.0 working with Linux + Mono.

View: New views
7 Messages — Rating Filter:   Alert me  

VisualwebGUI 6.0.4, Framework 2.0 working with Linux + Mono.

by linuxfreak@uy :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I don't know if it's me but I could not find any successfull story about VisualwebGUI and Mono out there so I decided to start from scratch believing in the VisualwebGUI guys that claimed that VisualwebGUI working with mono is a sure thing, well after all they were right!!!

Working test environment:

OpenSuSe 11.0 + Apache2 (2.2.8-28.1) + mod_mono module (1.9-20.1) + mono (1.9.1-6.1)

Problems found:

mod_module as it works after installation using "mod-mono-server" won't work at all (I have more details but is too large to put it here)

Basically the problem is that VisualwebGUI uses .NET framework 2.0 assemblies that are not loaded when needed.

Workaround:

1. Using xsp2 directly works perfectly fine.
2. Some minor modification is needed in the Web.config generated by VisualwebGUI.

I've already put more detailed info in an article at VisualwebGUI site, "Forum/How to's..." but it's pending for approval.



Re: VisualwebGUI 6.0.4, Framework 2.0 working with Linux + Mono.

by Stephanus van Staden :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


We have been using it in SLES 10 and mono 1.9 for quite a while now.  Only the ASP.net part and not the Silverlight stuff...  not yet.

There is a small problem with 64bit SLES 10 SP that we are trying to solve...  Have not tried it on the Mono 2.0 preview yet.

see my posts to VWG about the 64bit problem here VWG 6.1 on SLES 64 bit and Mono 1.9.1 give Invalid IL code
Maybe you have a solution for it..

Maybe you can post your WebGUI Howto here on the mono forum?  (If thats allowed)

Re: VisualwebGUI 6.0.4, Framework 2.0 working with Linux + Mono.

by linuxfreak@uy :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Stephanus van Staden wrote:
We have been using it in SLES 10 and mono 1.9 for quite a while now.  Only the ASP.net part and not the Silverlight stuff...  not yet.

There is a small problem with 64bit SLES 10 SP that we are trying to solve...  Have not tried it on the Mono 2.0 preview yet.

see my posts to VWG about the 64bit problem here VWG 6.1 on SLES 64 bit and Mono 1.9.1 give Invalid IL code
Maybe you have a solution for it..

Maybe you can post your WebGUI Howto here on the mono forum?  (If thats allowed)
Stephanus, finally a successfull story.

I want to put all the useful information I have, what I found and some workaround however I'm not quite satisfied with it and will try to find maybe another way to make things work.

I will try to do further tests in this matter and I will take a look at the problem you just described perhaps I could find something.

Finally I've tested once or twice VWG 6.1.2 on Linux and found that it's generating an exception at Gizmox.WebGUI.Server assembly but since it's currently an unstable release I will wait til it's stable. At last Silverlight it's another different story, I've also tested very little and I couldn't get it work in any environment.


My environment Configuration:

#Server base

OpenSuSe 11.0 (32 bits) + Apache2 (2.2.8-28.1) + Mono (1.9.1-6.1) + mod_mono apache2 module (1.9-20.1)

#Development base

Windows XP , Visual Studio 2005, VisualwebGUI 6.0.4 for framework 2.0

Problem found (some background):

Originally the apache2 mod_mono module uses "mod-mono-server" (/usr/bin/mod-mono-server) which is a script that finally calls THE "mod-mono-server.exe" that is the actual interpreter of all the ASP.NET stuff. There is also a version 2 of the "mod-mono-server" called "mod-mono-server2". Finally there is two more scripts, "xsp" and "xsp2" which both are a Mono ASP.NET Web Server implementation. Basically the problem is that with "mod-mono-server" or "xsp" a VisualwebGUI application won't work because none of the "servers" can't load assemblies for the .NET framework 2.0 but is only loads assemblies for the .NET framework 1.0. There is also another problem, the "mod-mono-server2" can load the framework 2.0 and works fine with any regular ASP.NET but not with VisualwebGUI. But there is a light at the end of the tunnel, according to my tests using the "xsp2" a VisualwebGUI runs without problems.

Deploy :

This a basic solution and at first glance not recomended for a production server but it's a start.

1. not use apache2 + mono to use with VisualwebGUI

2. use XSP2 to run the VisualWebGUI app

    See documentation but a simple example would be:

    /usr/bin/xsp2 --port 80 --root /srv/www/htdocs

    Copy all the application needed files to /srv/www/htdocs

    and simply http://server/Form1.wgx 

3. Modification to "Web.config"

   To make it work you must make a simple change in the web.config file

  Original setting: <Application Code="Form1" Type="WebGUIApplication1.Form1, 'WebGUIApplication1'"/>

  Modified setting:  <Application Code="Form1" Type="WebGUIApplication1.Form1, WebGUIApplication1"/>

  You must also strip the ' ' from the name of the project/solution in this case, 'WebGUIApplication1'.


  NOTE1: This modification works fine also with IIS or Visual Studio dev web server.

  NOTE2: I could noticed that apparently this modification is not needed when using Visual Studio 2008.


4. Web Explorers tests

    Works fine for me with Firefox 3.0 (from KDE 3 and Windows) and with IE7 (notably slower than the  
    Firefox at least with VisualWebGUI, not trying to start any discussion about this matter... :) )


Re: VisualwebGUI 6.0.4, Framework 2.0 working with Linux + Mono.

by Stephanus van Staden :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


I did some further testing and tried to see if my 64bit issue will go away on a another platform and another version of Mono.  I think I must mention that this work with Microsoft .Net 2.0
I'm now trying to find where the problem lies - Mono or WebGUI

So I tried Opensuse 10.2 (32 bit x86)  - Mono JIT compiler version 2.1 - Latest VisualWebGUI 6.1.2

I now even get the error on 32 bit - the same problem - so I disassemled the function that give the problem and it seems like the Mono does not like IL_0006 (see below).  I do not have any experience in the IL stuff - but it seems like something to do with the way an if/switch statement is compiled and then obfuscated  (I'm just guessing...)
Maybe it is obvious to someone else who knows the IL stuff by heart.

.method assembly hidebysig specialname static
        bool  get_CacheOK() cil managed
{
  // Code size       31 (0x1f)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  nop
  IL_0002:  ldc.i4.1
  IL_0003:  br.s       IL_0012
  IL_0005:  nop
  IL_0006:  brfalse.s  IL_000b
  IL_0008:  nop
  IL_0009:  br.s       IL_0018
  IL_000b:  ldc.i4.1
  IL_000c:  brfalse.s  IL_0015
  IL_000e:  br.s       IL_0000
  IL_0010:  br.s       IL_0014
  IL_0012:  br.s       IL_0005
  IL_0014:  nop
  IL_0015:  ldc.i4.0
  IL_0016:  brtrue.s   IL_0002
  IL_0018:  nop
  IL_0019:  ldsfld     bool Gizmox.WebGUI.Server.Cache::'12AA0'
  IL_001e:  ret
} // end of method Cache::get_CacheOK

Re: VisualwebGUI 6.0.4, Framework 2.0 working with Linux + Mono.

by Alejandro Serrano :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

As far as I can see, the method just jumps a lot before doing something
useful, and then it just loads an static field. I can't find a place
where things can go wrong, maybe some static constructor is called
before getting the value of the static field.

I hope it helps

El sáb, 09-08-2008 a las 02:10 -0700, Stephanus van Staden escribió:

>
> I did some further testing and tried to see if my 64bit issue will go away
> on a another platform and another version of Mono.  I think I must mention
> that this work with Microsoft .Net 2.0
> I'm now trying to find where the problem lies - Mono or WebGUI
>
> So I tried Opensuse 10.2 (32 bit x86)  - Mono JIT compiler version 2.1 -
> Latest VisualWebGUI 6.1.2
>
> I now even get the error on 32 bit - the same problem - so I disassemled the
> function that give the problem and it seems like the Mono does not like
> IL_0006 (see below).  I do not have any experience in the IL stuff - but it
> seems like something to do with the way an if/switch statement is compiled
> and then obfuscated  (I'm just guessing...)
> Maybe it is obvious to someone else who knows the IL stuff by heart.
>
> .method assembly hidebysig specialname static
>         bool  get_CacheOK() cil managed
> {
>   // Code size       31 (0x1f)
>   .maxstack  8
>   IL_0000:  nop
=> 'nop' mean 'no operation', it does nothing
>   IL_0001:  nop
>   IL_0002:  ldc.i4.1
=> load a 1 into memory
>   IL_0003:  br.s       IL_0012
=> jump to 12
>   IL_0005:  nop
>   IL_0006:  brfalse.s  IL_000b
=> jump if false, but we have a 1, so continue
>   IL_0008:  nop
>   IL_0009:  br.s       IL_0018
=> jump to 18
>   IL_000b:  ldc.i4.1
>   IL_000c:  brfalse.s  IL_0015
>   IL_000e:  br.s       IL_0000
>   IL_0010:  br.s       IL_0014
>   IL_0012:  br.s       IL_0005
=> jump to 5
>   IL_0014:  nop
>   IL_0015:  ldc.i4.0
>   IL_0016:  brtrue.s   IL_0002
>   IL_0018:  nop
>   IL_0019:  ldsfld     bool Gizmox.WebGUI.Server.Cache::'12AA0'
=> do actual work: load a field
>   IL_001e:  ret
=> return the field we just loaded into memory
> } // end of method Cache::get_CacheOK


_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@...
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Re: VisualwebGUI 6.0.4, Framework 2.0 working with Linux + Mono.

by linuxfreak@uy :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Well I have something here, with the stack trace you posted the last time I disassembled (a few days ago) 'Gizmox.WebGUI.Server' (version 6.0.4, 6.1 and 6.1.2 for FRAMEWORK 2.0) and looked what the method (is a property actually) was all about and all I could see it's a simple property which returns a Boolean nothing more so I discarded it as the source of the exception you are experiencing. Now looking your IL code it tooked me a few seconds to realize that your version of "get_ChacheOK" is not like any I saw before so I went directly to disassemble the 'Gizmox.WebGUI.Server' for FRAMEWORK 3.5, look for 'get_CacheOk' and bingo. Now I was at the right place to start and I don't know if you already mentioned it but I didn't know that you were using VWG for framework 3.5.  

I'm quite sure that there's something suspicious at the 'get_CacheOK' (assembly for framework 3.5) , first it's full of 'nop' operations (more likely operation from a patched assembly that from a compiled/built assembly) then it's also full of 'br.s' operations and finally at least one of the 'brfalse.s' I think could throw an exception (the famous invalid IL code exception, IL_0006:  brfalse.s  IL_000b).

#
#get_CacheOK (IL code for the other versions of VWG for framework 2.0)
#
# Only one operation here, returning a bool variable value.
#

.method /*06000016*/ assembly hidebysig specialname static
          bool  get_CacheOK() cil managed
  // SIG: 00 00 02
  {
    // Method begins at RVA 0x22ec
    // Code size       6 (0x6)
    .maxstack  8
    IL_0000:  /* 7E   | (04)00000E       */ ldsfld     bool Gizmox.WebGUI.Server.Cache/*02000006*/::'60AAA' /* 0400000E */
    IL_0005:  /* 2A   |                  */ ret
  } // end of method Cache::get_CacheOK


Notice that the the last two operations from the IL code for the 'get_CacheOK' of the assembly for framework 3.5 (what Stephanus sent) are the same operations I just put in here which are the RETURN of a boolean value from an existing BOOLEAN variable therefore the other operations seems to be void and they do nothing meaningful.

If you want you can use (in Windows) besides 'ildasm' or 'IDA', an interesting application that maybe you already know called 'Reflector' (sort of decompiler which uses reflection, etc.) and if you try to view the 'get_CacheOK' property it throws an exception and that for me is the verification that I needed to affirm that that code is bugged or something.

I will report this to the VWG guys to know what they can tell us.


Stephanus van Staden wrote:
I did some further testing and tried to see if my 64bit issue will go away on a another platform and another version of Mono.  I think I must mention that this work with Microsoft .Net 2.0
I'm now trying to find where the problem lies - Mono or WebGUI

So I tried Opensuse 10.2 (32 bit x86)  - Mono JIT compiler version 2.1 - Latest VisualWebGUI 6.1.2

I now even get the error on 32 bit - the same problem - so I disassemled the function that give the problem and it seems like the Mono does not like IL_0006 (see below).  I do not have any experience in the IL stuff - but it seems like something to do with the way an if/switch statement is compiled and then obfuscated  (I'm just guessing...)
Maybe it is obvious to someone else who knows the IL stuff by heart.

.method assembly hidebysig specialname static
        bool  get_CacheOK() cil managed
{
  // Code size       31 (0x1f)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  nop
  IL_0002:  ldc.i4.1
  IL_0003:  br.s       IL_0012
  IL_0005:  nop
  IL_0006:  brfalse.s  IL_000b
  IL_0008:  nop
  IL_0009:  br.s       IL_0018
  IL_000b:  ldc.i4.1
  IL_000c:  brfalse.s  IL_0015
  IL_000e:  br.s       IL_0000
  IL_0010:  br.s       IL_0014
  IL_0012:  br.s       IL_0005
  IL_0014:  nop
  IL_0015:  ldc.i4.0
  IL_0016:  brtrue.s   IL_0002
  IL_0018:  nop
  IL_0019:  ldsfld     bool Gizmox.WebGUI.Server.Cache::'12AA0'
  IL_001e:  ret
} // end of method Cache::get_CacheOK

Re: VisualwebGUI 6.0.4, Framework 2.0 working with Linux + Mono.

by linuxfreak@uy :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Me again,

I just remembered that Stephanus already posted this error at VWG forum and they replied that this issue is konwn and will be fixed for version 6.2 (see, http://support.visualwebgui.com/issue/ViewIssue.aspx?id=2318) . This probably means that the current unstable version 6.1.2 will become 6.2 when it become stable or the '6.2' is just a typo error :).



Well I have something here, with the stack trace you posted the last time I disassembled (a few days ago) 'Gizmox.WebGUI.Server' (version 6.0.4, 6.1 and 6.1.2 for FRAMEWORK 2.0) and looked what the method (is a property actually) was all about and all I could see it's a simple property which returns a Boolean nothing more so I discarded it as the source of the exception you are experiencing. Now looking your IL code it tooked me a few seconds to realize that your version of "get_ChacheOK" is not like any I saw before so I went directly to disassemble the 'Gizmox.WebGUI.Server' for FRAMEWORK 3.5, look for 'get_CacheOk' and bingo. Now I was at the right place to start and I don't know if you already mentioned it but I didn't know that you were using VWG for framework 3.5.  

I'm quite sure that there's something suspicious at the 'get_CacheOK' (assembly for framework 3.5) , first it's full of 'nop' operations (more likely operation from a patched assembly that from a compiled/built assembly) then it's also full of 'br.s' operations and finally at least one of the 'brfalse.s' I think could throw an exception (the famous invalid IL code exception, IL_0006:  brfalse.s  IL_000b).

#
#get_CacheOK (IL code for the other versions of VWG for framework 2.0)
#
# Only one operation here, returning a bool variable value.
#

.method /*06000016*/ assembly hidebysig specialname static
          bool  get_CacheOK() cil managed
  // SIG: 00 00 02
  {
    // Method begins at RVA 0x22ec
    // Code size       6 (0x6)
    .maxstack  8
    IL_0000:  /* 7E   | (04)00000E       */ ldsfld     bool Gizmox.WebGUI.Server.Cache/*02000006*/::'60AAA' /* 0400000E */
    IL_0005:  /* 2A   |                  */ ret
  } // end of method Cache::get_CacheOK


Notice that the the last two operations from the IL code for the 'get_CacheOK' of the assembly for framework 3.5 (what Stephanus sent) are the same operations I just put in here which are the RETURN of a boolean value from an existing BOOLEAN variable therefore the other operations seems to be void and they do nothing meaningful.

If you want you can use (in Windows) besides 'ildasm' or 'IDA', an interesting application that maybe you already know called 'Reflector' (sort of decompiler which uses reflection, etc.) and if you try to view the 'get_CacheOK' property it throws an exception and that for me is the verification that I needed to affirm that that code is bugged or something.

I will report this to the VWG guys to know what they can tell us.


Stephanus van Staden wrote:
I did some further testing and tried to see if my 64bit issue will go away on a another platform and another version of Mono.  I think I must mention that this work with Microsoft .Net 2.0
I'm now trying to find where the problem lies - Mono or WebGUI

So I tried Opensuse 10.2 (32 bit x86)  - Mono JIT compiler version 2.1 - Latest VisualWebGUI 6.1.2

I now even get the error on 32 bit - the same problem - so I disassemled the function that give the problem and it seems like the Mono does not like IL_0006 (see below).  I do not have any experience in the IL stuff - but it seems like something to do with the way an if/switch statement is compiled and then obfuscated  (I'm just guessing...)
Maybe it is obvious to someone else who knows the IL stuff by heart.

.method assembly hidebysig specialname static
        bool  get_CacheOK() cil managed
{
  // Code size       31 (0x1f)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  nop
  IL_0002:  ldc.i4.1
  IL_0003:  br.s       IL_0012
  IL_0005:  nop
  IL_0006:  brfalse.s  IL_000b
  IL_0008:  nop
  IL_0009:  br.s       IL_0018
  IL_000b:  ldc.i4.1
  IL_000c:  brfalse.s  IL_0015
  IL_000e:  br.s       IL_0000
  IL_0010:  br.s       IL_0014
  IL_0012:  br.s       IL_0005
  IL_0014:  nop
  IL_0015:  ldc.i4.0
  IL_0016:  brtrue.s   IL_0002
  IL_0018:  nop
  IL_0019:  ldsfld     bool Gizmox.WebGUI.Server.Cache::'12AA0'
  IL_001e:  ret
} // end of method Cache::get_CacheOK