OperationContractAttribute.IsInitiating 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置一个值,该值指示方法是否实现可在服务器上启动会话(如果存在会话)的操作。
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
属性值
如果允许操作启动服务器上的会话,则为 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 的值必须为 Allowed 或 Required 且使用的绑定必须要求或允许会话,IsInitiating 属性才能正常工作。
默认为 true
,这意味着操作可以是通道上调用的第一个操作。 除了调用该方法之外,后续的调用对于启动方法无效。 不会创建其他任何会话。 如果协定不使用会话,则将 IsInitiating 设置为 false
会被忽略。
通常,将 IsInitiating 设置为 false
可强制客户端在调用此方法之前,调用服务上的另一个方法。 例如,如果您的服务具有一系列取决于订单 ID 号的操作,可将一个 IsInitiating 服务操作的 true
设置为 GetOrderId
,并将所有其他的服务操作设置为 false
。 这将确保使用由该服务公开的其他方法之前,每个新的客户端都获得一个订单 ID。
备注
IsInitiating 和 Action 属性之间存在交互操作。 服务协定只能有一个 Action 属性设置为“*”的服务操作。 当属性设置为“”时IsInitiatingfalse
,服务类实现的同一侦听 URI 上托管的任何服务协定都可以具有许多服务操作,Action该属性设置为“*”。 但是,只有其中一个服务方法可以将 Action 属性设置为“*”,属性 IsInitiating 设置为 true
。
如果服务收到非启动操作的消息,则该服务返回 ActionNotSupported SOAP 错误。 客户端将这种情况当作 FaultException。 如果客户端首先调用非启动操作,则客户端运行库会引发 System.InvalidOperationException。
有关详细信息,请参阅使用会话。