.NET Remoting は、 .NET Frameworkのバージョン 1.0 とともに 2002 年にリリースされた、プロセス間通信用のMicrosoftアプリケーション プログラミング インターフェイス(API)です。これは、16 ビットWindows用のObject Linking and Embedding (OLE)の最初のバージョンが 1990 年にリリースされて始まった一連の Microsoft テクノロジーの 1 つです。これらのテクノロジーの開発の中間段階としては、1993 年にリリースされ、1995 年に COM-95 として更新されたComponent Object Model (COM )、1997 年にリリースされ ( ActiveXに改名された) Distributed Component Object Model (DCOM)、そして 2000 年にリリースされたMicrosoft Transaction Server (MTS)を備えた COM+ がありました。 [ 1 ]現在は、 .NET Framework 3.0の一部であるWindows Communication Foundation (WCF)に置き換えられています。
.NET Remoting は、そのファミリーメンバーやCommon Object Request Broker Architecture (CORBA) やJava の remote method invocation (RMI) などの類似技術と同様に複雑ですが、その本質は単純です。オペレーティングシステムとネットワークエージェントの支援を受けて、クライアントプロセスはサーバープロセスにメッセージを送信し、応答を受け取ります。[ 2 ] [ 3 ]
.NET Remoting を使用すると、アプリケーションはオブジェクト(リモート可能オブジェクトと呼ばれる)をリモート境界を越えて利用可能にすることができます。リモート境界には、異なるアプリケーションドメイン、プロセス、ネットワークで接続された異なるコンピュータなどが含まれます。[ 4 ] .NET Remoting ランタイムは、サーバーアプリケーションのアプリケーションドメイン内のオブジェクトへのリクエストのリスナーをホストします。クライアント側では、リモート可能オブジェクトへのリクエストは、 TCPストリーム、HTTPストリーム、名前付きパイプChannelなどの実際のトランスポート モードをカプセル化するオブジェクトを介して .NET Remoting ランタイムによってプロキシされます。その結果、適切なオブジェクトをインスタンス化することで、アプリケーションを再コンパイルすることなく、.NET Remoting アプリケーションでさまざまな通信プロトコルをサポートできます。ランタイム自体が、クライアントとサーバーのアプリケーションドメイン間でのオブジェクトのシリアル化とマーシャリングを管理します。[ 4 ]Channel
.NET Remoting は、リモート可能なオブジェクトへの参照をクライアント アプリケーションに提供し、クライアント アプリケーションはそれをローカル オブジェクトであるかのようにインスタンス化して使用します。[ 4 ]ただし、実際のコード実行はサーバー側で行われます。リモート可能なオブジェクトはアクティベーションURLによって識別され、URL への接続によってインスタンス化されます。[ 5 ]リモートオブジェクトへの接続に使用されるチャネルをサーバーが登録すると、リモート ランタイムproxyによってオブジェクトのリスナーが作成されます。クライアント側では、リモート インフラストラクチャが、リモート可能なオブジェクトの擬似インスタンス化として機能オブジェクトに対して行われたメソッド呼び出し(メソッドの識別子や渡されたパラメーターを含む)は、バイトストリームにシリアル化されChannel、通信プロトコルに依存した方法で、サーバー側の受信プロキシオブジェクトに転送されます(「マーシャリング」)。これは、チャネルのトランスポートシンクに書き込むことによって行われます。[ 5 ]サーバー側では、プロキシがシンクからストリームを読み取り、クライアントに代わってリモート可能なオブジェクトを呼び出します。結果はシリアル化され、シンクを介してクライアントに転送され、そこでプロキシが結果を読み取り、呼び出し元のアプリケーションに渡します。[ 5 ]リモート可能なオブジェクトが何らかのサービスのためにクライアントオブジェクトにコールバックする必要がある場合、クライアントアプリケーションはそれをリモート可能としてマークし、リモートランタイムにリスナーをホストさせる必要があります。[ 5 ]サーバーは、別のチャネルを介して、または基盤となる接続が双方向通信をサポートしている場合は既に存在するチャネルを介して接続できます。[ 5 ]チャネルは、異なる異種トランスポートを持つ可能性のある、複数の異なるチャネルオブジェクトで構成できます。したがって、リモート処理は、インターネットを含む異種ネットワークの相互接続によって隔てられたシステム間でも機能します。[ 5 ]型安全性は、 CTSおよび .NET Remoting ランタイムによって強制されます。リモート メソッド呼び出しは本質的に同期的ですが、非同期呼び出しはスレッド ライブラリを使用して実装できます。認証とアクセス制御は、カスタム チャネルを使用するか、リモート可能なオブジェクトをIISでホストしてから IIS 認証システムを使用することによって、クライアントに対して実装できます。[ 6 ]