首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WCFFacility中使用基于客户端任务的操作

在WCFFacility中使用基于客户端任务的操作
EN

Stack Overflow用户
提问于 2013-08-18 18:49:52
回答 1查看 689关注 0票数 2

我想利用WCF客户端新的基于任务的操作。我目前使用的WCFFacility如下:

代码语言:javascript
复制
container.Register(Component
    .For<IAdminService>()
    .LifeStyle.Transient
    .AsWcfClient(new DefaultClientModel()
    {
        Endpoint = WCFHelpers.BasicHttp(settings.MaxReceivedMessageSize)
            .At(addr)
    }));

其中IAdminService是ServiceContract类。有关基于任务的操作的所有MSDN文章都提到在导入服务引用时设置“基于任务的操作”复选框。但是在我目前使用的样式中,没有导入的服务引用,因为我简单地直接引用了服务契约接口。

因此,我想知道如何才能支持基于任务的操作,同时对当前代码进行最少的更改。

BTW - WCFHelpers是一个生成BindEndpointModel的实用工具类,在执行此代码之前,addr被设置为适当的端点地址。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-05 10:59:44

WCFFacility提供了一些符合旧异步模式的扩展方法。这些可以很容易地转换为任务。

尝试以下扩展方法:

代码语言:javascript
复制
public static class ClientExtensions
{
    public static async Task<TResult> CallAsync<TProxy, TResult>(this TProxy proxy, Func<TProxy, TResult> method)
    {
        return await Task.Factory.FromAsync(proxy.BeginWcfCall(method), ar => proxy.EndWcfCall<TResult>(ar));
    }

    public static async Task CallAsync<TProxy>(this TProxy proxy, Action<TProxy> method)
    {
        await Task.Factory.FromAsync(proxy.BeginWcfCall(method), ar => proxy.EndWcfCall(ar));
    }
}

在异步方法中,可以这样调用它们:

代码语言:javascript
复制
// Func<T>
var result = await client.CallAsync(p => p.SayThisNumber(42));

// Action
await client.CallAsync(p => p.DoSomething());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18302560

复制
相关文章

相似问题

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