首页 / C# / c# – 异步多次请求相同的Web服务
c# – 异步多次请求相同的Web服务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 异步多次请求相同的Web服务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1480字,纯文字阅读大概需要3分钟。
内容图文
![c# – 异步多次请求相同的Web服务](/upload/InfoBanner/zyjiaocheng/773/023c2f55254045b3a9d135f182c584c6.jpg)
我正在创建一个使用Web服务(不属于我们的组织)的剃刀视图.服务调用的方式如下:
>调用第一个方法,返回一些guid.
>对于每个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);
}
}
关于如何在返回列表之前等待所有响应的任何想法<>回到剃刀视图?
谢谢
解决方法:
您可以创建一个等于contractIds长度的全局计数器变量,然后每次回调结束时,将计数器减1,然后执行
while (counter != 0)
{
}
你正在睡觉的地方.
无论如何绝对不是一个优雅的解决方案,但我认为它会起作用.我相信这里的其他人会提供更好的解决方案,但在此期间,我的应该解决你的问题.
内容总结
以上是互联网集市为您收集整理的c# – 异步多次请求相同的Web服务全部内容,希望文章能够帮你解决c# – 异步多次请求相同的Web服务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。