API REST Sharepoint возвращает HTTP-коды состояния 200 и 401 на одном и том же действительном токене доступа
У меня есть функция Azure, которая запускается веб-крюком Sharepoint (Online), и эта функция - для каждой ссылочной реализации - вызывает API REST Sharepoint для получения соответствующих изменений с использованием сохраненного ChangeToken.
Ресурс Sharepoint аутентифицирован с помощью сертификата X509
Подписка находится в библиотеке документации по умолчанию данного сайта Sharepoint. В настройках теста большое количество файлов добавляется в библиотеку документации за одну операцию.
Запрос http следует формату:string requestUrl = String.Format("{0}/_api/lists('{1}')/getchanges", siteUrl, listId)
;
Запрос к API выполняется в следующем формате:
string query = "{'query': {'Activity':false,'Add':true,'Alert':false,'ChangeTokenStart':{ 'StringValue':'$ChangeTokenStart'},'ChangeTokenEnd':null,'ContentType':false,'DeleteObject':true,'Field':false,'File':true,'Folder':true,'Group':false,'GroupMembershipAdd':false,'GroupMembershipDelete':false,'Item':true,'LatestFirst':false,'List':true,'Move':true,'Navigation':false,'RecursiveAll':false,'Rename':true,'RequireSecurityTrim':false,'Restore':true,'RoleAssignmentAdd':false,'RoleAssignmentDelete':false,'RoleDefinitionAdd':false,'RoleDefinitionDelete':false,'RoleDefinitionUpdate':false,'SecurityPolicy':false,'Site':true,'SystemUpdate':false,'Update':true,'User':false,'View':false,'Web':false}}";
//$changeTokenStart gets replaced in the actual call
Запрос строится следующим образом:
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, new Uri(requestUrl));
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer",accessToken);
request.Content = new StringContent(query,Encoding.UTF8,"application/json");
Замечания:
Несмотря на официальную документацию по Sharepoint Webhooks, Webhooks не запускаются примерно раз в минуту или около того, но они могут запускаться очень часто. Это означает, что получение Изменений для подписки Webhook может привести к частым вызовам API REST Sharepoint. Мне кажется, что сервер sharepoint активно управляет этой частотой в зависимости от количества "активности" в списке.
Все вызовы API REST Sharepoint, использующие один и тот же действительный и правильно полученный токен доступа, в основном возвращают код состояния HTTP 200 (ОК), но также очень часто код состояния HTTP 401 (неавторизован). Как это возможно?
При реализации алгоритма отката (который запускается всякий раз, когда код состояния вызова API REST не равен 200) возвращает "Сообщение запроса уже отправлено. Невозможно отправить одно и то же сообщение запроса несколько раз". когда тот же HTTP-запрос сделан к API Sharepoint. Зачем?
Есть очереди, как решить эти проблемы?