質問
Windows (.net 以外) 環境でリモート プロシージャ コールを実行する良い方法を知っている人はいますか?
その方法に関する情報はあまり見つかりません。msdn には .net バージョンしかありません。
.
編集:
これまでの回答ありがとうございます。私がそれを必要とするのは、進行状況レポートを「クライアント」に送り返す同じコンピューター上のサービスと通信することです。私が rpc に興味を持っている理由は、vistas uac と、サービスが rpc またはパイプを使用しない限り通常のアプリと通信できないためです。パイプを調べてみると、パイプは完全にテキストベースであるようで、rpc は厳密に型指定された値を渡すことができるという印象を受けました。
DCOMも検討してみます。
解決
同じマシン上のプロセス間での通信のみに興味がある場合は、 ブースト::プロセス間 これは、彼らが話し合うためのチャンネルを取得する素晴らしい方法です。
さらに Windows 固有のソリューションは、 共有メモリマップファイル およびシステム グローバル ミューテックス/シグナル、または 名前付きパイプ.
ブースト::シリアライズ そしてグーグル プロトコルバッファ これは、プロセス間で送信するデータをバイナリ文字列に変換する方法であり、構造パッキングや、異なる実行可能ファイル間で異なる可能性のあるその他のものにあまり依存しません。
boost::interprocess、boost::serialize、およびプロトコル バッファーはプラットフォームに依存しないため、技術的には Linux/Mac でも動作するはずです。
他のヒント
DCOM には、DCE RPCに基づくリモートプロシージャコールメカニズムがあります。システムをCOMコンポーネントとして構築するか、公開するAPIにCOMラッパーを配置する場合、これを使用できます。それを超えて、問題の詳細をさらに洞察して質問を拡大することができます。問題にDCOMの使用を妨げる可能性のある側面があるかどうかについて、私は実際にハンドルを持っていません。
別のアプローチは、アプリケーションの周りにWebサービスラッパーを配置することです。 Webサービス(確かにSOAPまたはXML-RPCに基づくサービス)は、実際にはHTTPをトランスポートプロトコルとして使用するRPCメカニズムにすぎません。
詳細はこちら:
フォルダー... \ Samples \ NetDS \ RPCにビューサンプルをインストールした後、「Windows Server 2003 R2用Microsoft Platform SDK」を取得します
sdk_NetDS_RPC.exe -ソースサンプル
soapsdk.exe - MSサンプル
その他のリンク:
RPC呼び出しをトレースし、COM +イベントをプログラムに通知する
FastRpc
secure rpc
XMLおよびHTTPに基づく軽量RPCライブラリ。
古いヘルプですが、便利な RPC.HLP
[MS-RPCE]:リモートプロシージャコールプロトコル拡張機能
[MS-RPCH]:HTTPプロトコル仕様を介したリモートプロシージャコール
[MS-COM]:コンポーネントオブジェクトモデルプラス(COM +)プロトコル仕様DCOM
Windowsでは、さまざまな方法でリモートでコードを呼び出すことができます。ソケット、DComなど... Microsoftは、リモートAPI呼び出しを定義できるrpcgen(DCE RPCベース)をサポートしており、コンパイラーはグルーコードを記述します。これは、DCOMの基礎となるレイヤーです。
使いやすく、より広い標準であるUNIX ONC-RPCとは互換性がありません。 のいずれかをご覧ください。 ONC_RPCツールキット DCOMのような何かがあなたのためではない場合。
トニー
ええ、私はIsalamonに同意します-MIDLに既に組み込まれている実際のRPCを使用するだけです。 DCE RPCに関するO'Reillyの本を入手できます。同じマシンを使用している場合は、ncalrpcのバインディングホストを使用します。
ここは私たちが持っているものです1996年にWin NT上のCheyenne SoftwareでInocuLANウイルス対策用に使用していました。これは純粋なRPCであり、OOレイヤーはありません。新しいWindowsでも利用できることを願っています。
さて、複雑さ、オーバーヘッド、逆速度で分類すると、次の可能性が思い浮かびます。
- SOAP (すでに除外しました)
- コルバ
- DCOM (DCE)
- XMLメッセージの交換
- ONC-RPC (SunRPC)
- HTTP のようなメッセージの交換
- Telnet のようなメッセージの交換 (回線指向)
全体として、ライブラリやパッケージなどを多かれ少なかれ使用する準備ができている (イライラする準備ができている) でしょう。オープンソースとして。
上記の一部は奇妙に聞こえるかもしれませんが、実際には RPC に HTTP または Telnet をよく使用します。その理由は、テストに派手な環境を必要とせず、ほとんどの異質なソフトウェアが簡単に環境に適応できるためです。また、これらにより、Web ブラウザ、Telnet セッション、または単にソケットを開いてリクエストを送信するだけの別のプログラムから、プログラムのサービスを簡単に利用できるようになります。たとえば、私のプログラムのほとんどには --scripting コマンド ライン引数が含まれており、これにより Telnet ポートが開き、JavaScript のような言語を介してアプリケーション オブジェクト モデル全体にアクセスできるようになります。これを使用すると、手間をかけずに、あらゆるアプリを非常に簡単にリモート制御することもできます。このようなフレームワークを一度作成した場合は、新しいアプリごとにそれを再利用できます (どのように見えるかを見てください) ここ)
正直に言うと、私のアプリはすべて、上記のすべてがすでに組み込まれており、クライアントとしてもサーバーとしてもすぐに使用できる環境で書かれています。
まとめ:最も単純なものを使用してください。それで十分です。アプリをそのようなインフラストラクチャに統合する必要がない限り、Corba や SOAP は必要ありません。