混乱

2009-06-09 19 views
0

私はMSDNから読んだが、一歩中に、私はいくつかの混乱に直面しています.netリモーティング混乱

を勉強しています。..

3つのステップは、目的をリモーティングのために必要とされます。

1からRemoteObject

2 - Host

3からRemoteObjectとホストを作成Client

は正常です。私はすべてのことを理解しており、ホストとクライアントの両方の構成で構成ファイルを使用しています。クライアントでは、ここではそれが新しい演算子でRemotableTypeのオブジェクトを作成して、次のコード

public static void Main(){ 
     RemotingConfiguration.Configure("Client.exe.config"); 
     RemotableType remoteObject = new RemotableType(); 
     Console.WriteLine(remoteObject.SayHello()); 
    } 

を使用しています。このクライアントアプリケーションがRemotableType.dllという参照を持つ場所。

このdllがローカルで使用可能な場合、リモートからSayHello()を呼び出す目的は何ですか?

サーバーを実行せずにこのクライアントを実行しても、私にはHello Worldメッセージが表示されます。

ここで、new演算子を使用したremoteObjectの作成は有効ですか?

どこのRemoteObjectを得るための他の方法があるよう:

RObject remoteObject = (RObject)Activator.GetObject(typeof(RObject), "tcp://localhost:9999/RObject"); 
+0

私は遠隔操作の予定ではありませんが、リモーティングは現在WCFに置き換えられていることに注意してください。このMSDNページの上部にある太字のテキストを参照してください。http://msdn.microsoft.com/en-us/library/kwdt6w2k(VS.85).aspx –

+0

このトピックは、既存のアプリケーションとの下位互換性があり、新しい開発には推奨されません。分散アプリケーションは、Windows Communication Foundation(WCF)を使用して開発する必要があります。

+0

私は仕事をするつもりだったらどうしますか?Net 2.0 WCF for .Net 3.0 + – Mohsan

答えて

0

通常、2つのDLLを作成します。1つはリモートオブジェクトのインターフェイス定義を含み、もう1つはインターフェイス定義の実装を含むものです。

次に、インターフェイス定義DLLをクライアントに追加します。一方、サーバーには両方のDLLが必要です。クライアントはActivator.GetObject(...)呼び出しを使用してクラスのインスタンスを作成します。

実装DLLをクライアントから参照した場合 - あなたが指摘したように、クライアント/サーバー実装の利点はありません。

+0

私はinterfacecを作成することでこの問題を解決しました。このクライアントを行うことによって、そのインタフェースへの参照だけが完全な実装ではなくなります。より安全です。 – Mohsan

0

新しいRemotableTypeを()単にクライアント上RemotableTypeのローカルインスタンスを作成して呼び出します。その上でメソッドを呼び出すと、このインスタンスで呼び出されます。

Activator.GetObject()を使用すると、ホストアプリケーションで公開されたRemotableTypeのインスタンスに対するTransparentProxyがクライアントに作成されます。このメソッドを呼び出すと、ホストアプリケーションへのリモート呼び出しが実行され、そこで実行されます。 SayHelloの実装でAssembly.GetEntryAssembly()を使用してエントリアセンブリの名前を返すと、クライアントで実行していてもHost.exeが返されます。