重复使用异步 Web 服务,但从不同时使用 C#

本文关键字:服务 异步 Web | 更新日期: 2023-09-27 18:30:43

我需要使用其 API 提供的异步方法从控制台应用程序中调用第三方 Web 服务。我正在使用旧的 ASMX Web 引用方法来生成代理。

我有一个执行以下操作的类,我想创建它的实例,使用它调用服务,但随后我想等待回调完成,然后才重复新实例、新调用、新回调等。

我不希望一次有超过 1 个活动呼叫。即一次只存在 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
}

重复使用异步 Web 服务,但从不同时使用 C#

我非常怀疑是否存在"API 提供的异步方法"。网络方法是一种网络方法。这是异步调用,也就是说,通过在客户端代理类上调用异步函数,您可以告诉框架(基本上)在另一个线程上触发对此资源的请求,并在有结果时回调您。它是异步的客户端调用。

在Visual Studio(2012)中,当您添加服务引用,然后单击"高级",然后单击"添加Web引用"以基于VS所谓的"基于.NET Framework 2.0 Web服务技术的代码"创建服务引用时,我收集的是你是如何做到的,生成的客户端类不仅具有每个Web方法的异步方法,而且还具有同步方法 - 服务中的每个Web方法都有一个。这些同步方法在获得结果之前不会返回任何内容或将控制权交还给调用方。

如果我的用例正确,则希望控制台应用调用 Web 方法,等待响应,在响应到达后执行某些操作,然后重新启动。在这种情况下,不是调用异步方法(例如GetPeopleAsync),而是调用同步方法GetPeople) - 可能在循环内。