WCF y codificación de texto personalizado - negocios desordenados
-
27-10-2019 - |
Pregunta
Tengo un problema WCF realmente extraño aquí ...
Nos estamos conectando a un servicio web de terceros horrible; Fue una pesadilla incluso hacerlo en marcha, tuvimos que crear una vinculación de WCF personalizada ya que esos tipos decidieron usar "ISO-8859-1" como su codificación de texto (en lugar de UTF-8 como todos los demás en la web), y La otra configuración también estaba desordenada, y no se documentaron en ningún lado, por supuesto ...
Ha estado funcionando bien por un tiempo, pero de repente, algunos de nuestros datos volvieron destrozados. Esperamos recuperar los nombres de los lugares y al estar en Suiza, algunos de ellos tienen umlauts alemanes en ellos. Pero durante los últimos dos o tres meses, de repente regresamos
Hünibach
en lugar del apropiado
Hünibach
Entonces el ü (u Umlaut) está destrozado.
No hay problema, pensé que finalmente cambiaron a UTF-8, y cambié mi encuadernación personalizada para usar UTF-8 como su codificador de texto en lugar de ISO-8859-1, pero no hay suerte, no estoy obteniendo:
Excepción: System.ServiceModel.Security.MessageSecurityException
La solicitud HTTP estaba prohibida con el esquema de autenticación del cliente 'Básico'.
¿Qué f ????? El servicio está protegido por un nombre de usuario/contraseña que pasamos usando el ClientCredentials
de WCF. ¡Parece que cambiar la codificación del texto de alguna manera arruina las credenciales!?!?! Extraño.....
OK-Volver a ISO-8859-1, y solo intenté interpretar la carga útil de respuesta como UTF-8-Nuevamente sin suerte :-( Probado con UTF-16, UTF-32, UTF-7 incluso, Unicode, BigendianUnicode-Todos en vano.
Entonces, ¿cómo demonios recupero mis umlauts apropiados y aún puedo llamar a ese servicio sangriento ... funciona bien en SoapUi, por cierto .....
¿¿Algunas ideas?? ¡Me estoy comprendiendo desesperadamente cualquier pajita que puedas lanzarme!
Solución
Intente inspeccionar los datos que está recuperando y vea qué códigos numéricos están utilizando para representarlos. Umlaut es uno de esos personajes en 8859-1 que comparte código con otros caracteres.
Ver segundo para en - http://en.wikipedia.org/wiki/%C3%9C#Typography
Otros consejos
En realidad, finalmente descubrí cuál era el problema.
Por alguna razón, cambiar la muestra CustomTextEncoder
(proporcionado por Microsoft en las muestras de WCF y WF) para usar UTF-8 en lugar de ISO-8859-1 no funciona.
Por otro lado, arrancando el codificador de texto personalizado de mi encuadernación personalizada y solo usando el estándar TextMessageEncoder
que WCF proporciona desde el GO GO (que usa UTF-8 de forma predeterminada) funcionó.
No me preguntes por qué ... esos son solo los hechos que encontré .....