正在启动
该IsInitiating
参数指定关联方法实现的操作是否可以在服务器上发起会话。会话实例化是为每个客户端通道维护一个类的单独实例的能力。此属性控制是否允许某个操作成为创建会话时调用的第一个操作。该参数的默认值为true
,表示指定的操作可以在通道上首先被调用。在这种情况下,对该方法的所有后续调用都无效(这意味着不会创建其他会话)。如果此参数设置为false
,则客户端在调用此方法之前被强制调用其他方法。
当您尝试设置“操作顺序”时,这会派上用场,这意味着您需要首先调用特定方法,因为调用的其他方法取决于从第一个方法返回的内容。
例如,下面包含三个方法,或者服务操作。第一个操作创建会话并且必须是第一个调用的方法。最后的操作 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
属性指定调用的服务操作是否要终止通信会话。以下示例显示了最后一次调用 ,
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 仅在回复到达客户端后关闭通道。