[Mono-list] Windows to Linux Remoting problem

Robert Remen Robert.Remen@nextranet.at
Fri, 8 Oct 2004 10:39:06 +0200


Hi!

This seems to be an DNS-resolving issue. You provided no source code so
i can only guess. When the runtime is marshaling object into another
appdomain (from server to client), it creates an ObjRef class wich
contains all relevant info to create a proxy (on client) for the
marshaled object in the another appdomain. Inside this info is also an
uri wich is used when invokig methods on the marshaled object. The
problem ist, that this uri is generated on the server. The server uses
ist hostname to create this uri. If the hostname can not be roselved on
the client machine, then you get an exception when you try to invoke a
method on the mashaled object.

Example:

Client calls new MXSRemoteQuote.QuoteProviderController(...) (the
remoting knows that this is a client activated type, so it sends a
request to the url from your client config file)
Server creates an instance of MXSRemoteQuote.QuoteProviderController,
generates an ObjRef for it (with unique uri for the marshaled instance,
part of this uri ist the hostname eg "server-xyz") and send is as
response to the client
Client creates a proxy object from the ObjRef received from the server
Client tryes to invoke a method on the proxy class, wich causes the
remoting to try to send a request to the server, but this fails, because
the hostname part of the uri ("server-xyz") can not be resolved on the
client

I hope this helps you to resolve your problem

Robert




-----Original Message-----
From: mono-list-admin@lists.ximian.com
[mailto:mono-list-admin@lists.ximian.com] On Behalf Of Zbigniew Babiej
Sent: Donnerstag, 07. Oktober 2004 15:53
To: mono-list@lists.ximian.com
Subject: [Mono-list] Windows to Linux Remoting problem

Hello All,
I was wondering if anyone had encountered the following problem.
I have a simple remoting test program (binaries compiled with MS .NET C#
(VS
2003 ver. 7.1.3088 .NET Runtime 1.1.4322 SP1).
This works OK in the scenarios Windows -> Windows(both local and remote
server) and Linux -> Linux (local server only, did not test remote
server), but does not work in the scenarions Windows->Linux and=20
Linux->Windows.

In the scenario Windows->Linux, the client throws the following
exception when trying to activate the first object:

A) When hosted by Mono (ver. 1.0.2):

Unhandled Exception: System.Runtime.Remoting.RemotingException: No such
host is known Server stack trace:
in <0x000c4>
System.Runtime.Remoting.Channels.Tcp.HostConnectionPool:CreateConnection
() in <0x00112>
System.Runtime.Remoting.Channels.Tcp.HostConnectionPool:GetConnection ()
in <0x00105>
System.Runtime.Remoting.Channels.Tcp.TcpConnectionPool:GetConnection
(string,int)
in <0x00146>
System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink:Process
Message
(System.Runtime.Remoting.Messaging.IMessage,System.Runtime.Remoting.Chan
nels.ITransportHeaders,System.IO.Stream,System.Runtime.Remoting.Channels
.ITransportHeaders&,System.IO.Stream&)
in <0x002bc>
System.Runtime.Remoting.Channels.BinaryClientFormatterSink:SyncProcessMe
ssage
(System.Runtime.Remoting.Messaging.IMessage)

Exception rethrown at [0]:

in <0x00583> System.Runtime.Remoting.Proxies.RealProxy:PrivateInvoke
(System.Runtime.Remoting.Proxies.RealProxy,System.Runtime.Remoting.Messa
ging.IMessage,System.Exception&,object[]&)

B) When hosted by .NET
Error: The requested name is valid and was found in the database, but it
does not have the correct associated data being resolved for
Source: mscorlib
Stack:
Server stack trace:
   at System.Net.Dns.GetHostByName(String hostName)
   at System.Net.Dns.Resolve(String hostName)
   at
System.Runtime.Remoting.Channels.RemoteConnection..ctor(SocketCache
socketCache, String machineAndPort)
   at System.Runtime.Remoting.Channels.SocketCache.GetSocket(String
machineAndPort)
   at
System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.SendRequestW
it
hRetry(IMessage msg, ITransportHeaders requestHeaders, Stream
requestStream)
   at
System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessa
ge
(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream,
ITransportHeaders& responseHeaders, Stream& responseStream)
   at
System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMe
ssage(IMessage
msg)

Exception rethrown at [0]:
   at
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage
reqMsg, IMessage retMsg)
   at
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&
msgData, Int32 type)
   at MXSRemoteQuote.QuoteProvider.AddQuoteListener(IQuoteListener
listener)
   at MXSRemoteClient.RemoteClient.Run()
Inner:

In the scenario Linux->Windows , the same errors are reported, but this
time by the server.

The windows version is Win2K SP4 and the linux is Fedora Core 2. Both
machines are in the same lan (switch).
I tested both IP and hostname, but no success.
I run other services(like ftp, samba etc.) on that Linux box and can
access them from Windows clients using both IP and hostname without any
problems.

Would you have any hints about how resolve this issue ?
The sample binaries can be downloaded from the following link:=20
http://members.chello.nl/z.babiej/MXSRemote.zip

Thank you in advance for your help.

Zbigniew Babiej, MarketXS.COM


Here is the server side .config:


<configuration>
   <system.runtime.remoting>
      <application>
         <service>
           <activated
             type=3D"MXSRemoteQuote.QuoteProviderController,
MXSRemoteQuote"
           />
          <activated
             type=3D"MXSRemoteQuote.QuoteProvider, MXSRemoteQuote"
           />
         </service>
         <channels>
             <channel ref=3D"tcp" port=3D"8787">
                 <serverProviders>
                     <formatter ref=3D"binary" typeFilterLevel=3D"Full" =
/>
                  </serverProviders>
                 <clientProviders>
                     <formatter ref=3D"binary" />
                 </clientProviders>
              </channel>
         </channels>
      </application>
   </system.runtime.remoting>
</configuration>


... and the client side .config:

<configuration>
  <system.runtime.remoting>
    <application name=3D"MXSRemoteTerminal">
       <channels>
          <channel ref=3D"tcp" port=3D"0">
             <clientProviders>
                <formatter ref=3D"binary" />
             </clientProviders>
             <serverProviders>
                <formatter ref=3D"binary" typeFilterLevel=3D"Full" />
             </serverProviders>
          </channel>
       </channels>
       <client url=3D"tcp://10.1.3.13:8787">
         <activated type=3D"MXSRemoteQuote.QuoteProviderController,
MXSRemoteQuote" />
         <activated type=3D"MXSRemoteQuote.QuoteProvider, =
MXSRemoteQuote"
/>
      </client>
    </application>
  </system.runtime.remoting>
</configuration>

_________________________________________________________________
Tired of spam? Get advanced junk mail protection with MSN 8.=20
http://join.msn.com/?page=3Dfeatures/junkmail

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