【发布时间】:2016-03-15 14:35:25
【问题描述】:
我正在创建一个使用 Web 服务(不属于我们的组织)的 razor 视图。服务调用的方式如下:
- 调用第一个方法,该方法返回多个 guid。
- 对于这些 guid 中的每一个,异步调用第二个服务以返回记录。
为了提高性能,我必须异步调用服务方法。我遇到的问题是,在将记录返回到视图之前,我目前无法等到 ALL 响应可用。我已经走到这一步了:
返回记录到razor视图的方法:
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 返回剃刀视图的任何想法?
谢谢
【问题讨论】:
-
我认为这可能是一个重复的问题,你看过了吗:stackoverflow.com/questions/12337671/…
-
我没有。谢谢你的建议。虽然这不是重复的 IMO,因为我的方法不返回任务,因此我没有什么可处理的。
-
啊,我没看到,抱歉。
-
我已经在下面发布了一个答案,如果可以的话请告诉我。
标签: c# web-services asynchronous soap