WCF et texte personnalisé encodage - salissante
-
27-10-2019 - |
Question
J'ai un problème de WCF vraiment bizarre ici ...
Nous vous connectez à un service Web tiers merdique; ce fut un cauchemar pour obtenir même ça va, nous devions créer un WCF personnalisé contraignant car ces gars-là ont décidé d'utiliser « ISO-8859-1 » comme encodage de texte (au lieu de UTF-8 comme tout le monde sur le web), et les autres paramètres étaient en désordre, trop - et non documenté nulle part, bien sûr ...
Il a travaillé ok pour un certain temps maintenant, mais tout à coup, certains de nos données à revenir dans mutilée vers le haut. Nous nous attendons à récupérer des noms de lieux, et d'être en Suisse, certains d'entre eux ont trémas allemands en eux. Mais depuis deux ou trois mois, nous obtenons soudainement
Hünibach
au lieu du répertoire
Hünibach
Ainsi, le U (u tréma) est mutilé.
Pas de problème, je me suis dit ils ont finalement commuté en UTF-8, et je changé ma liaison personnalisée à l'utilisation UTF-8 comme encodeur de texte au lieu de la norme ISO-8859-1 - mais pas de chance - non, je reçois:
EXCEPTION: System.ServiceModel.Security.MessageSecurityException
La requête HTTP a été interdit avec le schéma d'authentification du client 'Basic'.
Qu'est-ce que la f ????? Le service est protégé par un nom d'utilisateur / mot de passe que nous passons à l'aide de la ClientCredentials
de WCF. Il semble que la modification du codage du texte salit en quelque sorte les pouvoirs!?!?! Bizarre .....
OK - Retour à l'ISO-8859-1, et je viens d'essayer d'interpréter la charge utile de réponse en UTF-8 - encore une fois pas de chance :-( essayées avec UTF-16, UTF-32, UTF-7 même, Unicode, BigEndianUnicode -. en vain
Alors comment diable puis-je récupérer mes propres trémas, et toujours être en mesure d'appeler ce service sanglant ... fonctionne très bien dans SoapUI, btw .....
Toutes les idées ?? Je saisir désespérément à tout pailles que vous pourriez me jeter !!
La solution
Essayez les données d'inspection récupérons et voir ce que les codes numériques qu'ils utilisent pour le représenter. Tréma est l'un de ces personnages 8859-1 que le code des actions avec d'autres caractères.
Voir le deuxième paragraphe à - http://en.wikipedia.org/wiki/ % C3% 9C # Typographie
Autres conseils
En fait, je enfin compris quel était le problème.
Pour une raison quelconque, changer l'échantillon CustomTextEncoder
(fourni par Microsoft dans les WCF et WF échantillons) pour utiliser UTF-8 au lieu de l'ISO-8859-1 ne fonctionne pas .
Par contre, arrachant l'encodeur texte personnalisé à partir de ma liaison personnalisée et juste en utilisant le TextMessageEncoder
standard WCF fournit du go get (qui utilise UTF-8 par défaut) a fait travail .
Ne me demandez pas pourquoi .... c'est juste les faits que j'ai trouvé .....