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.
Fallisce per me, in TextEncoderDefaults.ValidateEncoding (Encoding encoding). System.ArgumentException: Non supporta il textencoding 'iso-8859-1' – Kiquenet
Hai ragione; Non l'avevo mai provato prima. Probabilmente qualche stupido limite nella WCF. – tomasr
Forse è meglio cancellare questa risposta. – Kiquenet