2010-11-08 11 views
5

Possible Duplicate:
Calling a webservice that uses ISO-8859-1 encoding from WCFWCF Eccezione: Text Message Encoding e la codifica ISO-8859-1

Sto cercando di consumare un servizio Web esterno (il servizio web ha implementazione PHP) utilizzando VS 2008, .net 3.5, WCF (Ambiente: Windows XP e VS 2008). Aggiungo il riferimento del servizio al servizio Web, VS genera il proxy WCF.

Il binding è basicHttpBinding.

chiamo il metodo in Web Service, tramite proxy, poi ho cominciato ad avere un ProtocolException, ho ricevuto il seguente messaggio di errore:

System.ServiceModel.ProtocolException: The content type text/xml; charset=ISO-8859-1 of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly.

The first 644 bytes of the response were:

This was successful

Beh, avevo bisogno di chiamare un servizio in iso-8859-1 codifica.

Qualsiasi codice sorgente di esempio utile per risolverlo?

Aggiornamento:

L'encoder di default utilizzato in WCF funziona solo con UTF-8 e UTF-16 (grande e little endian).

Se uso textEncoding = "iso-8859-1" nel legare in app.config,

ottengo questo errore:

System.ArgumentException: No se admite la codificación de texto 'iso-8859-1' usada en el formato de mensaje de texto. Nombre del parámetro: encoding.

System.ServiceModel.Channels.TextEncoderDefaults.ValidateEncoding(Encoding encoding) System.ServiceModel.Channels.TextMessageEncodingBindingElement.set_WriteEncoding(Encoding value) System.ServiceModel.BasicHttpBinding.set_TextEncoding(Encoding value) System.ServiceModel.Configuration.BasicHttpBindingElement.OnApplyConfiguration(Binding binding) System.ServiceModel.Configuration.StandardBindingElement.ApplyConfiguration(Binding binding) System.ServiceModel.Description.ConfigLoader.LookupBinding(String bindingSectionName, String configurationName, ContextInformation context) System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint serviceEndpoint, String configurationName) System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName) System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address) ctor(String endpointConfigurationName, EndpointAddress remoteAddress) CreateSimplexFactory() CreateChannelFactory() CreateChannelFactoryRef(EndpointTrait`1 endpointTrait) InitializeChannelFactoryRef() ctor() IntegracionEasyVista.ServiceEasyVista.WebServicePortTypeClient..ctor() in

Aggiornamento:

Chiamata di un servizio web che utilizza la codifica ISO-8859-1 da WCF

Calling a webservice that uses ISO-8859-1 encoding from WCF

Questa pagina MSDN (http://msdn.microsoft.com/en-us/library/ms751486(v=VS.90).aspx) mostra come creare un "CustomTextEncoder" che può supportare più di utf-8, utf-16 e codifiche Unicode. Include un codice sorgente completo ed è stato molto utile per me per far funzionare le cose.

Io uso CustomTextMessageEncodingElement, ma ottengo l'errore:

The content type text/xml; charset=ISO-8859-1 of the response message does not match the content type of the binding (text/xml;charset=iso-8859-1). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes of the response were:**

dal codice di campioni MSDN, ho modificare il costruttore dalla classe CustomTextMessageEncoder:

public CustomTextMessageEncoder(CustomTextMessageEncoderFactory factory) 
{ 
    writerSettings = new XmlWriterSettings(); 
    writerSettings.Encoding = Encoding.GetEncoding(factory.CharSet); 
    contentType = string.Format("{0};charset={1}", 
    factory.MediaType, this.writerSettings.Encoding.HeaderName); 
} 

sostituisco "{0}; charset = {1} "per" {0}; charset = {1} "(Ho incluso uno spazio vuoto)

Quindi, ho ricevuto l'errore:

The message version of the outgoing message (Soap11 (http://schemas.xmlsoap.org/soap/envelope/) AddressingNone
(http://schemas.microsoft.com/ws/2005/05/addressing/none)) does not match that of the encoder

(Soap12 (http://www.w3.org/2003/05/soap-envelope) Addressing10 (http://www.w3.org/2005/08/addressing)).
Make sure the binding is configured with the same version as the message.

risposta

-3

Penso che dovresti essere in grado di aggirare questo problema cambiando esplicitamente la tua configurazione di binding per impostare la proprietà textEncoding su "iso-8859-1" invece del valore predefinito di "utf-8".

+2

Fallisce per me, in TextEncoderDefaults.ValidateEncoding (Encoding encoding). System.ArgumentException: Non supporta il textencoding 'iso-8859-1' – Kiquenet

+0

Hai ragione; Non l'avevo mai provato prima. Probabilmente qualche stupido limite nella WCF. – tomasr

+2

Forse è meglio cancellare questa risposta. – Kiquenet