WCF异常:文本消息编码和ISO-8859-1编码 [英] WCF Exception: Text Message Encoding and ISO-8859-1 Encoding

查看:231
本文介绍了WCF异常:文本消息编码和ISO-8859-1编码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


可能重复:


我正在尝试使用VS 2008,.net 3.5,WCF(环境:Windows XP和VS 2008)使用外部Web服务(Web服务有PHP实现) 。我添加服务引用到Web服务,VS生成WCF代理。



绑定是basicHttpBinding。



我打电话给方法在Web Service中,使用Proxy,然后我开始得到一个ProtocolException,我收到以下错误信息:


System.ServiceModel.ProtocolException:
内容类型为text / xml;
charset = ISO-8859-1的响应
消息与内容不匹配
类型的绑定(text / xml;
charset = utf-8)。如果使用自定义
编码器,请确保
IsContentTypeSupported方法正确执行



响应的前644个字节是:



这是成功的


嗯,我需要打电话服务于iso-8859-1编码。



解决问题的任何有用的示例源代码?



更新: p>

WCF中使用的默认编码器仅适用于UTF-8和UTF-16(大和小端)。



如果我在app.config中使用textEncoding =iso-8859-1绑定,



我收到此错误:


System.ArgumentException:No se admite
lacodificaciónde texto'iso-8859-1'
usada en el formato de mensaje de
texto 。 Nombre delpará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(绑定
绑定)
System.ServiceModel.Description.ConfigLoader.LookupBinding(String
bindingSectionName,String
configurationName,ContextInformation
上下文)
System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint
serviceEndpoint,String
configurationName)
System.ServiceModel.ChannelFactory.ApplyConfiguration(String
configurationName)
System.ServiceModel.Channe lFactory.InitializeEndpoint(String
configurationName,EndpointAddress
address)ctor(String
endpointConfigurationName,
EndpointAddress remoteAddress)
CreateSimplexFactory()
CreateChannelFactory()
CreateChannelFactoryRef(EndpointTrait`1
endpointTrait)
InitializeChannelFactoryRef()ctor()
IntegracionEasyVista.ServiceEasyVista.WebServicePortTypeClient..ctor()


更新:



调用使用WCF使用ISO-8859-1编码的Web服务



调用使用WCF中的ISO-8859-1编码的Web服务



此MSDN页面( http://msdn.microsoft.com/en-us/library/ms751486(v = VS.90) .aspx )显示了如何创建CustomTextEncoder它可以支持超过utf-8,utf-16和unicode编码。它包含完整的示例源代码,对我来说非常有用。



我使用CustomTextMessageEncodingElement,但是我收到错误:


内容类型为text / xml; charset = ISO-8859-1的响应消息与绑定的内容类型不匹配(text / xml; charset = iso-8859-1)。如果使用自定义编码器,请确保IsContentTypeSupported方法已正确实施。响应的前1024个字节是:**


从示例代码MSDN,我从CustomTextMessageEncoder类修改构造函数: p>

  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);
}

将{0}; charset = {1}替换为{ 0}; charset = {1}(我已经包含一个空白)



然后,我收到错误:


传出消息的消息版本(Soap11( http:/ /schemas.xmlsoap.org/soap/envelope/ )AddressingNone
http://schemas.microsoft.com/ws/2005/05/addressing/none ))与编码器的不一致性相符(例如:Soap12( http://www.w3.org/2003/05/soap-envelope )地址10 ( http://www.w3.org/2005/08/addressing )) 。



解决方案

这个现有的答案是否有帮助? 调用使用ISO-8859-1的Web服务从WCF编码


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.

解决方案

Does this existing answer help? Calling a webservice that uses ISO-8859-1 encoding from WCF

这篇关于WCF异常:文本消息编码和ISO-8859-1编码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆