作法:建立單向合約
本主題說明的基本步驟可用來建立使用單向合約的方法。 此類方法會從用戶端叫用 Windows Communication Foundation (WCF) 服務上的作業,但是不會期待收到回覆。 例如,您可以使用此合約類型,將通知發行給許多訂閱者。 您也可以在建立雙工 (雙向) 合約時使用單向合約,以供用戶端與伺服器彼此各自進行通訊,並方便任何一方初始化對另一方的呼叫。 這麼做可以特別允許伺服器對用戶端進行單向呼叫,而用戶端會將此呼叫視為事件。 如需指定單向方法的詳細資訊,請參閱 IsOneWay 屬性與 OperationContractAttribute 類別。
如需建立雙面合約用戶端應用程式的詳細資訊,請參閱操作說明:使用單面和要求-回覆合約存取服務。 如需實用範例,請參閱單面範例。
若要建立單向合約
將 ServiceContractAttribute 類別套用至用來定義服務要實作之方法的介面,以建立服務合約。
指出介面中可供用戶端叫用的方法,方法是將 OperationContractAttribute 類別套用到這些方法上。
將 IsOneWay 屬性設為
true
,以便將不得包含輸出的作業 (沒有傳回值,也沒有 out 或 ref 參數) 指定為單向。 請注意,帶有 OperationContractAttribute 類別的作業預設都會滿足要求-回覆合約,因為 IsOneWay 屬性會預設為false
。 因此如果您希望方法使用單向合約,就必須明確地將屬性值指定為true
。
範例
下列程式碼範例定義包含數個單向方法的服務合約。 所有的方法都具有單向合約,除了 Equals
以外,因為它會預設為要求-回覆,並傳回結果。
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples", SessionMode=SessionMode.Required)]
public interface ICalculatorSession
{
[OperationContract(IsOneWay=true)]
void Clear();
[OperationContract(IsOneWay = true)]
void AddTo(double n);
[OperationContract(IsOneWay = true)]
void SubtractFrom(double n);
[OperationContract(IsOneWay = true)]
void MultiplyBy(double n);
[OperationContract(IsOneWay = true)]
void DivideBy(double n);
[OperationContract]
double Equals();
}
<ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples", SessionMode:=SessionMode.Required)> _
Public Interface ICalculatorSession
<OperationContract(IsOneWay:=True)> _
Sub Clear()
<OperationContract(IsOneWay:=True)> _
Sub AddTo(ByVal n As Double)
<OperationContract(IsOneWay:=True)> _
Sub SubtractFrom(ByVal n As Double)
<OperationContract(IsOneWay:=True)> _
Sub MultiplyBy(ByVal n As Double)
<OperationContract(IsOneWay:=True)> _
Sub DivideBy(ByVal n As Double)
<OperationContract()> _
Function Equal() As Double
End Interface