[Mono-list] Windows to Linux Remoting problem

RoBiK robik@mailbox.sk
Fri, 8 Oct 2004 10:39:32 +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 
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.Channels
.ITransportHeaders,System.IO.Stream,System.Runtime.Remoting.Channels.ITransp
ortHeaders&,System.IO.Stream&)
in <0x002bc>
System.Runtime.Remoting.Channels.BinaryClientFormatterSink:SyncProcessMessag
e
(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.Messaging
.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.SendRequestWit
hRetry(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream)
   at
System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage
(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream,
ITransportHeaders& responseHeaders, Stream& responseStream)
   at
System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessag
e(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: 
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="MXSRemoteQuote.QuoteProviderController, MXSRemoteQuote"
           />
          <activated
             type="MXSRemoteQuote.QuoteProvider, MXSRemoteQuote"
           />
         </service>
         <channels>
             <channel ref="tcp" port="8787">
                 <serverProviders>
                     <formatter ref="binary" typeFilterLevel="Full" />
                  </serverProviders>
                 <clientProviders>
                     <formatter ref="binary" />
                 </clientProviders>
              </channel>
         </channels>
      </application>
   </system.runtime.remoting>
</configuration>


... and the client side .config:

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

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

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