XML-разбор wsdl, проблема максимальной длины после кодирования текста - PullRequest
1 голос
/ 02 апреля 2010

Мы работаем вместе с другой фирмой. наше приложение обменивается данными с другим приложением через WCF, с другой стороны, и с другой стороны - с помощью встроенного обработчика java wsdl. Они определяют формат wsdl, и одно из правил заключается в том, что конкретная строка не может содержать более 15 символов. (обычно это 60, но я беру 15 по причинам простого примера)

Когда мы пытаемся отправить им следующую строку, мы получаем ошибку, что строка слишком длинная в соответствии с wsdl:

"example & test"> это строка из 14 символов, поэтому она должна быть разрешена

синтаксический анализатор wcf от Microsoft переводит это как "example & test". Длина этой кодированной строки составляет 18 символов.

Теперь, каково стандартное поведение для проверки максимальной длины, определенной в сообщении? Это закодированное сообщение или декодированное сообщение? Я бы подумал, что это декодированное сообщение, но я не уверен. Если это закодированное сообщение, как мы должны справиться с этим, чтобы знать, как разбивать строку?

1 Ответ

0 голосов
/ 15 апреля 2010

http://www.w3.org/TR/xmlschema-2/#rf-maxLength 4.3.3 максимальная длина

Для строк и типов данных · полученных · из строки, maxLength измеряется в единицах символов, как определено в [XML 1.0 (второе издание)]

Кодировки [Определение: анализируемый объект содержит текст, последовательность символов, которые могут представлять разметку или символьные данные.]

Считая, что я думаю, что стандартное поведение - это декодированный как размеченный символ, следует рассматривать как один символ.

Так что обычно вы делаете любое разбиение / усечение перед тем, как его кодировать. В противном случае вы столкнетесь с проблемами, если урежете середину закодированного символа. Я проверил это на веб-сервисе WCF с BizTalk за ним, и он подходит для строки в кодировке XML, которая длиннее maxLength.

Звучит так, будто они делают это до декодирования. Поэтому вам, возможно, придется сначала закодировать его, а затем разбить его на пустое пространство.

...