gpt4 book ai didi

.net - [OperationContract(IsOneWay = true)] 和勾选生成的异步操作复选框有什么区别?

转载 作者:行者123 更新时间:2023-12-04 10:59:02 26 4
gpt4 key购买 nike

标记 WCF 方法有什么区别
[OperationContract(IsOneWay = true)]
属性并检查 生成异步 添加服务引用时的操作复选框?

从我读到的内容来看,调用的异步性质似乎只能在客户端定义。
如果是这样,[OperationContract(IsOneWay = true)] 的意义何在? ?

现在,我只是在 WCF 方法中运行以下方法。

 public void UpdateIndex(IndexElement[] indexElements)
{
// start the update on a new thread.
Thread thread = new Thread(() => UpdateIndexThread(indexElements));
thread.Start();
}

我在客户的代码中创建了一个服务引用,我只需调用:
indexerClient.UpdateIndex(indexElements);

哪里 indexerClient是我的 WCF 服务的一个实例。

这也应该起作用吗?它似乎没有,它几乎就像在返回之前等待线程完成一样。

最佳答案

这些是非常不同的。

在概念层面上,IsOneWay=true 表示消息传递模式是“即发即忘”,而不是例如“请求-响应”。即 IOW=true 表示有消息从客户端到服务器,但没有从服务器到客户端的回复。相比之下,非 IOW=true 方法通常会有响应消息,即使返回类型为 void(例如“空”消息)。

异步模式用于客户端代码的行为 - 例如它是否阻止等待返回值。异步是一个“本地”的东西,见 this blog详情。你可以有一个同步服务器的异步客户端或一个异步服务器的同步客户端。 WCF 将在幕后施展魔法,为您提供任一编程模型。如果你有例如请求-响应消息传递模式并使用“生成异步”,生成的客户端将为您提供例如您可以调用异步的方法(例如发送消息,并在回复到达时获得回调)。

因此,将“异步”用于“本地编程模型”,并将 IOW 用于“在线消息传递”。

请注意,在您的示例中,如果您将方法标记为 IOW=true,那么我认为服务器代码中没有理由使用 Thread.Start()。您可以直接在 WCF 为您的服务器提供的线程上完成工作。

关于.net - [OperationContract(IsOneWay = true)] 和勾选生成的异步操作复选框有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1904207/

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