使用Microsoft.BizTalk.ExplorerOM读取SB-Messaging发送端口属性会发生重大变化

时间:2017-09-27 14:07:17

标签: powershell biztalk azureservicebus

我正在开发一个PowerShell脚本,它利用Microsoft.BizTalk.ExplorerOM动态更新BizTalk接收位置和发送端口的SB-Messaging SAS密钥。这是为了让我们能够为我们的Service Bus队列推送SAS密钥,并尽可能轻松地使用新密钥更新BizTalk。

我对接收位置的工作正常,但发送端口给了我一个不同的问题。

一旦我阅读了发送端口的 PrimaryTransport 属性,似乎在封面下进行了一些更改,这会阻止SaveChanges工作,而是抛出“无效或格式错误的XML数据”异常”。

Send Port SaveChanges exception

将其与ReceiveLocation进行比较,我可以在其中读取任何属性,然后成功地保存SaveChanges。

Receive Location successful SaveChanges

请注意,在这两种情况下,我都没有进行任何更改。我只是在做一个Read,然后是Save。

任何人都可以提出任何可能导致问题的建议,以及任何可能的解决方案吗?

2 个答案:

答案 0 :(得分:0)

当使用Powershell替换ServiceBus ReceiveLocations&中的值时,出现了同样的问题。 SendPorts。

问题在于TransportTypeData中没有有效的xml符号,当脚本在PS cmd中读出它们时会转换。

所有无效的xml符号(例如名称空间值出现的符号)都需要转换为放大器,如果我没有弄错,即使是双放大器:ed。

这是一个示例文章,展示我的意思的例子" double amp:ed": How do I escape ampersands in XML so they are rendered as entities in HTML?

希望这是有道理的,如果没有,那就告诉我,我会再给它一次。

答案 1 :(得分:0)

刚尝试用C#做这个,似乎工作正常:

        var root = new Microsoft.BizTalk.ExplorerOM.BtsCatalogExplorer() { ConnectionString = "Data Source=(local);Initial Catalog=BizTalkMgmtDb;Integrated Security=SSPI;" };
        var sendPort = root.SendPorts["xxxx.ServiceBusQueue"];
        System.Diagnostics.Trace.TraceInformation(sendPort.PrimaryTransport.TransportTypeData);
        sendPort .PrimaryTransport.TransportTypeData = sendPort.PrimaryTransport.TransportTypeData.Replace("RootManageSharedAccessKey", "MySharedAccessKey");
        root.SaveChanges();