通过.NET确定每个查询的DocumentDB请求费用
我试图弄清楚在通过提供的.NET客户端库执行DocumentDB查询请求时是否可以获得“请求费用”。 细节回到底层的HTTP标题“x-ms-request-charge”中,我可以通过Fiddler等进行监控,但如果我可以通过.NET直接获取它。
有没有人这样做过? 或者至少能够确认它是否根本不可能?
更新:
添加说明我在执行查询而不是其他操作时请求收费。
你应该能够通过.Net库获得它。 例如,请查看下面的屏幕截图,其中显示了“ Create New User
操作的响应。 结果是Microsoft.Azure.Client.ResourceResponse
类型,它有一个名为RequestCharge
的属性。
UPDATE
所以我检查了查询结果,你是正确的,这不是直接在.Net库中公开的。 但是,这在ResponseHeaders
属性中可用,您可以使用以下内容找到它:
FeedResponse queryResult = await documentClient.CreateDocumentQuery(collectionSelfLink, query, options).AsDocumentQuery().ExecuteNextAsync(); var requestCharge = queryResult.ResponseHeaders["x-ms-request-charge"];
而不是在Fiddler检查它。
注意
ExecuteNextAsync
可以返回带有延续令牌的结果子集。 如果你想要所有的结果,你必须迭代直到文档db不发送abck一个延续令牌。
var docDbQueryable = documentClient.CreateDocumentQuery(collectionSelfLink, query, options).AsDocumentQuery(); var docDbResults = new List (); do { var batchResult = await docDbQueryable.ExecuteNextAsync ();; docDbResults.AddRange(batchResult); } while (docDbQueryable.HasMoreResults); return docDbResults;
以下是记录每个查询的成本以及处理分页所需的内容:
public async Task> Query(string databaseId, string collectionId, SqlQuerySpec sqlQuery, int take) where T : Resource { double queryCost = 0; const int maxPageSize = 100; var query = _client.CreateDocumentQuery ( UriFactory.CreateDocumentCollectionUri(databaseId, collectionId), sqlQuery, new FeedOptions() {MaxItemCount = Math.Min(maxPageSize, take)}).AsDocumentQuery(); var response = await query.ExecuteNextAsync (); queryCost += response.RequestCharge; var entities = response.ToList(); while (entities.Count < take && query.HasMoreResults) { var nextResponse = await query.ExecuteNextAsync (); queryCost += nextResponse.RequestCharge; entities.AddRange(nextResponse); } Debug.WriteLine( "Query [{0}] for {1} documents in collection [{2}] cost {3} RUs.", sqlQuery.QueryText, take, collectionId, queryCost); return entities.Take(take).ToList(); // We may end up with more than the requested number of items. }
- 将最多100,000条记录插入DocumentDB的最快方法
- Azure服务结构实例计数
- Azure Active Directory回复URL未按预期工作
- Service Bus 1.1使用WindowsAzure.ServiceBus dll创建队列
- Azure存储:403服务器无法validation请求
- 我是否可以创建一个Azure Webjob,它将function公开给仪表板但不使用Azure存储?
- API Application Insights使用的良好实践
- 突然在SQL Azure上获得大量等待操作超时问题
- 交换Azure Web App部署槽会注销ASP.NET Core RC2中的所有用户