Почему SQL Сервер XML Тип данных изменяет порядок определенного атрибута в блоке цифровой подписи при вставке и извлечении? - PullRequest
0 голосов
/ 14 февраля 2020

Проект требует цифровой подписи документа XML перед передачей. Используя пример, предоставленный Microsoft (ссылка здесь ), следующий код является частью функции, вызываемой для цифровой подписи XML:

XmlDsigExcC14NTransform canMethod = (XmlDsigExcC14NTransform)signedXml.SignedInfo.CanonicalizationMethodObject;
canMethod.InclusiveNamespacesPrefixList = "Sign";

Это приводит к добавлению следующего тега в XML

<InclusiveNamespaces PrefixList="Sign" xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" />

Однако при сохранении этого XML в столбце XML Тип данных в SQL Server 2014, тег изменяется следующим образом:

<InclusiveNamespaces xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="Sign" />

Обратите внимание, порядок атрибутов выше ( PrefixList переместился в конец)

Я также попытался сделать столбец как nvarchar . Но при извлечении файла XML в виде строки и преобразовании его в тип XML в хранимой процедуре получается тот же результат. Тем не менее, когда я сохраняю XML, содержащий PrefixList , в конце концов, порядок сохраняется.

Хотя это не влияет на проверку подписи, но важно, чтобы приложение сохранить исходный порядок атрибутов (изменяет код CRC32 XML). У меня вопрос, как помешать SQL серверу изменить порядок? В качестве альтернативы возможно ли каким-то образом изменить порядок атрибутов, сгенерированных из самого кода, в первую очередь, чтобы он соответствовал столбцу SQL Server? Пожалуйста, помогите.

...