2011-08-05 55 views
0

最近有人問我之間的談話在採訪如下:使用序列2個處理/在C#應用程序(進程間通信)

,有一項經常收到消息每5分鐘一個過程/應用程序A(假設)

的要求是,存在需要該消息被從A.

但是過程/應用轉印應該確保該消息已實際接收過程/應用B.

一個過程/應用B

訪問者想知道如何在c#中實現。我們可以在這裏使用序列化嗎?

從我的理解中可以做到的最好方法是使用Message Queue或PIPE機制。

回答

0

任何涉及(在單個過程或,一般地,即使應用程序域之間)具有使用某些種序列化過程之間發送消息,作爲最終的數據需要被映射下來的東西,可以遍歷進程空間,根據定義,「消息」是序列化的數據。這個序列化可以是顯式的也可以是隱式的(自動的,也許通過代理/存根層 - 儘管我不喜歡)。

在現實中,進程/應用程序A 無法「確保」,它已交付,因爲它不能強制執行的第二進程正在運行。但是,它可能會有某種回調確認消息。事務性消息隊列不是不合理,但只保證它排隊 - 它不能確保它被處理(永遠)。就我個人而言,我首先會看到一個套接字是否足夠。

0

有IPC的一些可能的方式在.NET:

  1. 內存映射在.NET文件4
  2. .NET遠程
  3. 使用插座和環回(127.0.0.1)

最簡單的是在.NET 4.0中使用內存映射文件。
您可以使用序列化或任何消息表示格式,例如XML用於消息傳遞。
這是關於IPC,但如果您想確保從(進程B或其他進程)發送請求的位置,則必須使用簽名機制。

0

序列化(簡稱)是創建消息的過程。但是,如果您有興趣確保郵件到達目的地(並且以一致的狀態執行),則應該詢問有關通信協議的問題 - 這是描述郵件實際發送方式的事情。例如UDP協議不保證傳送和TCP。

還值得一提的是,保證交付意味着保證系統B完好地接收消息,或系統A將被告知交付失敗(例如系統B關閉時)。也就是說,一些消息隊列保證了傳遞 - 當隊列中的按摩沒有到達目的地時,消息將被標記爲失敗(例如,將其放入失敗消息隊列中)。

相關問題