簡體   English   中英

進程間的C#通信

[英]C# communication between processes

我正在使用一個應用程序,我能夠使C#腳本在這個環境中運行。 我可以將任何類型的DLL導入此環境。 我的問題是我想在這些腳本之間啟用通信。 由於環境受到控制而且我無法訪問應用程序的源代碼,因此我不知道如何執行此操作。

我試過的事情:

  • 文件I / O:只需編寫我希望每個讀取.txt文件並讓另一個讀取它的消息。 問題是我需要這個腳本運行得非常快,而且占用了太多時間。

  • nServiceBus :我試過這個,但我無法讓它在我正在處理的環境中工作。 我不是說不能做到,只是因為無法完成它。

有誰知道一個簡單的方法來做到這一點,這也很快?

進程間通信的方法應該取決於每條消息的處理重要性。

例如,如果流程A告訴流程B,例如,向您的IT員工發送一封電子郵件,說服務器已關閉,那就非常重要了。

但是,如果您正在傳輸音頻,則單個消息(數據包)對應用程序的性能並不重要,可以刪除。

如果是前者,則應考慮使用持久存儲(如數據庫)來存儲消息,並讓每個進程輪詢數據庫以檢索自己的消息。 這樣,如果進程被終止或暫時失去與其他進程的通信,它將能夠檢索它再次啟動時丟失的任何消息。

您可以使用一種形式的進程間通信,即使在同一進程中也是如此。 將腳本視為單獨的進程,並以這種方式進行通信。

在這種情況下,命名管道可能是一個不錯的選擇。 它們非常快,並且在.NET 3.5中相當容易使用。

或者,如果將腳本加載到單個AppDomain中,則可以使用靜態類或單例作為通信服務。 但是,如果腳本單獨加載,則可能無法實現。

答案很簡單;

由於您可以將任何DLL導入到腳本中,因此您可以創建一個自定義DLL,以您希望的任何方式實現進程之間的通信:共享內存,命名管道,TCP / UDP。

好吧,不知道你的環境的細節,我真的沒有多少提供。 您正在使用術語“C#腳本”......我不完全確定這意味着什么,因為C#通常是一種編譯語言。

如果你使用普通的C#,你有沒有用命名管道查看WCF? 如果程序集在同一台物理計算機上運行,​​則應該能夠輕松快速地創建一些使用命名管道綁定托管的WCF服務。 命名管道在本地環境中提供簡單,高效且快速的消息傳輸機制。 WCF本身非常易於使用,並且是.NET框架的本機組件。

由於您已經安裝了文件I / O,因此可以通過將其放在RAM磁盤上來獲得足夠的速度。 如果您今天輪詢更改, FileSystemWatcher可以幫助您提高響應速度。

您可以使用PipeStream 它比使用主內存完成的速度快於磁盤IO。

XMPP / Jabber是另一個看看jabber.net的appraoch

另一種簡單的方法是在預定義的端口上打開TCP套接字,從其他進程連接到它並以這種方式進行通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM