Llamar a un servicio web que utiliza la encoding ISO-8859-1 de WCF

Intento llamar a un servicio web utilizando WCF que utiliza la siguiente encoding:

 

No puedo cambiar la encoding de este servicio web. He generado un proxy wcf y cuando bash llamar al proxy, aparece el siguiente error:

FailedSystem.ServiceModel.ProtocolException: el tipo de contenido text / xml; charset = ISO-8859-1 del mensaje de respuesta no coincide con el tipo de contenido del enlace (text / xml; charset = utf-8). Si utiliza un codificador personalizado, asegúrese de que el método IsContentTypeSupported se implemente correctamente.

¿Alguien tiene alguna idea de cómo llamo a un servicio web que no es UTF-8 usando wcf?

No se puede hacer esto de forma inmediata en WCF, desafortunadamente.

Enfrenté el mismo problema y obtuve un enlace personalizado (ya sea en configuración o en código) que puede usar. Se basa en el transporte HTTP, y si eso te sirve, podría publicar la configuración personalizada aquí, o enviarte un enlace al código C # para el enlace.

Esta página de MSDN aquí muestra cómo crear un “CustomTextEncoder” que puede soportar más que utf-8, utf-16 y codificaciones Unicode. Incluye un código fuente de muestra completo y fue muy útil para que funcione.

Esta publicación de blog aquí muestra algunas cosas adicionales a tener en cuenta al intentar que el codificador de texto personalizado funcione correctamente.

Espero que ayude.

Bagazo

ACTUALIZAR:
Basado en el ejemplo de Microsoft que mencioné anteriormente para CustomTextEncoder, puede crear fácilmente un enlace personalizado con una encoding de mensaje de texto ISO-8859-1; solo use este fragmento de configuración (suponiendo que haya descargado y comstackdo y hecho referencia a ese ejemplo de Microsoft):

                    

Puedes encontrar ese código, más un ISO88591Binding que básicamente envuelve toda esta configuración en código, en mi directorio Skydrive WCF ISO 8859-1 Encoding . Sin embargo, ten cuidado: esto se basa en mis requisitos que tenía en ese momento, por ejemplo, mi servicio necesitaba hablar con https requerido, y también algunos otros ajustes un tanto extraños, por lo que es posible que tengas que modificarlos o hacerlos configurables en config , si es necesario. Ese proyecto ISO88591Binding “también contiene un netHttpBinding que de nuevo es una muestra proporcionada por Microsoft que usé para escribir mi propio enlace personalizado en el código.

Escribir un encuadernado personalizado en WCF definitivamente es posible, pero no realmente para los débiles de corazón …

En este enlace , puede descargar los archivos para crear el enlace personalizado y hacer lo siguiente en su código:

 CustomBinding binding = new CustomBinding( new CustomTextMessageBindingElement("iso-8859-1", "text/xml", MessageVersion.Soap11), new HttpTransportBindingElement()); myWebService client = new myWebService(); client.Endpoint.Binding = binding; 

Otra opción es utilizar la tecnología más antigua de .NET Framework 2.0 ASMX WebServices que admite iso-8859-1 de fábrica:

enter image description here

enter image description here

Y si el servicio utiliza la Autenticación HTTP básica, puede especificarlo así:

 TheService theService = new TheService(); theService.Credentials = new NetworkCredential("username", "password"); 

Si no desea ocuparse de una gran cantidad de códigos descargados e implementación de bajo nivel, puede solucionarlo utilizando una solicitud de estilo antiguo utilizando la clase HttpWebRequest, como se describe aquí . Ahora, estará exento de código automatizado e instalaciones de la interfaz y jugará con el análisis Xml manual.