2009-01-15 83 views
4

是否有人知道在Windows(非.net)環境中執行遠程過程調用的好方法?遠程過程調用

我無法找到關於如何做到這一點的許多信息,msdn只有.net版本。

編輯:

感謝您的回答。我需要的是與同一臺計算機上的服務進行通信,該服務會將進度報告發送回「客戶端」。我之所以介紹rpc是因爲vista的uac以及服務如何不能與普通的應用程序交談,除非他們使用rpc或管道。縱觀管道,它們似乎完全是基於文本的,我的印象是rpc可以傳遞強類型值。

我也會考慮DCOM。

回答

6

如果你只在同一臺機器上的進程之間的談話感興趣,boost::interprocess是得到一個渠道,他們交談通過一個很酷的方式。

更多windows特定解決方案是shared memory mapped file和系統全局互斥/信號或named pipes

boost::serialize和google protocol buffers是將您在進程之間發送的數據轉換爲較少依賴於結構打包和其他可能在不同可執行文件之間不同的其他內容的二進制字符串的方法。

boost :: interprocess,boost :: serialize和協議緩衝區應該是平臺獨立的,所以在技術上它可以在Linux/Mac上工作!

+0

爲共享內存映射文件解決方案提供的鏈接實際上是在Windows上執行ipc的許多不同方式的列表:http://msdn.microsoft.com/zh-cn/library/aa365574(VS.85).aspx – Laserallan 2009-01-15 13:41:37

5

DCOM是基於DCE RPC的遠程過程調用機制。如果您將系統構建爲COM組件,或者將COM包裝器放在您想公開的API上,則可以使用它。除此之外,您可能希望通過更深入地瞭解問題的具體情況來擴展您的問題。我並沒有真正掌握這個問題是否有可能妨礙使用DCOM的任何方面。

另一種方法是在應用程序中放置一個Web服務包裝器。 Web服務(當然是那些基於SOAP或XML-RPC的服務)實際上只是一種使用HTTP作爲傳輸協議的RPC機制。

+0

考慮到以後的更新,普通的COM就足夠了。 – MSalters 2009-01-15 15:14:42

2

您可以通過幾百種不同的方式在窗口上遠程調用代碼;套接字,DCOM等等......微軟在一個階段支持rpcgen(基於DCE RPC),它允許你定義遠程API調用,它的編譯器會編寫膠水代碼。這是DCOM中的底層。

它與UNIX ONC-RPC不兼容,它更易於使用且標準更寬。如果像DCOM這樣的東西不適合你,你可能想看看one of the ONC_RPC toolkits

託尼

0

Here是我們在1996年在Win NT上的Cheyenne Software for InocuLAN防病毒軟件中使用的。這是純RPC,不是OO層。我希望它仍然可以在更新的Windows中使用。

0

好,通過複雜排序,開銷和反向速度,這些可能性都在我的腦海:

  • SOAP(你已經排除)
  • 的Corba
  • DCOM(DCE)
  • 交換的XML消息
  • ONC-RPC(SunRPC)
  • 交換類似HTTP的消息
  • 類似Telnet的消息0
  • 交換(面向行)

對於所有,你會得到更多或更少的準備使用(準備受挫)庫,包等開源。

上面的一些可能聽起來很奇怪,但實際上,我們經常對RPC使用HTTP或Telnet。原因是你不需要花哨的環境來測試,任何外星人軟件都可以很容易地適應它。這些也使得您的程序服務可以很容易地從WebBrowser,Telnet會話或另一個程序中輕鬆使用,該程序只需打開一個套接字併發送請求即可。例如,我的大多數程序都包含一個--scripting命令行參數,該命令行參數將打開一個telnet端口,通過該端口,您可以通過JavaScript語言發送整個應用程序對象模型的訪問權限。這也可以用於非常容易地遠程控制任何應用程序 - 無需任何努力。如果你已經寫過這樣一個框架,它可以被重複用於每一個新的應用程序(看看這看起來如何here

我不得不承認,我所有的應用程序都是在一個環境中編寫的,已經包括並準備使用,既作爲客戶端也作爲服務器。

摘要:使用最簡單的東西,即做這項工作。除非您的應用程序需要集成到這樣的基礎架構中,否則您不需要Corba或SOAP。

3
1

是的,我同意Isalamon - 只使用已經內置了MIDL的真正RPC。你可以得到一本關於DCE RPC的O'Reilly書。如果您位於同一臺計算機上,則只需使用綁定的ncalrpc主機。