我需要使用其API提供的异步方法从控制台应用程序中调用第三方Web服务。我使用旧的ASMX Web引用方式生成代理。
我有一个类,它执行以下操作,我想创建它的一个实例,用它调用服务,但后来我想等待回调的完成,然后重复一个新的实例,新呼叫,新回调等。
我不想一次激活超过1个呼叫。 即一次只存在一个班级实例。
Web服务调用代码如下所示:
using(ABCWebService service = new ABCWebService())
{
...
service.ExecuteCallAndWaitResultCompleted += service_ExecuteCallAndWaitResultCompleted;
service.ExecuteCallAndWaitResultAsync(parm1, parm2, .., stateObj);
}
...
回调如下:
void service_ExecuteCallAndWaitResultCompleted(object sender, ExecuteCallAndWaitResultCompletedEventArgs e)
{
// collect data and then move onto next sequential call
}
答案 0 :(得分:0)
我非常怀疑[API]提供的“异步方法”。 Web方法是一种Web方法。这是你的异步调用,也就是说通过在你的客户端代理类上调用异步函数,你告诉框架(在基本术语中)在另一个线程上触发对该资源的请求,并在它有结果时回调你。它是你异步的客户端调用。
在Visual Studio(2012)中,当您添加服务引用然后单击高级,然后单击添加Web引用以基于VS调用“基于.NET Framework 2.0 Web服务技术的代码”创建服务引用,我收集就是你如何做到这一点,结果客户端类不仅有每个Web方法的异步方法,还有同步方法 - 一个用于服务中的每个Web方法。这些同步方法在得到结果之前不会返回任何内容或将控制权返回给调用者。
如果我的用例正确,您希望控制台应用程序调用Web方法,等待响应,在响应到达后执行某些操作,然后重新开始。在这种情况下,不要调用异步方法(例如GetPeopleAsync
)调用同步方法(GetPeople
) - 可能在循环内。