Как правильно отправить пакетный запрос с помощью UCWA 2.0? - PullRequest
0 голосов
/ 10 мая 2019

Я пишу приложение UCWA для получения информации о присутствии каждого пользователя. На данный момент я подписываюсь на все мои нужные контакты, я инициирую поток событий, а затем я получаю около 200 событий. Я перебираю их, чтобы получать данные о моем присутствии и заметки, используя цикл for, то есть отправляю около 100 запросов, что, согласно документации Microsoft, может разрядить батарею на мобильных устройствах или повлиять на производительность. Я хотел бы использовать пакетную обработку для решения этой проблемы.

onEvent(events) {
    for (var i in events) {
        const event = events[i]
        switch (event.link.rel) { // 250 events filtered down to around 100
            case 'contactPresence':
            case 'presence':
                this.setPresence(event.link.href, this.getUser(event))
                break
            case 'contactNote':
            case 'note':
                this.setNote(event.link.href, this.getUser(event))
                break
            case 'presenceSubscription':
                ...
                break
        }
    }
}

После поиска в документации Microsoft я не смог найти никакой помощи в том, как отформатировать пакетный запрос. Я попытался выполнить один из приведенных примеров, но получил ошибку 400, например:

{
    "code":"BadRequest",
    "message":"Your request couldn\u0027t be completed."
}

В конце концов я попытался отправить пакет после форматирования, которое я видел из этого сообщения , вот так:

batch() {
    const boundary = Date.now()
    fetch(this.hub + this.response._links.batch.href, {
        method: 'POST',
        headers: {
            Accept: 'multipart/batching',
            Authorization: `Bearer ${this.token}`,
            'Content-Type': `multipart/batching;boundary=${boundary}`
        },
        body: `--${boundary}\r\nContent-Type: application/http; msgtype=request\r\n\r\nGET ${this.response._links.self.href + '/people/contacts'} HTTP/1.1\r\nAccept: application/json\r\nHost: ${this.hub}\r\n\r\n--${boundary}--`
    }).then(r => r.json())
    .then(data => console.log(data))
}

Вот полезная нагрузка запроса:

--1557482296198
Content-Type: application/http; msgtype=request

GET /ucwa/oauth/v1/applications/103357029549/people/contacts HTTP/1.1
Accept: application/json
Host: https://webpoolam41e02.infra.lync.com

--1557482296198--

Это возвращает ошибку 500, однако, вот так:

{
    "code":"ServiceFailure","message":"Your request couldn\u0027t be completed.",
    "debugInfo":{
        "errorReportId":"8d6499597a54443495627bd2b3e3c5b6"
    },
    "reasonId":"1000005"
}

Я потратил много времени на поиски ответа, но не могу найти подходящий.

Кто-нибудь знает, как правильно отформатировать пакетный запрос?

1 Ответ

1 голос
/ 16 мая 2019

Я нашел ответ на свой вопрос. Оказывается, для окончательной партии требуется 3 переноса строки:

\r\n\r\n\r\n

Вместо 2:

\r\n\r\n
...