共用方式為


使用 HTTP、TCP 或具名管道的非同步案例

本主題會說明各種非同步要求/回覆案例的活動和傳輸,以及使用 HTTP、TCP 或具名管道的執行緒要求。

無錯誤的非同步要求/回覆

本章節會說明非同步要求/回覆案例的活動和傳輸,以及多執行緒的用戶端。

beginCall 傳回,而且 endCall 傳回時,呼叫端活動便會終止。 如果有呼叫回呼,該回呼就會傳回。

beginCall 傳回,而且 endCall 傳回,或是當回呼 (若有從活動呼叫) 傳回時,呼叫的活動便會終止。

沒有回呼的非同步用戶端

兩端皆啟用傳播,使用 HTTP

Asynchronous client with no callback where propagateActivity is set to true on both sides.

如果 propagateActivity=true,ProcessMessage 會指示要傳輸哪一個 ProcessAction 活動。

若是 HTTP 架構案例,ReceiveBytes 會叫用於第一個要傳送的訊息上,並隨該要求的存留期而保留。

任何一端的傳播已停用,使用 HTTP

如果在任一端 propagateActivity=false,ProcessMessage 不會指示要傳輸到哪一個 ProcessAction 活動。 因此,這時會叫用含有新識別碼的新暫存 ProcessAction 活動。 當非同步回應符合 ServiceModel 程式碼中的要求時,該活動識別碼即可從本機內容進行擷取。 實際的 ProcessAction 活動可以透過該識別碼加以傳輸。

Asynchronous client with no callback where propagateActivity is set to false on either side.

若是 HTTP 架構案例,ReceiveBytes 會叫用於第一個要傳送的訊息上,並隨該要求的存留期而保留。

當呼叫端或被呼叫端的 propagateActivity=false,而且回應訊息不包含動作標頭時,非同步用戶端上就會建立「處理動作」活動。

兩端皆啟用傳播,使用 TCP 或具名管道

Asynchronous client with no callback where propagateActivity is set to true on both sides and named pipe/TCP.

若是具名管道或 TCP 架構案例,ReceiveBytes 會叫用於用戶端開啟時,並隨該連線的存留期而保留。

類似於第 1 個圖,如果 propagateActivity=true,ProcessMessage 會指示要傳輸到哪一個 ProcessAction 活動。

任何一端的傳播已停用,使用 TCP 或具名管道

若是具名管道或 TCP 架構案例,ReceiveBytes 會叫用於用戶端開啟時,並隨該連線的存留期而保留。

類似於第 2 個圖,如果在任一端 propagateActivity=false,ProcessMessage 不會指示要傳輸到哪一個 ProcessAction 活動。 因此,這時會叫用含有新識別碼的新暫存 ProcessAction 活動。 當非同步回應符合 ServiceModel 程式碼中的要求時,該活動識別碼即可從本機內容進行擷取。 實際的 ProcessAction 活動可以透過該識別碼加以傳輸。

Asynchronous client with no callback where propagateActivity is set to false on either side and named pipe/TCP.

有回呼的非同步用戶端

這個案例會為回呼和 endCall 新增活動 G 和 A’,及其傳入/傳出。

本章節只有示範搭配 propagateActivity=true 來使用 HTTP。 不過,另外增加的活動和傳輸也適用於其他情況 (也就是 propagateActivity=false,使用 TCP 或具名管道)。

當用戶端呼叫使用者程式碼以通知結果已準備好時,該回呼就會建立新活動 (G)。 然後,使用者程式碼便會從回呼內部 (如圖 5 所示) 或回呼外部 (圖 6) 呼叫 endCall。 由於不知道是從哪個使用者活動 endCall 呼叫 ,因此這個活動會標記為 A’。 A’ 有可能相同或不同於 A。

Shows an asynchronous client with callback, endcall in callback.

Shows an asynchronous client with callback, endcall outside callback.

有回呼的非同步伺服器

Shows an asynchronous server with callback.

通道堆疊會在訊息接收時回呼用戶端:這個處理的追蹤會由 ProcessRequest 活動本身發出。

含有錯誤的非同步要求/回覆

endCall 期間會收到錯誤 (Fault) 訊息錯誤 (Error)。 在其他方面,活動和傳輸都與上述案例相似。

不一定具有錯誤的非同步單向

沒有任何回應或錯誤傳回到用戶端。