场景:我一直在与托管 WCF 数据服务 3.0 的第三方公司合作,我们只能通过 API 访问他们的 Web 服务,不,我不能通过使用存储过程来加快速度,因为我没有具有 SQL 直接访问权限。
我玩过一点 PFX,尝试将它与 WCF 数据服务一起使用可能会大错特错。例如
public List<EntityA> GetAEntitiesBy(int customerID) {
var result = new List<EntityA>();
int lastResultCount = 50;
int callsMade = 0;
while (lastResultCount == 50)
{
var results = MyApiWrapper.CreateODataContext().EntityA.Expand("Customer").Expand("EntityB").AsParallel()
.Where(c => c.EntityA.CustomerID == customerID)
.Where(c => c.EntityB.IsProperty1True && c.EntityB.Property2TypeID == 1)
.Select(c => c)
.Skip(callsMade * 50)
.Take(50));
results.ForAll(c => nodes.Add(c));
callsMade++;
lastResultCount = results.Count;
}
return nodes;
}
我知道每次执行 DataServiceQuery 时我最多只能提取 50 行,我的瓶颈是在此函数结果返回到我的网络表单后创建的,因为后来我做了一个.ForEach
并且对于我得到的每一行我需要运行一些其他的查询其他服务 (WCF)
任何建议如何加快此操作?
另一方面,当我调试此方法时,我发现在并行查询执行期间调用 GetEnumerator 时出现错误消息“无法评估子项”。
谢谢