2010-04-02 2 views
1

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

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

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

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

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

+0

Какой код создает ошибку? Можете ли вы разместить здесь ошибку? –

ответ

0

http://www.w3.org/TR/xmlschema-2/#rf-maxLength 4.3.3 MaxLength

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

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

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

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

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