かなり前にこれに関するいくつかの議論を見たのを漠然と覚えていますが、それ以来何も聞いていません. 基本的に、リモート マシンで IObservable をサブスクライブできますか?
7 に答える
IObservable.Remotable を使用して、.NET Remoting を介して他のマシンからオブザーバブルを直接使用できます。
Paulが指摘したように、 IObservable.Remotableを使用した例であるチャンネル9でこのクールなビデオを見つけました。
非常に興味深いものです。少し時間をかけて遊んでみましょう。:-D
はい。
RX には、.NET Remoting を使用してプロセスの境界を越えるためのサポートが組み込まれています。
NuGet パッケージをインストールすると、クロスプロセス RX メッセージのサポートを提供するrx-remoting
アセンブリがインストールされます。System.Reactive.Runtime.Remoting.dll
Microsoft のデモ コードについては、RX Across Processesを参照してください。このページのコードをテストしたところ、問題なく動作しました。コンパイルするには、次の参照を追加する必要があります。
- NuGet :
Reactive Extensions - Main Library
(検索reactive extensions main
) - NuGet :
Reactive Extensions - .NET Remoting Support
(検索reactive extensions remoting
) System.Runtime.Remoting
(通常の参照として追加します。このアセンブリは .NET に付属しています)
@theburningmonk が言及したチャンネル 9 のビデオも興味深いものです。
アップデート
残念ながら、このソリューションには 1 つの大きな制限があります。リッスンできるクライアント プロセスは 1 つだけです (後続のクライアントはすべて接続できません)。Pushqaはこの問題を解決します (私の他の回答を参照してください)。基本的に、pub/sub シグナリング バスの上に RX を実装するライブラリは、このトリックを行う必要があります。
問題の解決策としてRxを使用することに特に縛られていますか?WCFは、クライアントがコールバックエンドポイントをサービスに登録する機能を備えたデュプレックスサービスを提供します。その後、サービスは必要に応じてクライアントへのコールバックを開始できます。これは事実上、リモートのオブザーバーパターンです。RXが必須の場合は、WCFデュプレックスサービスをRXサポートフレームワークでラップして、クライアントがIObservableを使用してサービスの動作を「透過的に」監視できるようにすることはかなり前向きである必要があります。
そのためのフレームワークを考案できない理由はありません。フレームワークは、リモート オブジェクトに対処し、それらのプロキシを生成し、アプリケーションの境界を越えて (つまり、ソケット通信を介して) リモート オブジェクトのアクティビティをマーシャリングする手段を提供する必要があります。.NET Remoting は、これを実装するための適切なオプションである可能性があります。WCFはさらに優れています。