【发布时间】:2015-08-30 22:05:32
【问题描述】:
我有一个关于 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;
}
}
我没有收到任何类型的错误,只是没有获取所需的数据。
提前谢谢你。
【问题讨论】:
-
可以调试服务端吗?
-
@GlenThomas 是的,我可以。调试器可以很好地进入服务方法的(OperationContract 实现)主体,但在“return”语句之后它不会返回给客户端。我想要的值在服务器上,只是由于某种原因它永远不会到达客户端。
标签: c# wcf asynchronous