0

我正在尝试将 asyn CTP 与 WCF 一起使用,但我遇到了问题,因为 Task 不可序列化。

我已经安装了 CTP v3。

是否可以将 asyn CTP 与 WCF 一起使用?是否需要配置比仅安装 CTP 更多的东西?

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

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

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

谢谢。戴姆洛克。

4

2 回答 2

1

我不确定带有 Async CTP 的 VS 2010,但是对于 VS 11 Beta(您可能应该使用它),您可以简单地定义一个返回 a 的操作Task

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

然后使用async

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

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

于 2012-04-27T15:47:46.657 回答
0

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

  1. 客户端异步方法可以通过现有的VS工具生成
  2. 通过服务边界传递任务将需要您编写自己的同步功能。

为服务生成基于客户端 Task<>(因此兼容 async/await)的方法:

  1. 在 VS11 中,存在一个新的复选框:“配置服务参考”对话框中“允许生成异步操作”下的“生成基于任务的方法”。(我相信它还没有记录)
  2. 对于 CTP,您可以使用此处描述的扩展来生成基于任务的方法。
于 2012-08-09T00:11:12.547 回答