【发布时间】:2014-02-18 06:41:15
【问题描述】:
我正在处理的项目在服务器端使用 WCF 服务(代码在同一个项目中)。我想通过编写一个使用服务的 PCL 来扩展它,并希望使用 Async/Await 模式实现调用。
由于 PCL 从一开始就不支持 Async/Await,因此我通过 Nuget 将 BCL.Async 包添加到项目中。但是每当我尝试生成代理时,无法选择基于任务的异步客户端,即生成。在 PCL 中似乎也无法通过 ChannelFactory 手动添加代理。
我当前的方法是生成代理复制 ref 类,然后使用TPL 提供的任务包装器自己编写异步/等待模式。但是有没有更简单的方法?如何直接使用 async/await 模式手动编写包装器而不生成多个具有相同效果的异步模式?
【问题讨论】:
-
不要使用 TPL/
Task.Run来“包装”您的 WCF 调用。你没有做真正的无线程异步,假设你实际上是在嵌入式设备上工作,这将产生巨大的影响。但是,您可以使用Task.Factory.FromAsync(BeginXXX,EndXXX)方法……它可以正常工作。 -
@Aron,感谢您的意见。 TPL 链接实际上直接指向您提到的方法,所以我想这将是正确的路径,除非我可以以某种方式编写/生成基于任务的 wcf 客户端..
-
我知道有两种方法。第一个是为您的接口使用直接引用(而不是 WSDL)(我建议,当您的客户端和服务器是从同一个 repo 开发时)。第二种,使用
partial关键字手动添加异步方法。 -
@Mark - 你得到任何正确的答案了吗?你能和我们分享吗?我也被这种情况困住了!...
-
@Dennis 我还不在那里.. 但是一旦我有一个可行的解决方案,我会发布更新..
标签: c# wcf async-await portable-class-library