通过.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(collectio‌​nSelfLink, query, options).AsDocumentQuery().ExecuteNextAsync(‌​); var requestCharge = queryResult.ResponseHeaders["x-ms-request-charge"]; 

而不是在Fiddler检查它。

注意

ExecuteNextAsync可以返回带有延续令牌的结果子集。 如果你想要所有的结果,你必须迭代直到文档db不发送abck一个延续令牌。

 var docDbQueryable = documentClient.CreateDocumentQuery(collectio‌​nSelfLink, 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. }