2017-09-27 2 views
0

Je travaille sur un script PowerShell en utilisant Microsoft.BizTalk.ExplorerOM pour mettre à jour dynamiquement la clé SAS SB-Messaging pour BizTalk Receive Emplacements et ports d'envoi. C'est pour nous permettre de rouler les clés SAS pour nos files d'attente Service Bus, et mettre à jour BizTalk avec les nouvelles clés aussi facilement que possible.Lire un SB-Messaging Envoyer Port propriétés en utilisant le Microsoft.BizTalk.ExplorerOM fait un changement de rupture

J'ai cela fonctionne correctement pour les emplacements de réception, mais les ports d'envoi me donnent un problème différent.

Dès que je lis les PrimaryTransport propriétés du port d'envoi, il semble qu'un certain changement se fait sous les couvertures, qui empêche alors SaveChanges de travailler, jetant à la place une « exception de données XML non valide ou malformé ».

Send Port SaveChanges exception

Ceci est comparé à l'receivelocation, où je peux lire l'une de ses propriétés, puis SaveChanges avec succès.

Receive Location successful SaveChanges

Notez que dans les deux cas ce, aucune modification n'a été faite par moi. Je fais simplement une lecture, puis une sauvegarde.

Quelqu'un peut-il offrir des conseils sur ce qui pourrait être à l'origine du problème, et toutes les solutions possibles à essayer?

Répondre

0

Avait ce même problème, lors de l'utilisation de Powershell pour remplacer les valeurs dans ServiceBus ReceiveLocations & SendPorts.

Le problème provient des symboles xml non valides dans TransportTypeData, qui sont convertis lorsque le script les lit dans le cmd de la console PS.

Tous les symboles xml non valides (comme celui qui apparaît pour la valeur Namespace) doivent être convertis en ampli, et si je ne me trompe pas, même double ampli: ed.

Voici un article exemple montrant des exemples sur ce que je veux dire par « double ampli: ed »: How do I escape ampersands in XML so they are rendered as entities in HTML?

Hope this sens de faire, et sinon, laissez-moi savoir et je vais vous donner un autre aller.

+0

Voir maintenant que je sautais à des conclusions, basé sur ma propre expérience en remplaçant les valeurs TransportTypeData. Non, je ne sais pas pourquoi cela se terminerait par une erreur, lorsque vous tapez simplement les propriétés actuelles (et ne tente pas de remplacer comme je l'ai d'abord pensé). Lorsque l'erreur se produit, pourriez-vous encore taper les propriétés actuelles pour le SendPort, pour voir si elles ont changé entre les deux? –

+0

Je n'ai pas vraiment l'option de saisir les propriétés avant et après. Ce problème se produit la toute première fois que j'ai lu les propriétés. Autre chose qui mérite d'être mentionnée, ce problème se produit uniquement avec les ports d'envoi qui utilisent l'adaptateur SB-Messaging. Je peux très heureusement lire et puis appeler Enregistrer si je travaille contre dire un adaptateur de port Envoyer un port. – EdL

+0

Reproduisez l'erreur sur le SendPort, puis lisez à nouveau les propriétés, pour voir si elles restent les mêmes que la capture d'écran SendPort. –

0

juste essayé de faire cela de C#, semble bien fonctionner:

 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();