WCF:异步CTP:是否可以使用?

时间:2012-04-27 15:07:03

标签: wcf async-ctp

我正在尝试使用带有WCF的asyn CTP,但我遇到了问题,因为Task不可序列化。

我已经安装了CTP v3。

是否可以在WCF中使用asyn CTP?是否需要配置比仅安装CTP更多的东西?

我在想如果不能使用异步CTP jet,也许不是在服务端使用异步CTP,我可以用异步CTP实现异步方法,调用服务的常规方法(不是异步方法) 。这是一个不错的选择吗?在这种情况下,服务不会实现异步方法。

其他选项在服务端,使用begin / end方法实现异步方法,使用Task.Factory.FromAsync方法将这两个方法包装在任务中。但这是更多的工作。

所以我的问题是,如果我希望客户端在等待服务响应时没有被阻止,我可以使用两种解决方案。首先在调用服务的常规方法的客户端中使用异步CTP,或者使用Task.Factory.FromAsync在服务中使用异步方法。哪个是最好的选择?为什么呢?

感谢。 Daimroc。

2 个答案:

答案 0 :(得分:1)

我不确定使用Async CTP的VS 2010,但是使用VS 11 Beta(无论如何都应该使用它),您只需定义一个返回Task的操作:

[OperationContract]
Task<string> GetData(int value);

然后使用async实现它:

public async Task<string> GetData(int value)
{
    return await …;
}

我认为相同的方法适用于Async CTP,但这只是一个假设。

答案 1 :(得分:0)

实现非阻塞客户端调用的最简单方法是在客户端,原因有两个:

  1. 客户端异步方法可以由现有的VS工具生成
  2. 通过服务边界传递任务需要您编写自己的同步功能。
  3. 生成客户端任务&lt;&gt;基于(以及因此异步/等待兼容)的服务方法:

    1. 在VS11中,存在一个新复选框:“配置服务引用”对话框中的“允许生成异步操作”下的“生成基于任务的方法”。 (我相信它还没有记录)
    2. 对于CTP,您可以使用here描述的扩展来生成基于任务的方法。
相关问题