OperationContractAttribute.IsInitiating 属性

定义

获取或设置一个值,该值指示方法是否实现可在服务器上启动会话(如果存在会话)的操作。

public:
 property bool IsInitiating { bool get(); void set(bool value); };
public bool IsInitiating { get; set; }
member this.IsInitiating : bool with get, set
Public Property IsInitiating As Boolean

属性值

Boolean

如果允许操作启动服务器上的会话,则为 true;否则为 false。 默认值为 true

示例

下面的示例演示了一个服务,该服务实现指定三种方法的服务协定。 该服务需要会话。 如果调用方第一次调用的是除 MethodOne 以外的任何操作,则会拒绝该信道并且会引发异常。 调用方通过调用 MethodOne 启动会话时,可通过调用 MethodThree 随时终止通信会话。 MethodTwo 可以在会话期间调用任意次数。

[ServiceContract(SessionMode=SessionMode.Required)]  
public class InitializeAndTerminateService  
{  
  [OperationContract(  
    IsOneWay=true,  
    IsInitiating=true,  
    IsTerminating=false  
  )]  
  public void MethodOne()  
  {  
    return;  
  }  

  [OperationContract(  
    IsInitiating=false,  
    IsTerminating=false  
  )]  
  public int MethodTwo(int x, out int y)  
  {  
    y = 34;  
    return 0;  
  }  

  [OperationContract(  
    IsOneWay=true,  
    IsInitiating=false,  
    IsTerminating=true  
  )]  
  public void MethodThree()  
  {  
    return;  
  }  
}  

注解

IsInitiating 属性控制操作是否可以是创建会话时调用的第一个操作。

备注

ServiceContractAttribute.SessionMode 的值必须为 AllowedRequired 且使用的绑定必须要求或允许会话,IsInitiating 属性才能正常工作。

默认为 true,这意味着操作可以是通道上调用的第一个操作。 除了调用该方法之外,后续的调用对于启动方法无效。 不会创建其他任何会话。 如果协定不使用会话,则将 IsInitiating 设置为 false 会被忽略。

通常,将 IsInitiating 设置为 false 可强制客户端在调用此方法之前,调用服务上的另一个方法。 例如,如果您的服务具有一系列取决于订单 ID 号的操作,可将一个 IsInitiating 服务操作的 true 设置为 GetOrderId,并将所有其他的服务操作设置为 false。 这将确保使用由该服务公开的其他方法之前,每个新的客户端都获得一个订单 ID。

备注

IsInitiatingAction 属性之间存在交互操作。 服务协定只能有一个 Action 属性设置为“*”的服务操作。 当属性设置为“”时IsInitiatingfalse,服务类实现的同一侦听 URI 上托管的任何服务协定都可以具有许多服务操作,Action该属性设置为“*”。 但是,只有其中一个服务方法可以将 Action 属性设置为“*”,属性 IsInitiating 设置为 true

如果服务收到非启动操作的消息,则该服务返回 ActionNotSupported SOAP 错误。 客户端将这种情况当作 FaultException。 如果客户端首先调用非启动操作,则客户端运行库会引发 System.InvalidOperationException

有关详细信息,请参阅使用会话

适用于