如何:创建单向协定

本主题演示了创建使用单向协定的方法所需的基本步骤。 此类方法从客户端调用 Windows Communication Foundation (WCF) 服务上的操作,但不期望得到答复。 例如,可以使用这种类型的协定将通知发布给许多订户。 在创建双工(双向)协定(可使得客户端和服务器可以独立地相互通信,这样双方都可以启动对另一方的呼叫)时,还可以使用单向协定。 具体而言,这样做可允许服务器对客户端进行单向呼叫,而客户端可以将这些呼叫视为事件。 有关指定单向方法的详细信息,请参见 IsOneWay 属性和 OperationContractAttribute 类。

有关创建双工协定的客户端应用程序的详细信息,请参阅如何:使用单向和请求-答复协定访问服务。 有关工作示例,请参阅单向示例。

创建单向协定

  1. 通过将 ServiceContractAttribute 类应用到定义服务将要实现的方法的接口,创建服务协定。

  2. 通过将 OperationContractAttribute 类应用到相应的方法,指示客户端可以调用接口中的哪些方法。

  3. 通过将 IsOneWay 属性设置为 true,可将不得具有输出(没有返回值且没有 out 参数或 ref 参数)的操作指定为单向操作。 注意,默认情况下,使用 OperationContractAttribute 类的操作都满足请求-答复协定,原因是默认情况下 IsOneWay 属性为 false。 因此,如果需要对方法使用单向协定,则必须将 attribute 属性的值显式指定为 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

另请参阅