我正在尝试使用 REST API 更新 Azure 服务总线订阅。
当我"ForwardTo"
在请求 XML 中包含属性时,我收到Authorization Failure (401)
来自服务总线的错误。
这是我的请求 XML 的样子:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xmlns="http://www.w3.org/2005/Atom">
<content type="application/xml">
<SubscriptionDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">
<LockDuration>PT1M</LockDuration>
<RequiresSession>false</RequiresSession>
<DefaultMessageTimeToLive>P10675199DT2H48M5.4775807S</DefaultMessageTimeToLive>
<DeadLetteringOnMessageExpiration>false</DeadLetteringOnMessageExpiration>
<DeadLetteringOnFilterEvaluationExceptions>true</DeadLetteringOnFilterEvaluationExceptions>
<MessageCount>1</MessageCount>
<MaxDeliveryCount>10</MaxDeliveryCount>
<EnableBatchedOperations>true</EnableBatchedOperations>
<Status>Active</Status>
<ForwardTo>sb://namespacename.servicebus.windows.net/t200</ForwardTo>
<CreatedAt>2017-08-14T16:17:15.308721Z</CreatedAt>
<UpdatedAt>2017-08-16T15:33:03.0317963Z</UpdatedAt>
<AccessedAt>2017-08-16T11:29:37.993Z</AccessedAt>
<AutoDeleteOnIdle>P10675199DT2H48M5.4775807S</AutoDeleteOnIdle>
</SubscriptionDescription>
</content>
</entry>
但是,如果我从请求 XML 中删除“ForwardTo”节点,一切正常。
我还查看了 Service Bus REST API 文档,不幸的是,该文档非常不完整。它没有提供任何关于如何制作 XML 请求有效负载的示例。
我什至查看了其他 SDK(例如 Python),也有很多属性被方便地忽略了:(。
有趣的是,我通过服务总线资源管理器(使用 .Net SDK)执行了相同的操作,并且操作正常。我使用 HTTP 协议连接到我的 Service Bus 帐户并通过 Fiddler 跟踪请求/响应,我的请求和 Service Bus Explorer 发送的请求或多或少相同(它发送了一些我没有包含在我的请求中的额外参数)。
此外,服务总线没有向我提供有关该错误的更多详细信息。我从那里得到的唯一东西是:
{
"statusCode": 401,
"baseError": null,
"headers": {
"transfer-encoding": "chunked",
"content-type": "application/xml; charset=utf-8",
"server": "Microsoft-HTTPAPI/2.0",
"strict-transport-security": "max-age=31536000",
"date": "Wed, 16 Aug 2017 15:41:33 GMT",
"connection": "close"
}
}
对于可能导致此错误的原因,我在这里完全不知所措。
我确实知道服务总线 REST API 对 XML 元素应该出现在请求正文中的顺序非常挑剔,据我所知,顺序是正确的(但我可能又错了,因为我没有任何参考文件来比较我的请求正文)。
当我更改“ForwardTo”节点的顺序时,我没有收到任何错误,但随后此属性被忽略(因为请求正文中 XML 元素的顺序)。
对此的任何见解将不胜感激。