gpt4 book ai didi

wcf - WCF OperationContract中IsInitiating和IsOneWay的含义

转载 作者:行者123 更新时间:2023-12-04 19:39:53 27 4
gpt4 key购买 nike

我是 WCF 的新手。经常关注 wcf 代码和文章。在查看了许多代码之后,我经常坚持非常基本的事情并且没有对以下问题进行详细讨论。所以这是我的几个基本问​​题....并寻找示例情况和示例代码的详细讨论。

[OperationContract(IsInitiating=false, IsOneWay=false)]
bool Add_Contact(int sessionkey, string Newusrname);

IsInitiating=false 或 true 的含义是什么。我应该什么时候设置它是真还是假? IsOneWay=false 或 true 的含义是什么。我应该什么时候将其设置为 true 或 false?

我相信我的问题是非常基本的,而且每次都有很多学者关注这个论坛。我希望我能在许多情况下得到详细的最佳答案,比如当一个人应该选择哪个选项而不是其他选项时,模拟情况的示例代码很少。谢谢

最佳答案

IsInitiating

IsInitiating 参数指定一个操作是否由关联的方法实现可以在服务器上发起 session 。 session 实例化是拥有一个类的单独实例的能力为每个客户 channel 维护。此属性控制是否允许操作创建 session 时调用的第一个操作。此参数的默认值为 true,这意味着指定的操作可以在 channel 上首先调用。在这种情况下,此方法的所有后续调用没有效果(意思是,没有创建其他 session )。如果此参数设置为false,则强制客户端在调用此方法之前调用其他方法。

当您尝试设置“操作顺序”时,这会派上用场,这意味着您需要一个特定的方法首先被调用,因为调用的其他方法依赖于从第一种方法。

例如,下面包含三个方法,或者服务操作。第一个操作创建session 并且必须是第一个被调用的方法。最后一个操作,注销,关闭 session :

[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 属性指定调用的服务操作是否要终止通信 session 。以下示例显示了最后一次调用,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 时, session 在回复消息发送后关闭(如果需要发送回复消息)。在客户端,trueIsTerminating 值告诉 WCF 关闭仅在回复到达客户端后才发送 channel 。

关于wcf - WCF OperationContract中IsInitiating和IsOneWay的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14136950/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com