我正在开发一个PowerShell脚本,它利用Microsoft.BizTalk.ExplorerOM动态更新BizTalk接收位置和发送端口的SB-Messaging SAS密钥。这是为了让我们能够为我们的Service Bus队列推送SAS密钥,并尽可能轻松地使用新密钥更新BizTalk。
我对接收位置的工作正常,但发送端口给了我一个不同的问题。
一旦我阅读了发送端口的 PrimaryTransport 属性,似乎在封面下进行了一些更改,这会阻止SaveChanges工作,而是抛出“无效或格式错误的XML数据”异常”。
将其与ReceiveLocation进行比较,我可以在其中读取任何属性,然后成功地保存SaveChanges。
请注意,在这两种情况下,我都没有进行任何更改。我只是在做一个Read,然后是Save。
任何人都可以提出任何可能导致问题的建议,以及任何可能的解决方案吗?
答案 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();