我在使用单个partion集合的Azure DocumentDB上遇到问题。 每当我尝试以编程方式插入或查询任何文档时,我都会收到一条消息,说明
“读取会话不适用于输入会话令牌。”
由于这个集合是新创建的,我认为这是一个通用错误,我试图在另一个数据库上重新创建集合,但是当我尝试创建集合时,我无法提交部署,因为我被问到分区键。 error
站在documentation说的话,
“您不必为这些集合指定分区键。”
有人可以帮忙吗?难道我做错了什么? 该地区是西欧(如果它有帮助)
答案 0 :(得分:0)
对于您输入会话令牌的错误,您可以在此处添加代码吗?
对于您尝试创建集合的门户网站中的问题,请执行以下操作:
这将很快在门户网站中修复。
答案 1 :(得分:0)
我假设您正在尝试创建一个通用的分页逻辑。根据我对DocDB的经验,需要使用Continuation Token来实现分页。
我通常有an extension获得所述令牌,然后我在后续请求中使用它,如下所示:
/// <summary>
/// Paged results with continuation token
/// </summary>
/// <typeparam name="T"></typeparam>
public class PagedResults<T>
{
public PagedResults()
{
Results = new List<T>();
}
/// <summary>
/// Continuation Token for DocumentDB
/// </summary>
public string ContinuationToken { get; set; }
/// <summary>
/// Results
/// </summary>
public List<T> Results { get; set; }
}
/// <summary>
/// Creates a pagination wrapper with Continuation Token support
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <returns></returns>
public static async Task<PagedResults<T>> ToPagedResults<T>(this IQueryable<T> source)
{
var documentQuery = source.AsDocumentQuery();
var results = new PagedResults<T>();
try
{
var queryResult = await documentQuery.ExecuteNextAsync<T>();
if (!queryResult.Any())
{
return results;
}
results.ContinuationToken = queryResult.ResponseContinuation;
results.Results.AddRange(queryResult);
}
catch
{
//documentQuery.ExecuteNextAsync might throw an Exception if there are no results
return results;
}
return results;
}
您可以在代码中使用此帮助程序以及FeedOptions:
var feedOptions = new FeedOptions() { MaxItemCount = sizeOfPage };
var collectionUri = UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId);
PagedResults<T> results = await client.CreateDocumentQuery<T>(collectionUri,feedOptions).Where(predicate).ToPagedResults();
//You can check of the ContinuationToken and use it on another query
if(!string.IsNullOrEmpty(results.ContinuationToken)){
feedOptions.RequestContinuation = results.ContinuationToken;
PagedResults<T> moreResults = await client.CreateDocumentQuery<T>( collectionUri,feedOptions ).Where(predicate).ToPagedResults();
}
另外,我在Github上维护一个包含helpers and providers DocDB的回购,如果你愿意,你可以免费使用,大多数基于Performance guidelines article和个人经验。
另一个建议,尝试将您的SDK更新到最新版本,.Net Full framework或.Net Core版本(取决于您的项目)。