管理網路連線集 (關聯)

從 Windows 2000 開始,RPC 執行時間可能會維護用戶端與伺服器之間的多個連線。 這有助於對不支援變更用戶端身分識別的傳輸進行作業,而不需要重新建立連線、多執行緒用戶端和非同步用戶端。 用戶端進程與伺服器端點之間的連線集稱為 RPC 術語中的 關聯 。 瞭解關聯可以改善 RPC 的實作。

在單一執行緒的單一用戶端身分識別案例中,RPC 會在用戶端進程與伺服器端點之間開啟一個連線,以進行 RPC 呼叫。 進行同步 RPC 呼叫時,用戶端會將要求傳送至此連線上的伺服器,並同時接收其上的回復。 當用戶端進程中進行 RPC 呼叫的執行緒數目增加時,用戶端的安全性身分識別可能會變更。 當非同步/管道呼叫與用戶端上的同步呼叫混合時,RPC 可能需要多個網路連線。 集合中的所有連接都會放在稱為關聯的連接集區中。

同步遠端程序呼叫專門使用指定的連線來符合 RPC 標準。 如果已傳送要求,但尚未收到回應,同步 RPC 呼叫所使用的連線就會被視為忙碌中。 在該連線上不允許任何其他流量,直到收到回應為止。 RPC 執行時間會嘗試在同一個連線上進行多工非同步和管道 RPC 呼叫。 同步和非同步/管道呼叫不能在相同的連接上混合,這表示指定的連接可用於同步 RPC 呼叫或非同步/管道 RPC 呼叫。

RPC 會積極嘗試重複使用集區中的連線。 進行新的 RPC 呼叫時,RPC 會嘗試從集區尋找適當的連線,而且只有在找不到適當的連線時,才會建立新的連線。 若要讓連線視為適合,它必須:

  • 為 (同步或非同步/管道) 的適當類型。
  • 免費。
  • 具有與進行呼叫之系結控制碼相同的安全性身分識別。 如果使用動態身分識別追蹤,系結控制碼的身分識別會在呼叫開始時從執行緒權杖重新整理。 如果使用靜態身分識別追蹤,則會使用系結控制碼上戳記的用戶端身分識別。

當呼叫完成時,一旦收到回應,連線就會標示為免費,並可用於其他 RPC 呼叫。

連線上的安全性身分識別無法變更。 例如,如果相同伺服器的大量呼叫是在不同的安全性身分識別下進行,執行緒集區中的連線數目就會成長。 關聯本身是參考計數,而且當所有參考都消失時,它會停止並關閉所有連線。 每個系結控制碼和每個內容控制碼都會保存關聯上的參考。 當全部關閉時,關聯就會消失。 在 Windows XP 上,關聯不一定會立即消失;如果沒有任何執行緒可以執行工作) ,它們可能會保留一段短的期間, (目標期間是 20 秒,但 RPC 執行時間可能會選擇延遲終結關聯。 如果您不想讓關聯在最後一個內容控制碼/系結控制碼關閉之後保持運作,請使用 [RPC_C_OPT_DONT_LINGER] 選項來強制 RPC 執行時間立即關閉連線。