你有這種混亂是假定任務的執行和WCF端點是一樣的。我將它分成三個主要項目:
- 具有用於作業管理的UI元素的客戶端應用程序。
- WCF服務端點檢索作業信息併發送創建/刪除作業請求。
- 運行作業的應用程序。
客戶端應用程序
客戶端應用程序應通過WCF服務檢索作業數據。您將提供屏幕查看執行作業/創造就業機會/刪除作業/等
WCF服務
的WCF服務將公開由客戶端應用程序所需的端點。這可能包括諸如以下項目:CreateJob,ViewJobs,DeleteJob等。該服務應該讀取/寫入您的數據庫後端。
求職
申請工作將輪詢新/刪除的作業並執行一切必要的工作來完成。它將更新WCF服務讀取的數據庫後端的作業狀態。這可能是一個SQL作業,Windows服務,控制檯應用程序,等等,(我可能會讓它成爲一個Windows服務,因爲你可能需要一直在運行的東西來處理作業)。
問題
How can a server console application expose ASMX or WCF web services(so that WPF clients get the status of the jobs) WHILE CONTINUING TO RUN THE JOBS?
通過運行該被取消職位的申請分離出WCF服務。注意:您可以擁有託管WCF和作業執行程序的控制檯應用程序,但在概念上將它們視爲單獨的東西(託管在相同的控制檯應用程序中僅僅是一個實現細節)。
How to push progress updates from server to the WPF clients when there is a change?
我不會這麼做。我會讓UI不時輪詢或提供刷新按鈕以通過WCF端點檢索狀態。
如果您絕對需要這樣做,您需要Job執行者在運行作業時發佈消息,並且客戶端應用程序需要接收這些消息(可能是MSMQ,Service Bus Implementation,BizTalk等)。
爲什麼我喜歡輪詢服務器推送
現在,我想它有可能情況下,我會做俯臥撐的風格,有些地方我投票。
如果我有很多異地客戶端(通過VPN或通過互聯網連接),我會讓客戶端進行輪詢,因爲帶寬和網絡延遲成本過高。如果客戶端數量很高,則每條更新消息都需要發送給每個訂閱客戶端。在這種情況下,我傾向於去詢問不告訴模型。
如果客戶在家,你需要實時的信息流,那麼推送模式會更有意義。在這種情況下,客戶端可以連接到服務器應用程序,他們可以通過連接來回發送消息(我沒有親自做過這個,所以我沒有建議如何設置,希望比套接字更高級別)。
如果這是一種情況,您希望消息作爲更新發生,但客戶端位於許多不同的地方,那麼發佈/訂閱模型可能是最好的。在pub/sub中,應用程序會在更新消息發生時推送消息。消息傳遞系統將檢查是否有任何訂閱消息的客戶端,並且所有訂閱消息傳遞系統的客戶端都將消息的副本轉發給它們。在你的例子中,一個客戶端將subscribe
作爲消息,消息系統會將更新發送到客戶端指定的位置(客戶端需要一種接受消息的方式)。NServiceBus,BizTalk是這種類型的通信的例子。
可能的重複:http://stackoverflow.com/questions/11170457/discussion-client-server-application-architecture –
@MikeMcCaughan您提到的鏈接似乎是相似的,但它不是,在我的情況下,我的服務器除了爲客戶提供服務外,還有很長時間的工作要做。 – Aron
試試這個:http://dasunhegoda.com/architecture-products/1180/ – Techie