OperationContractAttribute.AsyncPattern 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示作業是使用 Begin
< 服務合約中的methodName> 和 End
<methodName> 方法組,以非同步方式實作。
public:
property bool AsyncPattern { bool get(); void set(bool value); };
public bool AsyncPattern { get; set; }
member this.AsyncPattern : bool with get, set
Public Property AsyncPattern As Boolean
屬性值
true
如果 methodName 方法與 End
<methodName>> 方法相符,而且基礎結構可以視為在服務介面上實作為非同步方法組的作業,則為 ,否則 false
為 。 Begin
< 預設為 false
。
範例
下列程式碼範例示範用戶端通道至一個服務合約,該合約同時包含 Add
的同步版與非同步版。 若用戶端使用該合約介面,則 BeginAdd
與 Add
作業會叫用伺服器上的方法,而該方法可能是同步的,也可能是非同步的。 若使用該合約來實作服務,則傳入要求預設會分派給同步版方法。
[ServiceContract]
public interface IAddTwoNumbers
{
// If the asynchronous method pair
// appears on the client channel, the client can call
// them asynchronously to prevent blocking.
[OperationContract (AsyncPattern=true)]
IAsyncResult BeginAdd(int a, int b, AsyncCallback cb, AsyncState s);
[OperationContract]
int EndAdd(IAsyncResult r);
// This is a synchronous version of the BeginAdd/EndAdd pair.
// It appears in the client channel code by default.
[OperationContract]
int Add(int a, int b);
}
備註
使用 AsyncPattern 屬性建置服務作業,伺服器、用戶端或兩者上可非同步呼叫該作業。
AsyncPattern 屬性通知執行階段某個 Begin
方法有符合的 End
方法,它們符合 .NET 架構的非同步方法設計模式。 建置實作服務作業的伺服器非同步方法,可提升伺服器延展性與效能,而不會影響服務用戶端。若某項服務作業必須傳回某些資訊給用戶端,但執行時間較長,又可採用非同步方式執行,則建議採用此種做法。
用戶端不受影響,因為伺服器上的非同步方法組是實作細節,不影響該作業的基礎 Web 服務描述語言 (WSDL) 描述。 這類方法會以單一作業的形式向用戶端顯示,其中包含 <input>
和相互關聯的 <output>
訊息。 WCF 會自動將輸入訊息路由傳送至 Begin
<methodName> 方法,並將methodName> 呼叫的結果 End
< 路由傳送至輸出訊息。 因此,用戶端通道可將該方法組表示成單一同步作業或非同步作業組。 用戶端的表示方式絕對不會影響到伺服器上的非同步實作。
用戶端合約可使用 AsyncPattern 屬性表示一組非同步方法組,用戶端可使用此方法組以非同步方式叫用該作業。 一般而言,用戶端應用程式會使用ServiceModel 中繼資料公用程式工具 (Svcutil.exe) 工具和 /async
選項來產生 Begin
<方法Name> 和 End
<methodName> 方法組,用戶端可用來以非同步方式叫用作業。
注意
若服務作業同時有同步版與非同步版,則服務的預設行為是叫用同步版。