1 votes

Wsdl analyse xml, problème de longueur maximale après l'encodage du texte

Nous travaillons en collaboration avec une autre entreprise. Notre application communique avec l'autre application via WCF de notre côté et un gestionnaire WSDL Java personnalisé implémenté de l'autre côté. Ils spécifient le format WSDL et l'une des règles est qu'une chaîne spécifique ne peut pas contenir plus de 15 caractères. (normalement c'est 60, mais je prends 15 pour des raisons d'exemple faciles)

Lorsque nous essayons d'envoyer la chaîne suivante à eux, nous obtenons une erreur indiquant que la chaîne est trop longue selon le WSDL:

"exemple & test" > c'est une chaîne de 14 caractères, donc elle devrait être autorisée

Le parseur Microsoft WCF traduit cela en "exemple & test". Cette chaîne encodée fait 18 caractères de long.

Maintenant, quel est le comportement standard pour vérifier une longueur maximale définie dans un message? Est-ce le message encodé ou le message décodé? Je penserais que c'est le message décodé, mais je n'en suis pas sûr. Si c'est le message encodé, comment devrions-nous gérer cela pour savoir comment diviser la chaîne?

0voto

Colin Dijkgraaf Points 16

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

Pour les chaînes de caractères et les types de données dérivés des chaînes de caractères, maxLength est mesuré en unités de caractères tel que défini dans [XML 1.0 (deuxième édition)]

Jeux de caractères [Définition : Une entité analysée contient du texte, une séquence de caractères, qui peut représenter une balise ou des données de caractères.]

En lisant cela, je penserais que le comportement standard est que le décodage d'un caractère marqué doit être traité comme un seul caractère.

Donc généralement, vous effectuez toute division/troncation avant de l'encoder. Sinon, vous rencontrerez des problèmes si vous tronquez au milieu d'un caractère encodé. J'ai testé ceci contre un service web WCF avec BizTalk derrière et c'est bon avec une chaîne XML encodée qui est plus longue que la longueur maximale.

Il semble qu'ils le fassent avant de le décoder cependant. Donc vous devrez peut-être l'encoder d'abord et ensuite le diviser sur l'espace blanc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X