问题
Possible Duplicate:
Calling a webservice that uses ISO-8859-1 encoding from WCF
I am trying to consume an external Web Service (the web service has PHP implementation) using VS 2008, .net 3.5, WCF( Environment : Windows XP and VS 2008). I add Service Reference to Web Service, VS generates WCF Proxy.
Binding is basicHttpBinding.
I call to method in Web Service, using Proxy, then I started getting a ProtocolException, I received the following error message :
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
Well, I needed to call a service in iso-8859-1 encoding.
Any useful sample source code for solve it?
Update:
The default encoder used in WCF only works with UTF-8 and UTF-16 (big and little endian).
If I use textEncoding="iso-8859-1" in binding in app.config,
I get this error:
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
Update:
Calling a web service that uses ISO-8859-1 encoding from WCF
Calling a webservice that uses ISO-8859-1 encoding from WCF
This MSDN page (http://msdn.microsoft.com/en-us/library/ms751486(v=VS.90).aspx) shows how to create a "CustomTextEncoder" which can support more than utf-8, utf-16 and unicode encodings. It includes full sample source code and was very useful for me to get things going.
I use CustomTextMessageEncodingElement, but I get error:
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:**
From code of Samples MSDN, I modify the constructor from CustomTextMessageEncoder class:
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);
}
I replace "{0};charset={1}" by "{0}; charset={1}" (I have included an blank)
Then, I get the error:
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.
回答1:
Does this existing answer help? Calling a webservice that uses ISO-8859-1 encoding from WCF
回答2:
I think you should be able to work around this by explicitly changing your binding configuration to set the textEncoding property to "iso-8859-1" instead of the default value of "utf-8".
来源:https://stackoverflow.com/questions/4123584/wcf-exception-text-message-encoding-and-iso-8859-1-encoding