IsInitiating
IsInitiating参数指定一个操作是否由关联方法实现
可以在服务器上发起会话。会话实例化是拥有一个类的单独实例的能力
为每个客户渠道维护。此属性控制是否允许操作
创建会话时调用的第一个操作。此参数的默认值为true,这意味着
指定的操作可以在一个通道上首先被调用。在这种情况下,所有以下对此方法的调用
没有效果(意思是,没有创建其他会话)。如果此参数设置为false,则强制客户端
在调用此方法之前调用其他方法。
当您尝试设置“操作顺序”时,这会派上用场,这意味着您需要特定的
首先调用方法,因为调用的其他方法依赖于从
第一种方法。
例如,下面包含三个方法,或者服务操作。第一个操作创建
session 并且必须是第一个调用的方法。最后的操作 Logout 关闭会话:
[ServiceContract]
public interface IBuyStock
{
[OperationContract(IsInitiating = true, IsTerminating = false)]
void Login(user);
[OperationContract(IsInitiating = false, IsTerminating = false)]
void BuyStock(string stocksymbol, int quantity);
[OperationContract(IsInitiating = false, IsTerminating = true)]
void Logout(user);
}
一旦调用了启动方法,后续调用该方法就没有效果了
到它的初始属性。
如果先调用初始化方法以外的任何方法,则返回如下错误:
The operation ‘operationname’ cannot be the first operation to be called because
IsInitiating is false.
必须先调用初始化方法,然后才能调用其他操作。
IsOneWay
默认情况下服务通信是双向的。双向服务通信意味着一个
服务操作可以接收传入的消息并发送回复。
IsOneWay 参数指定服务操作是否返回回复消息。默认
该参数的值为false,表示该方法不返回回复消息。
以下示例说明了一种单向通信:
[ServiceContract]
public interface IBuyStock
{
[OperationContract(IsOneWay = true)]
void Login(user);
[OperationContract(IsOneWay = false)]
void BuyStock(string stocksymbol, int quantity);
}
在单向通信中,客户端发起通信并继续执行代码并
不等待服务的响应。在双向通信中,它等待来自
继续执行代码之前的服务。
使用单向通信的缺点是调用者无法知道是否
服务成功处理了消息。
任何返回 IsOneWay 属性设置为 false 的值的方法都将返回异常。
IsTerminating
IsTerminating 属性指定调用的服务操作是否要终止通信
会议。以下示例显示了最后一次调用,
Logout(),将IsTerminating 属性设置为true:
[ServiceContract]
public interface IBuyStock
{
[OperationContract(IsInitiating = true, IsTerminating = false)]
void Login(user);
[OperationContract(IsInitiating = false, IsTerminating = false)]
void BuyStock(string stocksymbol, int quantity);
[OperationContract(IsInitiating = false, IsTerminating = true)]
void Logout(user);
}
当IsTerminating属性设置为true时,发送回复消息后会话关闭(如果
需要发送回复消息)。在客户端,IsTerminating 值 true 告诉 WCF 关闭
只有在回复到达客户端后才进入频道。