リモートオブジェクト定義 - 呼び出し元のアプリケーションドメイン外のオブジェクトはすべてリモートと見なす必要があります。RemotingServices.IsObjectOutOfAppDomainはfalseを返すか?
RemotingServices.IsObjectOutOfAppDomain
- リモートオブジェクトが同じアプリドメインに存在する場合はfalseを返します。
... [方法]コールが決定するために検査された:MSDNの記事Microsoft .NET Remoting: A Technical Overviewで
私は は 方法について(段落「プロキシオブジェクト」で)次の文は、リモートオブジェクトを呼び出しましたリモートオブジェクトの有効なメソッド であり、リモートオブジェクトのインスタンスが にある場合は、プロキシと同じアプリケーションドメイン。これが真であれば、単純な メソッド呼び出しが実際のオブジェクトにルーティングされます。
私は、リモートオブジェクトとプロキシが同じアプリドメインに存在すると驚いています。オブジェクトが(まったくリモーティングは関与しない)プロキシではなく、ローカルドメイン内の通常の.NETオブジェクトであるとき、それはfalseを返します1つの明らかなケースがある
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;
}
}
}
私はずっと前に面白いケースがありました。 私はクライアントサーバーアプリケーションを持っていました。そこでは、サーバーは別のサーバーの「クライアント」である可能性があります。私は、サーバが「それ自体」に接触していないことをチェックするコードを書いたかったのです。このポストに蘭。私はそれが関連することができるので、私は共有したいと思った.. –