我正尝试使用REST API更新Azure服务总线订阅。使用REST API更新Azure服务总线订阅时获取“授权失败(401)”
当我在请求XML中包含"ForwardTo"
属性时,出现Service Bus中的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跟踪请求/响应,并且我的请求和服务总线浏览器发送的请求大致相同(它发送一些额外的参数,我没有包括在我的请求)
此外,服务总线并没有给我任何关于错误的更多细节,只有我从那里得到的是:
{
"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元素的顺序)。
任何对此的见解将不胜感激。
我在使用c#管理库for servicebus之前完成了这个工作(只需注意它可以完成) –
看起来我只是使用路径:https://github.com/s-innovations/MessageProcessor.ServiceFabric/斑点/主/ SRC/ServiceFabric。QueueManagerActor/Actors/DispatcherManagerActor.cs#L132而不是完整的命名空间uri –
谢谢!我查看了.Net SDK代码,如果您只是指定路径,SDK会将Service Bus URI假装为路径。 –