我编写了一个简单的WCF服务,当我调试项目时,我得到一个WCF客户端窗口,其中每个服务方法都有一个async()版本(例如,对于来自服务的方法ConnectMessages(),有一个新方法GetMessagesAsync()。但是,异步方法被遮蔽并用红色标记x'并且以下标题:
wcf测试客户端不支持此操作,因为它使用system.threading.tasks.task
我的问题是:为什么每个方法都有一个异步版本,为什么这些异步标记为无效?这是什么意思?
答案 0 :(得分:-1)
当我们通常调用服务方法时,我们的代码按顺序执行并等待服务返回的响应并阻止代码执行,当我们使用异步方法时,我们的代码不会阻塞并继续它的执行和服务在返回响应时触发事件。
如果我已同步呼叫服务:
var result = ReportClientObj.GetUserCoordinatesReport(searchParams);
if(result == null) // this line will not ewxecute until above line of code executes and completes
{
// do something
}
如果我使用异步代码执行不会停止:
var result = ReportClientObj.GetUserCoordinatesReportAsync(searchParams);
if(result == null) // this line will execute and will not wait for above call to complete due to asynshronous call and this will bang
{
// do something
}
为了在Async中执行上述操作,我们必须使用其已完成的事件
注册它的活动:
reportClient.GetUserCoordinatesReportCompleted += reportClient_GetUserCoordinatesReportCompleted;
然后抓住comleted事件,使用它的响应:
void reportClient_GetUserCoordinatesReportCompleted(object sender, GetUserCoordinatesReportCompletedEventArgs e)
{
// Use Result here
var Result = e.Result;
if(Result !=null)
{
// do something
}
}
见这里:
http://msdn.microsoft.com/en-us/library/ms730059%28v=vs.110%29.aspx