繁体   English   中英

异步请求多次同一Web服务

[英]Requesting same web service multiple times asynchronously

我正在创建一个使用Web服务(不属于我们的组织)的剃刀视图。 服务调用的方式如下:

  1. 调用第一个方法,它返回一些guid。
  2. 对于每个 guid,异步调用第二个服务以返回记录。

我必须异步调用服务方法以获得性能。 我遇到的问题是,在将记录返回到视图之前,我目前无法等待所有响应都可用。 我到目前为止:

将记录返回到剃刀视图的方法:

    public List<ProactisContract> GetContractsList()
    {
        List<Guid> contractIds = GetAmendedContracts();
        GetContractDetails(contractIds);

        //Test
        System.Threading.Thread.Sleep(5000);

        return _contractList;
    }

这是从第一次调用循环guid的第二种方法,为每条记录发出服务请求:

    private void GetContractDetails(List<Guid> contractIds)
    {
        foreach (var recId in contractIds)
        {
            var request = new GetContractDetailsRequest { Authentication = _authorisation, ContractGuid = recId, ContractNumber = "string", SummaryOnly = true };

            AsyncCallback asyncCallback = GetContractDetailsCallBack;

            _service.BeginGetContractDetails(request, asyncCallback, _service);
        }
    }

    private void GetContractDetailsCallBack(IAsyncResult asyncResult)
    {
        var response = _service.EndGetContractDetails(asyncResult);

        lock (_contractList)
        {
            var contract = new ProactisContract
            {
                /*Assign property values*/
            };
            _contractList.Add(contract);
        }
    }

关于如何在将List <>返回到剃刀视图之前等待收到所有响应的任何想法?

谢谢

您可以创建一个等于contractIds长度的全局计数器变量,然后每次回调结束时,将计数器减1,然后执行

while (counter != 0)
{
}

你正在睡觉的地方。

无论如何绝对不是一个优雅的解决方案,但我认为它会起作用。 我相信这里的其他人会提供更好的解决方案,但在此期间,我的应该解决你的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM