首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[OperationContract(IsOneWay = true)]和检查生成的异步操作复选框之间有什么区别?

[OperationContract(IsOneWay = true)]和检查生成的异步操作复选框之间有什么区别?
EN

Stack Overflow用户
提问于 2009-12-14 23:15:20
回答 1查看 5.2K关注 0票数 8

将WCF方法标记为

[OperationContract(IsOneWay = true)]

属性并在添加服务引用时检查生成异步操作复选框?

据我所读,似乎只应该在客户端定义调用的异步性质。如果是这样的话,[OperationContract(IsOneWay = true)]的意义是什么?

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

代码语言:javascript
复制
 public void UpdateIndex(IndexElement[] indexElements)
    {
        // start the update on a new thread.
        Thread thread = new Thread(() => UpdateIndexThread(indexElements));
        thread.Start();
    }

我在客户端代码中创建了一个服务引用,我只需调用:

代码语言:javascript
复制
indexerClient.UpdateIndex(indexElements);

其中indexerClient是我的WCF服务的一个实例。

这样也行吗?似乎没有,就好像它在返回之前等待线程完成一样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-14 23:32:02

这些是非常不同的。

在概念层面上,IsOneWay=true说消息传递模式是“触发和遗忘”,而不是“请求-响应”。也就是说,IOW=true意味着有一个消息从客户端到服务器,而不是一个答复从服务器到客户端。相反,一个非IOW=true方法通常会有一个响应消息,即使返回类型是无效的(例如“空”消息)。

异步模式用于客户端代码的行为-例如,它是否阻止等待返回值。异步是一件“本地”的事情,详细信息请参见这个博客。您可以拥有同步服务器的异步客户端或异步服务器的同步客户端。WCF将在引擎盖下发挥神奇的作用,为您提供任何一个编程模型。如果您有一个请求响应消息传递模式,并使用“Generate异步”,则生成的客户端将给您提供一个方法,您可以调用异步(例如发送消息,并在回复到达时得到回调)。

因此,使用“异步”表示“本地编程模型”,使用IOW表示“在线消息传递”。

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

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1904207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档