若要利用 RPC 應用程式中的 MSMQ 傳輸,需要非常少的努力。 針對同步傳訊,您只需要將消息佇列傳輸 (ncadg_mq) 指定為通訊協議順序。 ncadg_mq 通訊協定支援廣播呼叫以外的所有標準數據報功能。 此外,請注意,目前消息佇列傳輸不支援動態端點。
藉由將 [訊息] 屬性套用至 IDL 檔案中的遠端程式宣告,您會自動為這些呼叫實作異步模式消息佇列。 這讓客戶端和伺服器應用程式能夠控制與訊息和消息佇列相關聯的許多屬性,包括:
- 服務品質
- 收到確認
- 日記
- 呼叫優先順序
- 伺服器進程佇列的持續性
服務品質是在傳輸過程中將呼叫傳遞給伺服器程式所付出的努力。 即時傳遞會在記憶體中排入佇列,因此速度相當快,但若電腦或網路連線在不當時間中斷,呼叫將會遺失。 可復原的傳遞將保存至磁碟檔案,直至完成傳遞,因此即使電腦當機,通話也不會遺失。 這能確保傳遞的可靠性,然而效能會受到影響,因為每次呼叫都被寫入磁碟。
您也可以指示 MSMQ 傳輸等候確認呼叫到達目的地伺服器佇列後再返回。 選擇此選項會封鎖用戶端,直到伺服器認可呼叫為止,否則控件會在進行呼叫時立即傳回用戶端。
藉由使用日誌功能,即可將呼叫記錄到磁碟。 如果開啟日誌功能,則每個呼叫會記錄到磁碟,並且在傳送至伺服器進程的路徑上經過每一個下一個節點。
呼叫優先順序可以與 RPC [訊息] 函式屬性搭配使用,以允許優先順序較高的呼叫優先於優先順序較低的呼叫,即使高優先順序呼叫稍後抵達。 呼叫優先順序也會以有限的方式與同步 RPC 搭配運作,但同步 RPC 呼叫無法以與異步呼叫相同的方式堆疊。
客戶端進程會呼叫 rpcBindingSetOption 來控制上述所有屬性。 一旦設定,這些屬性會保持有效,直到在另一個RpcBindingSetOption的呼叫中被變更。
RPC 伺服器進程可以控制其接收佇列的存留期。 伺服器進程結束時,預設會刪除佇列。 不過,伺服器進程可以在設定其端點時,使用 RpcServerUseProtseqEpEx,以告知傳輸允許佇列繼續存在,即使伺服器進程未執行也接受呼叫要求。 在此情況下,當伺服器進程重新上線時,呼叫會排入佇列並執行。
注意
如果您在介面中使用異步 [訊息] 呼叫,則必須先呼叫 RpcServerRegisterIf 或 RpcServerRegisterIfEx,再呼叫 RpcServerUseProtseqEpEx(ncadg_mq)來註冊介面。 開啟通訊協定順序之後,任何已經在等待伺服器佇列的呼叫都會開始從佇列中被處理。 如果尚未註冊對應的 RPC 介面,呼叫將會失敗。 如果您已設定遠端過程調用的永久端點、伺服器已關閉,且用戶端已繼續將呼叫傳送至伺服器,就可能發生這種情況。 這些呼叫會堆疊在佇列中,等待伺服器重新上線后再讀取。
如需詳細資訊,請參閱 RpcBindingSetOption、RpcServerUseProtseqEpEx和 [message], ncadg_mq。