Как решить ошибку HTTP-запроса Sharepoint CSOM 429?

Sharepoint часто выдает ошибку 429 (Слишком много запросов) и мы уже предприняли все действия, описанные в статье ниже, но некоторые запросы продолжают блокироваться.

https://docs.microsoft.com/en-us/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online

В нашем сценарии используется настроенное настольное приложение (надстройка) для Word, Excel, Power Point и Outlook, которое получает доступ к Sharepoint через CSOM (с сетевыми учетными данными пользователя), и мы уже зарегистрировали эту надстройку через «/_layouts/15/AppRegNew». .aspx» и обозначил все наши запросы как «NONISV|{НАЗВАНИЕ НАШЕЙ ОРГАНИЗАЦИИ}|{ИМЯ НАШЕЙ ДОПОЛНИТЕЛЬНОЙ ИНФОРМАЦИИ}/1.0», как описано в:

https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/register-sharepoint-add-ins


person Bruno Leitão    schedule 22.02.2018    source источник
comment
пользователь крайне редко подвергается регулированию в SharePoint Online. Сервис надежен и рассчитан на очень большие объемы. Если вас ограничивают, в 99 % случаев это происходит из-за пользовательского кода. Возможно, вам нужно оптимизировать CSOM, чтобы было меньше вызовов?   -  person tinamou    schedule 23.02.2018
comment
Это не так уж и редко, @tinamou. Если вы не сделаете именно то, что описано в статьях, которые я разместил в своем вопросе, вы наверняка будете ограничены в сценарии с CSOM с использованием служебной учетной записи. К счастью, я еще раз просмотрел обе статьи и свой код, и все заработало. Спасибо.   -  person Bruno Leitão    schedule 21.05.2018


Ответы (1)


Следуйте инструкциям в этой статье Microsoft:

https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/register-sharepoint-add-ins

Если у вас есть зарегистрированная надстройка, сделайте это при создании контекста SharePoint (с помощью CSOM):

    private void Initialize()
    {
        this.SPCurrentContext = new ClientContext(this.Url);

        if (string.IsNullOrWhiteSpace(this.Domain))
        {
            this.SPCurrentContext.Credentials = new SharePointOnlineCredentials(this.User, ParseToSecureString(this.Password));
        }
        else
        {
            this.SPCurrentContext.Credentials = new NetworkCredential(this.User, ParseToSecureString(this.Password), this.Domain);
        }

        this.RetryCount = Properties.Settings.Default.DefaultRetryCount;
        this.RetryDelay = Properties.Settings.Default.DefaultRetryDelay;
        this.NONISV = Properties.Settings.Default.ClientAppNONISV;

        this.SPCurrentContext.ExecutingWebRequest += delegate (object sender, WebRequestEventArgs e)
        {
            e.WebRequestExecutor.WebRequest.UserAgent = this.NONISV; // This is the TRICK!!!
        };
    }

NONIV, используемый в качестве HTTP-заголовка User-Agent, должен выглядеть примерно так:

NONISV|{Название вашей компании}|{Название вашей надстройки}/1.0

Как описано здесь. Удачи!

person Bruno Leitão    schedule 20.06.2019