如何使用 UCWA 2.0 正确发送批处理请求?
How can I properly send a batch request using UCWA 2.0?
我正在编写一个 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."
}
最终我尝试按照我在 this post 中看到的格式发送一批,如下所示:
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--
这个returns一个500错误,但是,像这样:
{
"code":"ServiceFailure","message":"Your request couldn\u0027t be completed.",
"debugInfo":{
"errorReportId":"8d6499597a54443495627bd2b3e3c5b6"
},
"reasonId":"1000005"
}
我花了很长时间寻找答案,但找不到有效的答案。
有谁知道如何正确设置批处理请求的格式?
我找到了我自己的问题的答案。结果最后一批需要3个换行符:
\r\n\r\n\r\n
而不是 2:
\r\n\r\n
我正在编写一个 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."
}
最终我尝试按照我在 this post 中看到的格式发送一批,如下所示:
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--
这个returns一个500错误,但是,像这样:
{
"code":"ServiceFailure","message":"Your request couldn\u0027t be completed.",
"debugInfo":{
"errorReportId":"8d6499597a54443495627bd2b3e3c5b6"
},
"reasonId":"1000005"
}
我花了很长时间寻找答案,但找不到有效的答案。
有谁知道如何正确设置批处理请求的格式?
我找到了我自己的问题的答案。结果最后一批需要3个换行符:
\r\n\r\n\r\n
而不是 2:
\r\n\r\n