[英]How to connect multiple clients to multiple servers and send alerts from servers based on certain events?
我目前有多個服務器遠程連接到我,以運行許多不同的命令/腳本來獲取有關服務器和/或服務器上運行的應用程序的信息。
我想自動運行命令/腳本(或轉換為C#/。NET的腳本中包含的代碼),並讓服務器向運行在多個工作站上的客戶端(基本上是Windows窗體)發送警報/通知/消息,但需要一些指導。
作為參考,我在創建Windows Services方面經驗有限,但是對能夠在服務器上創建它們以處理命令/腳本自動化感到很有信心,我認為這將是處理命令/腳本的最佳方法。服務器上的自動化(因為命令/腳本將需要一直運行或以設置的間隔運行)。
我如何將多個服務器連接到多個客戶端,以便當服務器上發生命令/腳本甚至事件時,服務器將警報/通知/消息發送給客戶端?
例如,如果服務器上的應用程序具有內置命令,可以運行該命令來確定應用程序的狀態(啟動,關閉,邊緣等),我希望客戶端上的Windows窗體能夠接收警報當命令在運行時返回“向下”或“ limbo”時,可能來自服務器(大概是Windows服務)。 警報將顯示在Windows窗體上,該窗體基本上設置為客戶端可以連接到的服務器的儀表板。
更好的結果是客戶端將作為后台應用程序運行,並且通知的外觀類似於Microsoft Outlook在收到新電子郵件時顯示通知的方式(盡管這些通知可能需要關閉用戶交互而不是像Outlook通知那樣淡出) )。
我還希望客戶端使用其中包含服務器連接信息的配置文件,以便可以快速更改正在使用的服務器,以添加新服務器或停用現有服務器。
我已經閱讀了WCF和雙工合同,以及如何在Windows Services中托管WCF。 根據我的閱讀,這似乎很有希望。 但是,我不太確定如何進行設置,以便客戶端可以連接到多台服務器上的WCF服務。
我關心WCF的一件事是,在所有WCF示例(實現計算器類型的服務)中,我都看到客戶端必須啟動與服務器的通信才能通過回調接收消息。 。 在計算器服務示例中,客戶端將數字發送到服務,結果在回調中提供。 我還看到了一個異步示例,但是在該示例中,客戶端啟動了一個長期運行的請求,並且在完成處理后,回調函數返回了單個響應。
並且,這樣我就很清楚WCF中的綁定,就可以使用配置文件為多個服務器創建和使用綁定,而不必使用SvcUtil.exe生成代碼,對嗎? 我問的原因是因為要配置的服務器可能會針對不同的用戶進行更改,因此客戶端在連接服務時需要靈活。
我現在才開始研究Socket,但是我對它們還不夠熟悉,無法確定這是否是實現我的目標的更好選擇。
我只是在尋找指導,因此,如果您可以引導我去一些可以幫助我實現目標的資源,我將不勝感激。 我已經進行了廣泛的搜索,但是大部分搜索都不適用於我的方案,它僅限於單個服務器/客戶端交互,或者僅限於具有多個客戶端的單個服務器。
由於我不確定該朝哪個方向前進,因此盡管我已在以下Microsoft文章中實現了這些示例,但我沒有任何代碼示例: Windows Communication Foundation-入門教程
所以你想建立一個系統
這是我的建議
到目前為止,我們已經有Windows服務通過套接字進行通信,將消息存儲在中央存儲庫中,並且能夠通過Toast Style Pops處理多個客戶端以進行客戶端通知。
您需要更豐富的客戶端GUI,以便最終用戶可以對服務器發送的消息進行操作。 您可以在客戶端啟動時連接的客戶端app.config中維護服務器列表。 您應該為用戶提供一個GUI,以管理所有服務器及其連接。
但是,通過構建這樣的客戶端服務器模型,您可以有效地在系統中構建安全漏洞。 您應該實施良好的授權機制。 查看以下帖子: 在WinForms中對用戶進行身份驗證(與ASP.Net無關)
編輯:您還可以實現服務器以將其作為服務實現時接受“自定義命令”。 這樣,將通過使用ServiceController傳遞命令來標准化客戶端服務器通信。 這篇文章可能會有所幫助: 如何從.NET代碼向.NET Windows服務發送自定義命令? 。
在這里不要對“命令”術語感到困惑。 ServiceController向服務發出標准命令以啟動,停止,暫停,繼續和重新啟動服務。 這些是在右鍵單擊services.msc管理單元中的服務時在上下文菜單上看到的相同項目。 服務可以響應自定義命令的方式相同。 在您的情況下,定制命令可能是執行流程的請求。
請注意,我描述的一些機制適用於Intranet設置,而其他機制在Intranet和Internet上都可以很好地擴展
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.