将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服务的一个实例。
这样也行吗?似乎没有,就好像它在返回之前等待线程完成一样。
发布于 2009-12-14 23:32:02
这些是非常不同的。
在概念层面上,IsOneWay=true说消息传递模式是“触发和遗忘”,而不是“请求-响应”。也就是说,IOW=true意味着有一个消息从客户端到服务器,而不是一个答复从服务器到客户端。相反,一个非IOW=true方法通常会有一个响应消息,即使返回类型是无效的(例如“空”消息)。
异步模式用于客户端代码的行为-例如,它是否阻止等待返回值。异步是一件“本地”的事情,详细信息请参见这个博客。您可以拥有同步服务器的异步客户端或异步服务器的同步客户端。WCF将在引擎盖下发挥神奇的作用,为您提供任何一个编程模型。如果您有一个请求响应消息传递模式,并使用“Generate异步”,则生成的客户端将给您提供一个方法,您可以调用异步(例如发送消息,并在回复到达时得到回调)。
因此,使用“异步”表示“本地编程模型”,使用IOW表示“在线消息传递”。
注意,在您的示例中,如果您标记了IOW=true方法,那么我认为服务器代码中没有理由使用Thread.Start()。您可以直接在WCF提供给服务器的线程上完成工作。
https://stackoverflow.com/questions/1904207
复制相似问题