WCF异步调用不返回数据

时间:2015-08-30 22:05:33

标签: c# wcf asynchronous

我遇到了有关WCF Web服务方法的异步调用的问题。当使用await运算符调用时,它拒绝返回请求的对象。调用其同步对应项工作正常或使用Task<>上的Result属性。它返回的对象。它是从作为客户端的WPF应用程序主线程调用的。我没有玩线程公寓,只是留下了生成的一切 我真的不明白,我已经创建了一个简单的控制台测试应用程序,添加了相同的服务引用和异步调用工作正常。 我正在使用Visual Studio 2013。

    public async Task<GetComputerResponse> GetComputer(int computerId)
    {
        try
        {
            _client = new ServiceClient(_endpoint);
            _client.Open();

            GetComputerRequest request = new GetComputerRequest()
            {
                ComputerId = computerId
            };

            var result = await _client.GetComputerAsync(request); // the debugger seems to stop execution here, refuses to break at the very next line
            /* _client.GetComputer(request) or await _client.GetComputerAsync(request).Result work as expected */
            _client.Close();
            return result;
        }
        catch (Exception)
        {
            _client.Abort();
            return null;
        }
    }

我没有收到任何类型的错误,它根本无法获取所需的数据 提前谢谢。

1 个答案:

答案 0 :(得分:1)

添加对ConfigureAwait的调用并传递false作为continueOnCapturedContext值似乎解决了问题。
它与从主线程UI线程调用的异步代码有关,导致死锁。所以快速研究说,至少。不幸的是,目前我还没有足够的时间去了解它。

var result = await _client.GetComputerAsync(request).ConfigureAwait(false);