簡體   English   中英

如何使用WCF優先處理外發郵件

[英]How to Prioritize Outgoing Messages with WCF

我希望能夠確定來自WCF服務的傳出數據/消息的優先級。

這是基本方案:

  1. 客戶端從服務器請求數據流。 數據流是實時的,大型的,並且可能無止境(設備監視數據)。 我們將其稱為HighPriorityDataStream。
  2. 客戶端請求其他數據。 我們將其稱為LowPriorityData。

帶寬是有限的(請考慮使用撥號調制解調器或衛星)。 當請求LowPriorityData時,不要中斷或延遲當前的HigPriorityDataStream,這一點非常重要。

我已經有一個基於套接字的舊系統,可以通過手動控制將數據放入套接字緩沖區的順序來實現。 高優先級數據放置在緩沖區中,如果還有剩余空間,則會添加較低優先級的數據以填充緩沖區的其余部分。

我正在嘗試使用WCF重新設計該過程...我不知道任何現成的解決方案,並且認為我可能需要編寫自定義渠道行為,但是我想吸引我走那條路之前的社區:)

我認為沒有通用的現成解決方案。 解決方案取決於您的其他要求。 您要控制每個客戶端還是整個服務器(所有客戶端)的帶寬? 您要從同一代理調用低優先級操作還是要為新操作啟動新代理? 您是否要同時運行更多高優先級操作? 您要優先處理傳入的請求嗎?

最簡單的解決方案期望您控制每個客戶端的帶寬,對所有呼叫重復使用相同的代理,只能同時完成一個高優先級操作,並以FIFO順序處理請求。 比僅用[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession,ConcurrencyMode = ConcurrencyMode.Single)]標記服務實現(對於通過NET.TCP公開的服務,這應該是默認設置)。 此設置將對來自同一客戶端代理的所有調用重新使用同一服務實例,但一次將僅處理一個調用(其他將排隊等待,直到它們被處理或超時)。

最好的問候,拉迪斯拉夫

經過一番摸索(感謝Ladislav的周到想法),我得出的結論是,我要求通信層解決商務層問題。 為了更好地說明問題,有多個連接和一個數據源。 數據源必須確定從其自己的數據源(實時數據流以及持久數據庫)收集哪些數據的優先級,並根據其優先級將數據發送回各個客戶端。 需要明確的是,客戶端基於其基於角色的身份具有相對優先級,數據源具有優先級(相對於持久數據優先於實時數據),數據源中的各個字段具有優先級順序(所有其他字段均相等, X必須始終在字段Y之前發送)。

這完全是業務邏輯,我們采用的解決方案是一組優先級隊列,這些隊列根據這些優先級要​​求自動對輸入數據項進行排序,然后按該順序處理每個請求。

暫無
暫無

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

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