關於對等散發

對等散發 API,其支援 Windows 7、Windows Server 2008 R2、Windows 8和Windows Server 2012中的分支快取功能,提供一組平臺 API,可在從遠端辦公室存取時增加集中式應用程式的網路回應能力,並協助減少整體廣域網路 (WAN) 使用率,而不會干擾網路安全性技術。

對等發佈系統提供一組平臺 API,供提供數位內容和要求其取用者的發行者使用。 為了輕鬆區分這些角色,在伺服器角色中和用戶端角色中的取用者中,可能會更容易考慮發行者。 除此之外,請務必記住,除了這些概念角色之外,對等發佈服務是真正的對等系統,如發佈及取用數位內容的任何對等發佈節點的能力所指出。 對等散發平臺 API 會由 Win32 匯入程式庫公開給發行者和取用者, (PeerDist.Lib) 。

發行者提供且取用者使用對等散發服務擷取的內容生命週期是由下列作業所組成:

描述
內容發行集 發佈會完成以產生內容字詞為「 內容資訊」或「 內容資訊 」的描述。 然後,對等發佈服務的實例可以使用此內容資訊來驗證和重建內容。 當應用程式將內容發佈至對等發佈服務時,即為伺服器端作業,該內容會變成與「發行者身分識別」建立關聯的,該身分識別是以與執行緒存取權杖相關聯之使用者的 SID 為基礎。 此系結是為了限制未經授權的實體存取內容。 不過,請務必注意,存取內容資訊相當於存取內容本身,因為內容資訊可用來從對等或託管快取取得內容。
Windows 8中有新版本的內容資訊資料結構;不過,仍支援舊版。 若要與 Windows 7 用戶端互通,系統管理員可能會設定對等發佈服務,以使用舊版的內容資訊資料結構。
內容擷 若要讓取用者從對等發佈服務擷取內容,必須將存取權提供給與該內容相關聯的已發佈內容資訊。 用來發佈內容的對等發佈服務可以提供相關聯的內容資訊。 取用者擁有內容資訊之後,其他對等發佈 API 可用來向對等發佈服務要求內容。 對等發佈服務會嘗試從區域網路擷取內容。 如果內容無法使用,用戶端應用程式會負責從來源伺服器擷取內容。
移除發行集 對於已將內容發佈至對等發佈服務的應用程式,已提供 PeerDistServerUnpublish 函式以允許取消發佈內容。 一旦取消發佈內容之後,本機對等發佈服務將不再提供與該內容相關聯的內容資訊。

非同步完成

對等散發 API 支援非同步 API 模型,因此對等散發 API 允許使用 I/O 完成埠或事件作為處理非同步對等散發作業完成的訊號機制。 針對任一機制,對等分配會使用 OVERLAPPED 結構。 一般而言,對等散發會取得 重迭 結構的擁有權,以及用戶端傳遞給非同步 API 函式的任何 out 參數。 用戶端必須先完成特定的非同步函式,才能存取這些資源。 非同步函式完成之後,對等散發服務就不再需要存取這些資源,而且當呼叫的應用程式看到適合時,可能會重複使用它們。

如果函式傳回 ERROR_IO_PENDING以外的任何錯誤碼,則不會有任何非同步完成。 ERROR_IO_PENDING 以外的值 傳回表示呼叫已同步失敗。 如果對等散發 API 傳回 ERROR_IO_PENDING,呼叫端必須等候非同步完成。

非同步完成的錯誤碼可以用下列兩種方式之一擷取:

I/O 完成埠型完成

使用者藉由提供下列 API 函式的完成埠控制碼和完成金鑰,叫用 I/O 完成埠機制:

PeerDistRegisterForStatusChangeNotification
PeerDistServerPublishStream
PeerDistServerOpenContentInformation
PeerDistClientOpenContent

使用者藉由呼叫 CreateIoCompletionPort來建立完成埠。 此完成埠控制碼可以同時用於其他非同步 I/O 作業,以及對等散發特定作業。

呼叫端應該使用 GetQueuedCompletionStatus 函式來管理非同步完成。 如果非同步作業失敗, GetQueuedCompletionStatus 函式會傳回 FALSE而 GetLastError 會傳回適當的錯誤碼。 如果錯誤碼不是ERROR_SUCCESS,則呼叫端應該忽略重迭結構的所有欄位。 如果 GetQueuedCompletionStatus 函式傳回 TRUE,非同步作業就會成功。

如需詳細資訊,請參閱 I/O 完成埠

事件型完成

如果呼叫端將有效的事件控制碼設定為重迭結構的hEvent欄位,對等散發會使用它來發出關聯的非同步 I/O 作業已完成的訊號。

執行緒呼叫端可以在其中一個等候函式中指定 迭結構的手動重設事件物件的控制碼,以管理重迭的作業。 收到事件訊號之後,呼叫端必須呼叫 PeerGetOverlappedResult ,以傳入適當的 OVERLAPPED 結構。 PeerGetOverlappedResult 會傳回 FALSE ,呼叫端必須呼叫 GetLastError 才能擷取錯誤碼。 如果錯誤碼不是ERROR_SUCCESS,則呼叫端應該忽略重迭結構的所有欄位。 如果 PeerGetOverlappedResult 函式傳回 TRUE,非同步作業就會成功。

如果呼叫端提供完成埠以及事件,事件將會當做完成機制使用。

Windows 7: 使用 GetOverlappedResult 函式,而不是 PeerGetOverlappedResult

對等散發 API 參考