WCF 测试客户端中的 Async() 方法

Posted

技术标签:

【中文标题】WCF 测试客户端中的 Async() 方法【英文标题】:Async() methods in WCF test client 【发布时间】:2015-01-08 22:54:21 【问题描述】:

我编写了一个简单的 WCF 服务,当我调试项目时,我得到一个 WCF 客户端窗口,其中每个服务方法都有一个 async() 版本(例如,对于来自服务的方法 ConnectMessages() 有一个新方法GetMessagesAsync()。但是,异步方法被遮蔽并标有红色“x”,并带有以下标题:

wcf 测试客户端不支持此操作,因为它使用 system.threading.tasks.task

我的问题是:为什么每个方法都有一个异步版本,为什么这些异步标记为无效?这是什么意思?

【问题讨论】:

【参考方案1】:

当我们通常调用服务方法时,我们的代码是按顺序执行的,它等待服务返回的响应并且代码执行被阻塞,当我们使用 Async 方法时,我们的代码不会阻塞并继续它的执行和服务在返回响应时触发一个事件。

如果我已经同步调用了服务:

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 中做上述事情,我们必须使用它的 Completed 事件

注册它的事件:

    reportClient.GetUserCoordinatesReportCompleted += reportClient_GetUserCoordinatesReportCompleted;

然后捕获完成的事件,使用它的响应:

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

http://www.codeguru.com/columns/experts/building-and-consuming-async-wcf-services-in-.net-framework-4.5.htm

【讨论】:

我仍然不清楚为什么这些方法被遮蔽并标有红色“x”。我还能使用它们吗?此外,在您的示例中我如何使用该事件尚不清楚。我必须申报活动吗?我应该在通风处理程序中调用 async() 方法吗? 否,当您添加服务引用时,我们选择使用基于异步的任务的选项,请查看这篇文章:codeguru.com/columns/experts/… 谢谢。这篇文章似乎正是我所需要的。 这个答案的正文似乎根本不是问题的解决方案。它不应该依赖于 cmets 和外部链接。

以上是关于WCF 测试客户端中的 Async() 方法的主要内容,如果未能解决你的问题,请参考以下文章

WCF 服务代理中伪装的类型?

WCF添加测试客户端

启用WCF测试客户端的相关技巧

使用WCF测试客户端 z

Microsoft WCF 测试客户端错误

测试 WCF 服务的最佳方法是啥?