2009-06-11 7 views
0

Gemäß Remote-Objektdefinition - Jedes Objekt außerhalb der Anwendungsdomäne des Aufrufers sollte als entfernt betrachtet werden.RemotingServices.IsObjectOutOfAppDomain, wenn es false zurückgibt?

RemotingServices.IsObjectOutOfAppDomain - Gibt false zurück, wenn sich das Remoteobjekt in derselben App-Domäne befindet.

In der MSDN-Artikel Microsoft .NET Remoting: A Technical Overview I fanden die folgende Aussage (im Abschnitt "Proxy-Objekte") über Methode ruft auf entfernte Objekte:

... die [Methode] Aufruf zu bestimmen, untersucht Wenn es sich um eine gültige Methode des Remote-Objekts handelt und wenn eine Instanz des Remote-Objekts in die gleiche Anwendungsdomäne wie der Proxy befindet. Wenn dies der Fall ist, wird ein einfacher Methodenaufruf an das tatsächliche Objekt weitergeleitet.

So bin ich überrascht, wenn das Remote-Objekt und Proxy in der gleichen App-Domäne residieren wird.

Probe Beispiel:

using System; 
using System.Runtime.Remoting; 
using System.Runtime.Remoting.Channels; 
using System.Runtime.Remoting.Channels.Tcp; 

namespace RemotingSamples 
{ 
public class HelloServer : MarshalByRefObject 
{ 
public HelloServer() 
{ 
Console.WriteLine("HelloServer activated"); 
} 
public String HelloMethod(String name) 
{ 
return "Hi there " + name; 
} 
} 
public class Server 
{ 
public static int Main(string [] args) 
{ 
// server code 
ChannelServices.RegisterChannel(new TcpChannel(8085)); 
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(HelloServer), "SayHelloSingleton", 
WellKnownObjectMode.Singleton); 

// client code 
HelloServer obj = HelloServer)Activator.GetObject(
typeof(HelloServer), "tcp://localhost:8085/SayHelloSingleton"); 

System.Console.WriteLine(
"IsTransparentProxy={0}, IsOutOfAppDomain={1}", 
RemotingServices.IsTransparentProxy(obj), 
RemotingServices.IsObjectOutOfAppDomain(obj)); 
Console.WriteLine(obj.HelloMethod("server")); 
return 0; 
} 
} 
} 
+0

ich vor einen interessanten Fall nicht lange hatte. Ich hatte eine Client - Server - App, wo Server "Clients" eines anderen Servers sein könnten. Ich wollte Code schreiben, der überprüft, dass ein Server sich selbst nicht kontaktiert. Ran in diesen Beitrag. Dachte, ich würde teilen, da es verwandt sein könnte .. –

Antwort

0

Nun, ein offensichtlicher Fall, wenn es falsch zurück, wenn das Objekt nicht ein Proxy ist, sondern ein reguläres .NET-Objekt in der lokalen Domäne (kein Remote beteiligt) .

Ich verstehe nicht, die MSDN-Note vollständig, entweder ;-p

Verwandte Themen